我正在尝试复制和取消链接 Apache 服务器上的文件。我大约 1 小时前尝试过这样做。我无法想象问题是什么。
这是我的消息来源:
if (copy("users_ftp/".$user_ftp.'/'.$_REQUEST['name'],"uploaded/".$name_file)) {
chmod("users_ftp/".$user_ftp, 0777);
chmod("users_ftp/".$user_ftp.'/'.$_REQUEST['name'], 0777);
if(unlink("users_ftp/".$user_ftp.'/'.$_REQUEST['name']))
{
// success, do stuff
} else {
print('nem törölt fájl');
}
} else {
print('sikertelen copy');
}
我尝试像这样使用它:
copy("/var/www/virtual/tigyisolutions.hu/boxy/htdocs/users_ftp/".$user_ftp.'/'.$_REQUEST['name'],"/uploaded/".$name_file)
但错误是一样的。
这是错误:
Warning: copy(/uploaded/ftp_dir_collect.php): failed to open stream: No such file or directory in /var/www/virtual/tigyisolutions.hu/boxy/htdocs/upload.php on line 261
sikertelen copy
Warning: md5_file(uploaded/1782848509512876a6863a2-08-58-30.php): failed to open stream: No such file or directory in /var/www/virtual/tigyisolutions.hu/boxy/htdocs/upload.php on line 270
Warning: sha1_file(uploaded/1782848509512876a6863a2-08-58-30.php): failed to open stream: No such file or directory in /var/www/virtual/tigyisolutions.hu/boxy/htdocs/upload.php on line 271
它说没有流。但我验证了文件存在于我的 FTP 上。我使用了chmod 777
,但它不起作用。还有什么问题?
答案1
最有可能是权限问题或文件名无效。您提供的路径代码与日志中的路径不太匹配。我建议您验证您是否访问了正确的目录和文件。
您没有共享相关目录的权限。仅因为它可以通过 FTP 访问并不意味着 Web 服务器也可以访问它。namei
如果某个目录可供用户访问,则使用如下方法:
sudo -u <username> namei -m /path/to/target
你的 Web 服务器(Apache?)以哪个<username>
用户身份运行?
我建议你像这样写代码(https://stackoverflow.com/a/6070449):
if (file_exists($fileToCopy)) {
if (is_readable($fileToCopy)) {
if (is_writeable(dirname($target))) {
copy($fileToCopy, $target);
} else {
die('You dont have permission to write into '.dirname($target));
}
} else {
die('You dont have permission to read '.$fileToCopy);
}
} else {
die('File '.$fileToCopy.' does not exist');
}
这将告诉您权限关闭的位置。您没有分享您在哪个(基于 Unix)操作系统上运行此程序,诸如此类的事情SELinux
也可能是造成这种情况的原因。通过查看 的auditd
日志文件进行检查。
关于你的代码中明显的WTF:
绝不,绝不在缓慢而痛苦的死亡威胁下,在代码中使用未检查的用户输入。发布的代码可能会被操纵,将系统文件写入可能由 Web 服务器提供服务的目录中。这会引发各种恶作剧。