今天在web-php后端脚本中执行外部shell脚本,使用了相对路径 ./../xx.sh 但是执行不成功,后来换成了绝对路径执行成功了,
考虑到因为php脚本包含导致的,路径不对了,但是使用绝对路径又不太好
可以使用
$cmd = __DIR__ . "/../xx.sh";
参考:
【https://kb.kutu66.com/php/post_11452405】
从PHP执行外部命令的一些常见故障来自 shell:
-
命令使用相对路径,但PHP是从任意位置启动的:
-
PHP和 shell 使用不同的用户凭据运行。 当PHP通过web服务器运行时,这种情况常常发生。
-
PHP和 shell 运行不同的命令。 很多人都会像
exec("foo $bar")
一样调用内容,甚至不检查"foo $bar"
包含什么内容。 -
未完成错误检查。 最简单的方法是捕获和打印标准输出。标准错误。状态代码,当然还有所有PHP错误消息,包括警告和通知。
- 你可以将 stderr重定向到 sdtout 。
- 可以使用允许捕获更多信息的PHP函数,例如 exec() 。
-
不允许web服务器在操作系统级别执行该命令。
- 查看 se linux或者类似工具。