我有一个问题,我试图复制在我使用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
,结果相同。
答案 0 :(得分:0)
您可以添加第二个参数来帮助调试,$output
将显示cp
命令正在执行的操作,是否是错误。
我还建议在文件周围放置引号,以防有空格的东西进入。
$src = "/mnt/...";
$dest = "/var/www/...";
exec("cp '$src' '$dest'", $output, $retrun_var);
var_dump($output, $retrun_var);
答案 1 :(得分:0)
我前一段时间有similar issue。这基本上就是所有评论员所说的。 Web服务器的用户/权限受到限制,但也包括正在使用的shell环境和/或PATH环境变量。
答案 2 :(得分:0)
主机通常禁用shell命令。
在您的本地计算机上,您可以编辑library(tidyverse)
library(treeio)
library(ggtree)
# create a tree and add a numeric annotation called 'range'
tree = rtree(3) %>% as.treedata %>% as_tibble %>%
mutate(number = 1:5,
range = lapply(number, function(x) c(-0.1, 0.1) + x)) %>%
as.treedata
# plot the tree and add red bars with geom_bar()
ggtree(tree) +
geom_range("number", range='range', color="red", size = 3, alpha = 0.3) +
theme_tree2()
并添加以下行以禁用所需的功能:
php.ini
但是在您的实时网站上,您需要联系主机提供商以启用默认情况下禁用的功能。