我正在使用.sh
运行exec
脚本(已尝试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
。
我尝试使用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.sh
和processingfile.php
被编组为777。
答案 0 :(得分:0)
您可能需要从默认目录(例如index.php所在的目录)更改为要运行脚本的目录。例如,使用类似于此的命令告诉php在哪里查找脚本。
exec("cd path/to/file && sh ./yourScript.sh);