[英]PHP exec command works in shell and php command line but not on website
我在尝试复制使用 php exec 命令安装的服务器驱动器上生成的文件时遇到问题。 但是,当从网页调用时,该命令不起作用(尽管返回状态为 1)。
$src = "/mnt/...";
$dest = "/var/www/...";
exec("cp $src $dest");
我已经尝试打印出命令以确保它是正确的,并且确实如此。 我还尝试在尝试复制文件之前确保该文件存在,并且确实存在。
if (file_exists($src)) {
exec("cp $src $dest");
}
将命令直接复制到终端可以工作。
$ >cp /mnt/... /var/www/...
我也试过使用 php 命令行工具来运行 exec 命令,这也有效。
$ >php -r 'exec("cp /mnt/... /var/www/...");'
我也尝试过使用shell_exec
,结果相同。
主机通常禁用 shell 命令。 在你的本地,你可以编辑你的php.ini
并添加这一行来禁用你想要的功能:
disable_functions =exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
但是在您的实时网站上,您需要联系您的主机提供商以启用默认禁用的功能。
您可以添加第二个参数来帮助调试, $output
将显示cp
命令正在执行的操作,无论是否出错。
我还建议在文件周围加上引号,以防万一里面有空格。
$src = "/mnt/...";
$dest = "/var/www/...";
exec("cp '$src' '$dest'", $output, $retrun_var);
var_dump($output, $retrun_var);
不久前我遇到了类似的问题。 这基本上就是所有评论员所说的。 Web 服务器的用户/权限受到限制,而且正在使用的 shell 环境和/或 PATH 环境变量也受到限制。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.