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


Running shell script from php and then php script from shell, can't get it to work

我正在使用 exec php 运行一个.sh脚本(也尝试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是定义的变量。

VAR1BASEFOLDER在 shell 脚本中定义。

我尝试使用 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。

您可能需要

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

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