从php运行shell脚本然后从shell运行php脚本,无法让它工作

时间:2015-02-02 18:33:41

标签: php bash shell exec

我正在使用.sh运行exec脚本(已尝试shell_execpassthru)并使用> /dev/null 2>&1 &附加命令,以便php脚本释放了浏览器。然后在shell脚本中我运行另一个php文件并将该php文件的响应捕获到变量中。 shell脚本最终在服务器上调用index.php而不是提供的php文件。

这是我运行shell脚本的php命令:

exec(BASE.'/../shellfile.sh '.$arg1.' '.$arg2.' '.$arg3.' > /dev/null 2>&1 &');

这是我从shell脚本运行php文件的命令:

VAR1=$(php -q $BASE/processingfile.php $FOLDER/temp.txt)

附注:

BASE在PHP脚本中定义,$arg1$arg2$arg3是定义的变量。

在shell脚本中定义了

VAR1BASEFOLDER

我尝试使用SSH从Putty运行BASE.'/../shellfile.sh '.$arg1.' '.$arg2.' '.$arg3.' > /dev/null 2>&1 &'并且效果很好。如果直接从SSH运行,它包括正确的文件而不是index.php

所以这就是逻辑:PHP - >运行shell文件和免费浏览器,Shell - >运行PHP文件并捕获响应。

Shell脚本最终在服务器上调用index.php而不是processingfile.php。此外,X-Powered-By: PHP/5.X.XX之类的PHP标头将从index.php返回到shell脚本并保存到VAR1 shell变量中。

关于我做错了什么的任何建议?

附加说明:

  • 第一个PHP文件位于公共文件夹下方,而shell脚本和processingfile.php位于公用文件夹上方

  • 我在公共文件夹中有一个.htaccess文件,但不在公共文件夹上

  • shellfile.shprocessingfile.php被编组为777。

1 个答案:

答案 0 :(得分:0)

您可能需要从默认目录(例如index.php所在的目录)更改为要运行脚本的目录。例如,使用类似于此的命令告诉php在哪里查找脚本。

exec("cd path/to/file && sh ./yourScript.sh);