我正在使用运行 Apache 的 Ubuntu 16.04(Xenial) 的 Nano Pi Neo。我正在尝试进行固件更新,其中我通过 Web 界面上传了一个 zip 文件。php 脚本解压缩该文件,该文件更新 Apache 的根目录 (/var/www),并将文件夹“scripts”复制到用户 pi 的主目录 (/home/pi)。我已将“/home/pi/scripts”的所有权授予 www-data,但它仍然出现以下错误。
cp: cannot stat '/home/pi/scripts/test document.txt': Permission denied .
我的代码示例在这里
if(move_uploaded_file($_FILES["fileToUpload"]["tmp_name"],"/var/www/".$target_dir.$target_file)){
//echo "The file ". basename($_FILES["fileToUpload"]["name"])." has been uploaded.";
$f=fopen('PASSWORD_DIR/password.txt','r');
$line=fgets($f);
fclose($f);
$line=str_replace(array("\n","\r"),'',$line);
exec("unzip -P ".$line." -o /var/www/uploads/ZIPPED_FILE.zip -d /var/www/uploads/",$output,$result);
if($result==0){
exec("cp -TRv /var/www/uploads/html/ /var/www/");
exec("cp -TRv /var/www/uploads/scripts/ /home/pi/scripts");//THIS CAUSES AN ISSUE
exec("cd /home/pi/scripts && make");
exec("rm --interactive=never /var/www/uploads/ZIPPED_FILE.zip");
exec("rm --interactive=never -r /var/www/uploads/html");
exec("rm --interactive=never -r /var/www/uploads/scripts");
echo("<script>alert('software has been installed')</script>");
//echo("<script>window.history.go(-2)</script>");
//$out=shell_exec("whoami");
//echo $out;
}
答案1
为了回答我自己的问题,解决方案是使用以下方式授予目录脚本的写权限
chmod g+rx /home/pi/scripts
。如果这不起作用,您可以使用创建指向该文件夹的快捷方式链接
ln -s
或者Alias
在您的网络服务器的配置文件中创建并保存快捷方式。