2017-02-23 89 views
0

我尝试运行函数exec()来执行另一个脚本php。 这是在Windows上的工作,但在Linux服务器dosen't。php exec()在Linux服务器上无法正常工作

的Windows

$str = exec("start /B php test_file.php",$output); 

Linux的

$str = exec("php test_file.php > /dev/null &",$output); 

test_file.php

echo "Test work"; 

两个脚本AR E在同一个文件夹,在Windows上运行我得到与字符串数组“测试工作”,但是当我的Linux服务器上运行Linux的COMAND这么想的

编辑

我尝试改变COMAND作为@Robert sugest:

$str = exec("php test_file.php",$output); 
echo $str; 
var_dump($output); 

但返回此:

array(1147) { [0]=> string(24) "X-Powered-By: PHP/7.0.16" ... 
+1

您正在将输出重定向到/ dev/null为什么期望将结果返回给PHP? – apokryfos

+0

我需要返回到变量$输出脚本的结果来进行验证。命令应该如何? –

+1

然后你应该使用'$ str = exec(“php test_file.php”,$ output);'。添加'>/dev/null'会将输出重定向到.. well'/ dev/null',所以'$ output'将保持为空。你也可以在最后使用'&',这意味着命令将在后台运行(除非你不是将输出重定向到某处),exec()命令不会等待命令完成。 – Robert

回答

0

确保您使用正确的路径到这两个PHP斌ary和您要执行的文件。

例子:

exec('/path/to/php -f /path/to/file.php', $output); 

此外,如果你想传递参数给它,你可以将PHP文件后添加它们,并从阵列读取它们。 php manual $argv

在你的情况,你可以这样做:

exec('/path/to/php -f /path/to/file.php param1 param2 param3', $output); 

在您正在执行的PHP文件,你可以做一个

vardump($argv); 

这在我的例子包含4项,$argv[0]是名字$argv[1]具有param1的值,等等。

相关问题