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