我已经完成了你的标准检查(是那里的目录,设置了足够的权限),我很确定我已经涵盖了你的标准愚蠢的人类技巧。这是失败的代码:
move_uploaded_file($_FILES['image1']['tmp_name'], "/public_html/flashsale/assets/img/products/T".$_FILES['image1']['name']);
目录在那里 - 我从 FileZilla 复制了路径。我甚至在FileZilla和 HostGator 控制面板的文件管理器中将权限设置为 777 。此代码生成两个警告:
消息: move_uploaded_file(/public_html/flashsale/assets/img/products/Tsirloin.jpg) [function.move-uploaded-file]:无法打开流:没有这样的文件或 目录
消息:move_uploaded_file()[function.move-uploaded-file]:无法 将'/ tmp / phpI5GZ3S'移动到 '/public_html/flashsale/assets/img/products/Tsirloin.jpg'
按此顺序。因此,文件正在上传,目录存在并设置为777,还有什么我可以丢失?
答案 0 :(得分:17)
您无需将完整目录放入该文件。尝试从您的链接中删除/public_html/flashsale/
,看看是否有效。
此外,该文件不需要具有777权限,我自己将文件上传到具有755权限的文件夹。
另外,您可以在目标目录中使用getcwd();
。该函数将为您提供移动文件所需的目录。 source
答案 1 :(得分:7)
问题
$dirpath = dirname(getcwd())
这是我最初用来获取my / public_html / upload文件夹的目录路径。 $ dirpath将包含
/public_html/upload
解决方案(在服务器上)
$dirpath = realpath(dirname(getcwd()))
由于我在共享托管环境中,使move_uploaded_file正常工作的正确方法是使用此作为目标: realpath(dirname(getcwd()))返回类似于:
的内容/home/cpanelusername/public_html/upload
答案 2 :(得分:2)
确保您正在穿越的路径。不需要public_html
$image=basename($_FILES['file']['name']);
$image=str_replace(' ','|',$image);
$tmppath="images/".$image;
if(move_uploaded_file($_FILES['file']['tmp_name'],$tmppath))
{
echo "success";
}
else
{
echo "fail";
}
希望这有帮助
答案 3 :(得分:1)
对于使用XAMPP的Ubuntu 14.04,我也遇到上传问题但在使用sudo chmod -R 777 destination
修复后,它运行良好。
这是我做的:
在我的Ubuntu 14.04 XAMPP中上传的临时文件夹是/ opt / lampp / temp /。如果我希望我的上传文件为/opt/lampp/temp/testupload
作为目标文件夹,那么我需要下面的配置。
转到临时文件夹
cd /opt/lampp/temp/
创建' testupload' / opt / lampp / temp /
下的文件夹sudo mkdir testupload
更改权限777
sudo chmod -R 777 /opt/lampp/temp/testupload/
PHP代码
move_uploaded_file($_FILES["file"]["tmp_name"], "/opt/lampp/temp/testupload/" . $_FILES["file"]["name"])
答案 4 :(得分:0)
Windows和ISS的解决方案:
IUSR帐户需要目标目录中的权限。不是ISS_IUSR帐户,只是IUSR帐户。