PHP - 作为命令行脚本执行Web脚本?

时间:2014-06-21 00:15:36

标签: php facebook facebook-php-sdk command-line-interface

使用PHP版本5.4.28,我想要完成的是:

  • 我的Facebook应用程序是脚本" otherevent.php"。它不应该对任何用户公开可见。它是一个位于Web服务器上的后端应用程序,因为Facebook要求它拥有一个Web地址,并且该应用程序由其他脚本运行和管理。

  • 我必须运行和管理应用程序的第一个脚本叫做#34; app.php"。理想情况下,它应该执行的是执行" otherevent.php",获取输出,并将输出回显到屏幕。

  • Craziness以"意外T_STRING的形式出现,期待T_CONSTANT_ENCAPSED_STRING"其中包括错误。

我在这里有三个测试文件的评论和代码," otherevent.php"," app.php"和" test.php"这是一个用于调试错误的测试文件。这是:

test.php的:     

echo $argv[1] . " TADA!";
exit();

?>

otherevent.php(删除并审查,以获取敏感信息):     

require_once( 'Facebook/FacebookSession.php' );
require_once( 'Facebook/FacebookRedirectLoginHelper.php' );
require_once( 'Facebook/FacebookRequest.php' );
require_once( 'Facebook/FacebookResponse.php' );
require_once( 'Facebook/FacebookSDKException.php' );
require_once( 'Facebook/FacebookRequestException.php' );
require_once( 'Facebook/FacebookServerException.php' );
require_once( 'Facebook/FacebookOtherException.php' );
require_once( 'Facebook/FacebookAuthorizationException.php' );
require_once( 'Facebook/GraphObject.php' );
require_once( 'Facebook/GraphSessionInfo.php' );
require_once( 'Facebook/GraphUser.php' );

use Facebook\FacebookSession;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookRequest;
use Facebook\FacebookResponse;
use Facebook\FacebookSDKException;
use Facebook\FacebookRequestException;
use Facebook\FacebookServerException;
use Facebook\FacebookOtherException;
use Facebook\FacebookAuthorizationException;
use Facebook\GraphObject;
use Facebook\GraphSessionInfo;
use Facebook\GraphUser;


  // Get session variable!
session_start();
$output = array(
);
// Initialize the app with the app's "secret" and ID. These are private values.
FacebookSession::setDefaultApplication( 'xxxxxxxxxxxx','xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' );

$arg1 = $_SESSION['arg1']; //This is a password variable that tells the script it's being run by an authorized script on the server, not by an outside source.
$arg2 = $_SESSION['arg2']; //This is an argument that tells the script what it's supposed to be trying to do.
if($arg1 != "whatever"){
    echo"Something went wrong; the password variable didn't work.";
    //The following line is what is -supposed- to happen when this codeblock executes, but we're debugging right now, so we're providing output instead to see what happens in the code.
    //header("Location: http://www.fantasycs.com/app.php");
}elseif($arg2 == "loginurl"){
    echo "It worked! Login URL will be displayed here.";
    unset($_SESSION['arg2']);
    unset($_SESSION['arg1']);
    exit();
}
?>

最后,app.php:

<?php

session_start();
$_SESSION['arg1'] = "whatever";
$_SESSION['arg2'] = "loginurl";

$output = shell_exec('php-cli test.php Thisworks'); //This runs test.php and $output captures the output properly just fine. No worries.

echo $output;


$output = shell_exec('php test.php Thisworks'); //This keeps running indefinitely so far as I can tell, and I can't see what's happening because no output is produced. It simply keeps trying to load the page forever. No output is seemingly capture. Bizarre.

echo $output;


$output = shell_exec('php otherevent.php'); //This has the same problem as when you try to run test.php with the "php" command. It stalls.

echo $output;


$output = shell_exec('php-cli otherevent.php Thisworks'); //This produces an error on the "use" lines in otherevent.php. It says there's a syntax error on those lines. This has never happened or appeared before; these lines, simply put, do NOT have any errors in them. They've run fine before and have never been changed. As a result of the error, the script is aborted, and no output is captured.

echo $output;

?>

在这个例子中,我想要的是让app.php能够执行otherevent.php,获取登录URL(或输出的任何测试输出),并将登录URL打印到屏幕上。怎么做到这一点?显然它并不像看起来那么简单。

1 个答案:

答案 0 :(得分:1)

使用php-cli围绕'use'关键字的错误让我相信你有一个旧版本的PHP ..但是为了解决你的问题的一部分,我建议不要使用shell_exec来运行其他PHP代码..如果你需要捕获脚本的输出,你可以使用这样的输出缓冲区:

<?php

session_start();
$_SESSION['arg1'] = "whatever";
$_SESSION['arg2'] = "loginurl";

// Start capturing the output in a buffer
ob_start();
include 'otherevent.php';    
// Get the data and close the buffer
$output = ob_get_clean();
echo $output;

?>

如果您之后要立即回显输出,那么输出缓冲区没有意义。

检查您的PHP版本。该SDK需要5.4 +。