以下代码在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:shahid@gmail.com
相同的脚本,我尝试在终端中运行如下,但它显示空输出。
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.
答案 0 :(得分:0)
您已通过@ob_start();
启用了输出缓冲,但您永远不会结束输出缓冲(ob_end_flush();
)。此外,设置error_reporting(E_ALL ^ E_NOTICE);
会导致报告NOTICE
错误(只需将其设置为-1
)。
您还从CLI脚本访问$_SESSION
。这可以起作用,但可能没有达到预期效果。
但是,在我看来,这里实际发生的是,你只是简单地进入一条不会产生任何输出的执行路径。见这里:
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
语句并跟踪代码的执行路径。