我正在使用 exec
php 运行一个.sh
脚本(也尝试shell_exec
和passthru
),并在命令后附加> /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
是定义的变量。
VAR1
、BASE
和FOLDER
在 shell 脚本中定义。
我尝试使用 SSH 从 Putty 运行BASE.'/../shellfile.sh '.$arg1.' '.$arg2.' '.$arg3.' > /dev/null 2>&1 &'
,效果很好。它包括正确的文件,而不是直接从 SSH 运行index.php
。
释放浏览器,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.sh
和processingfile.php
是777。
从默认目录(例如 index.php 所在的目录)更改为要运行脚本的目录。例如,使用与此类似的命令告诉 php 在哪里查找脚本。
exec("cd path/to/file && sh ./yourScript.sh);