Getting empty output when running PHP script in terminal
the following code works fine in netbeans but not in terminal using a shell script. If anyone has an idea please share it.
test3cron.php
<?php
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
@ob_start();
session_start();
$callbackUrl = "http://mgstore/test3cron.php";
$temporaryCredentialsRequestUrl = "http://mgstore/oauth/initiate?oauth_callback=" . urlencode($callbackUrl);
$adminAuthorizationUrl = 'http://mgstore/admin/oauth_authorize';
$accessTokenRequestUrl = 'http://mgstore/oauth/token';
$apiUrl = 'http://mgstore/api/rest';
$consumerKey = 'd9a371ca7661bee18de8d75f50b7e386';
$consumerSecret = '51486d1b2bd688a927a3eced64ed803e';
error_reporting(E_ALL ^ E_NOTICE);
if (!isset($_GET['oauth_token']) && isset($_SESSION['state']) && $_SESSION['state'] == 1) {
$_SESSION['state'] = 0;
}
try {
$authType = ($_SESSION['state'] == 2) ? OAUTH_AUTH_TYPE_AUTHORIZATION : OAUTH_AUTH_TYPE_URI;
$oauthClient = new OAuth($consumerKey, $consumerSecret, OAUTH_SIG_METHOD_HMACSHA1, $authType);
$oauthClient->enableDebug();
$oauthClient->disableSSLChecks();
if (!isset($_GET['oauth_token']) && !$_SESSION['state']) {
$requestToken = $oauthClient->getRequestToken($temporaryCredentialsRequestUrl);
$_SESSION['secret'] = $requestToken['oauth_token_secret'];
$_SESSION['state'] = 1;
header('Location: ' . $adminAuthorizationUrl . '?oauth_token=' . $requestToken['oauth_token']);
exit;
} else if ($_SESSION['state'] == 1) {
$oauthClient->setToken($_GET['oauth_token'], $_SESSION['secret']);
$accessToken = $oauthClient->getAccessToken($accessTokenRequestUrl);
$_SESSION['state'] = 2;
$_SESSION['token'] = $accessToken['oauth_token'];
$_SESSION['secret'] = $accessToken['oauth_token_secret'];
header('Location: ' . $callbackUrl);
exit;
} else {
$oauthClient->setToken($_SESSION['token'], $_SESSION['secret']);
$resourceUrl = $apiUrl . "/customers?page=400&limit=1";
$oauthClient->fetch($resourceUrl, array(), 'GET', array("Content-Type" => "application/json", "Accept" => "*/*"));
$customerList = json_decode($oauthClient->getLastResponse());
}
if (is_array($customerList) || is_object($customerList)) {
foreach ($customerList as $object) {
$entityid = $object->entity_id;
echo "ENTITY ID:" . "$entityid" . "<br>";
$name1 = $object->firstname;
$name2 = $object->lastname;
$customersince = $object->created_at;
echo "Created at:$customersince<br>";
$name = $name1 . " " . $name2;
echo "NAME:" . "$name" . "<br>";
$email = $object->email;
echo "EMAIL:" . "$email" . "<br>";
}
}
} catch (OAuthException $e) {
print_r($e);
}
when i run the above script in netbeans (shift + f6) i get the following output:
ENTITY ID:167
Created at:2015-07-31 12:37:04
NAME:shahid md
EMAIL:shahid@gmail.com
the same script, i try to run in terminal as follows, but it shows empty output.
cron.sh
#!/bin/bash
SCRIPTPATH=$( cd $(dirname $0) ; pwd -P )
PHP='/usr/bin/php'
# tailf /var/log/cron
cd $SCRIPTPATH
# TO RUN ALL CORN JOBS
$PHP -q test3cron.php
use the following command to run the script file: but I am not getting anything here.
rizwan@rizwan-Inspiron-3520:~/PHP-workspace/mgstore$ ./cron.sh
rizwan@rizwan-Inspiron-3520:~/PHP-workspace/mgstore$
and I tried the following link:
https://magento.stackexchange.com/questions/75414/running-the-magento-rest-api-php-example
rizwan@rizwan-Inspiron-3520:~/PHP-workspace/mgstore$ php -S
localhost:8088 test3cron.php
**Response as follows:**
PHP 5.5.9-1ubuntu4.11 Development Server started at Tue Aug 11
10:32:54 2015 Listening on http://localhost:8088 Document root is
/home/rizwan/PHP-workspace/mgstore Press Ctrl-C to quit.
source to share
You have enabled output buffering through @ob_start();
, but never complete output buffering ( ob_end_flush();
). Also, the installation error_reporting(E_ALL ^ E_NOTICE);
disables error reporting NOTICE
(just set it to -1
).
You also access $_SESSION
from the CLI script. It might be made to work, but it might not be what you expect.
But it seems to me that what is actually happening here is that you just enter the execution path, which produces no output. See here:
if (!isset($_GET['oauth_token']) && !$_SESSION['state']) {
$requestToken = $oauthClient->getRequestToken($temporaryCredentialsRequestUrl);
$_SESSION['secret'] = $requestToken['oauth_token_secret'];
$_SESSION['state'] = 1;
header('Location: ' . $adminAuthorizationUrl . '?oauth_token=' . $requestToken['oauth_token']);
exit;
Since this is not an HTTP request, $_GET['oauth_token']
it will not be installed, but $_SESSION['state']
will 0
and therefore will be false. All it does is get the token, output the header, and exit the script. I bet if you put echo
in this branch of your code, you will see it printed. My recommended course of action for debugging is to add instructions echo
and track the code execution path.
source to share