我使用的是macos系统,在自己本地上搭建了服务器作为测试和学习用。我在使用php文件时,希望调用shell指令,遇到了问题。
我的目标是通过php使用shell指令,调用.sh脚本,并将结果输出到一个txt文件中。
我所使用的指令如下: shell_exe(“sh searchopts_q.sh -s ory -i PYL > result.txt”)
searchopts_q.sh与php文件在同一目录下。
最开始我使用mac自带的终端调试,报错如下:
getaddressvar.sh: line 6: declare: -A: invalid option
declare: usage: declare [-afFirtx] [-p] [name[=value] ...]
sed: 1: "1i [": command i expects \ followed by text
sed: 1: "$a ]": command a expects \ followed by text
(getaddressvar.sh也在同一目录下,被searchopts.sh引用)
我了解到mac的bash版本过低,且与linux系统的指令有一些差距,按照教程的指引一步步走,最后调试出了正确的结果。
接下来调试php文件的过程中,发现以终端直接调用php文件(php xxxx.php)或者直接输入指令都可以正确执行,txt里有正确内容。
以浏览器方式(我这里是用接口测试软件)测试,txt里没有内容。
因此怀疑是写入权限问题,网上和本站也有类似讨论,但是在php文件里把原本的命令改成 shell_exec(‘ls > result.txt’); 并用浏览器访问,可以正确输出文件列表。
因此并不是没有权限写入,同时也说明相关函数没有被禁用,怀疑到可能没有权限使用脚本,但最后试到给整个根目录和它以下的文件全部赋予777,仍然没有用。
在这个过程中,我发现最开始的sed的问题又出现了。。。我不知道为什么已经成功过的东西会出问题,我按照另一个教程修改了bash_profile,终端恢复正确,但是通过接口测试软件仍然会得到sed报错。
我目前的推测是php似乎没有权限使用.sh文件,因为不使用.sh的shell指令和终端直接运行都成功了。但是后面的问题又让我非常困惑,希望有大佬们能够给一点推测和建议。
查看一下网页上的环境变量 PATH
把路径改成绝对路径试试.
/bin/sh /xxx/yyy/searchopts_q.sh