shell — получение пустого вывода при запуске скрипта php в терминале

Следующий код работает нормально в NetBeans, но не в терминале с использованием shell-скрипта. Если у кого-то есть идеи, поделитесь им.

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);
}

когда я запускаю приведенный выше скрипт в netbeans (shift + f6), я получаю следующий вывод:

ENTITY ID:167
Created at:2015-07-31 12:37:04
NAME:shahid md
EMAIL:[email protected]

тот же скрипт, я пытаюсь запустить в терминале, как показано ниже, но он показывает пустой вывод.

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

следующую команду я использую для запуска файла скрипта:
но я ничего здесь не получаю.

rizwan@rizwan-Inspiron-3520:~/PHP-workspace/mgstore$ ./cron.sh

rizwan@rizwan-Inspiron-3520:~/PHP-workspace/mgstore$

и я попробовал следующую ссылку также:

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.

3

Решение

Вы включили выходную буферизацию через @ob_start();, но вы никогда не заканчиваете буферизацию вывода (ob_end_flush();). Дополнительно настройка error_reporting(E_ALL ^ E_NOTICE); отключает отчетность NOTICE ошибки (просто установите его -1).

Вы также получаете доступ $_SESSION из сценария CLI. Это может быть сделано, чтобы работать, но это может не делать то, что вы ожидаете.

Но мне кажется, что на самом деле здесь происходит то, что вы просто вводите путь выполнения, который не производит никакого вывода. Посмотреть здесь:

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;

Поскольку это не HTTP-запрос, $_GET['oauth_token'] не будет установлен, и, $_SESSION['state'] будет 0 и таким образом фальси. Все, что он делает, это получает токен, выводит заголовок и выходит из скрипта. Могу поспорить, если вы положите echo в этой ветви вашего кода вы увидите, что он напечатан. Мой рекомендуемый курс действий для отладки должен добавить echo инструкции по всему и отслеживать путь выполнения кода.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]