繁体   English   中英

PHP exec 命令适用于 shell 和 php 命令行,但不适用于网站

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM