1

我有一个问题,我试图复制在使用 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,结果相同。

4

3 回答 3

1

主机通常禁用 shell 命令。在您的本地,您可以编辑php.ini并添加此行以禁用您想要的功能:

disable_functions =exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source

但是在您的直播网站上,您需要联系您的主机提供商以启用默认禁用的功能。

于 2020-10-07T20:13:04.090 回答
0

不久前我有一个类似的问题。这基本上是所有评论员所说的。Web 服务器的用户/权限受到限制,还有正在使用的 shell 环境和/或 PATH 环境变量。

于 2013-08-27T19:09:13.360 回答
0

您可以添加第二个参数来帮助调试,$output将显示cp命令正在执行的操作,无论是否出错。

我还建议在文件周围加上引号,以防有空格进入。

$src = "/mnt/...";
$dest = "/var/www/...";
exec("cp '$src' '$dest'", $output, $retrun_var);

var_dump($output, $retrun_var);
于 2013-08-27T18:37:35.233 回答