自最近以来,我正在使用PHP,但是在上传图片时遇到了问题。
我的代码在本地计算机上运行良好;但是,在我的VM上上传文件时,该文件不会上传到tmp文件夹。
我试图查看使用 print_r($ _ FILES)从 $ _ FILES 填充的数组,这就是我在数组中得到的内容:
array ( [image] => array ( [name] => avatar-1.jpg [type] => image/jpeg [tmp_name] => /tmp/phpfkhvrw [error] => 0 [size] => 1029 ) )
我已经审查了 php.ini 文件,一切似乎都井然有序。我还检查了其他几篇类似问题的文章,但没有建议起作用。
我认为这与许可有关,因为在 envvars 文件中,配置如下:
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
但是,服务器上的所有文件都具有root用户和组权限。
我真的希望有人可以分享一些知识,因为我真的不知道下一步该怎么做。
答案 0 :(得分:2)
您在此处向我们显示的内容证明文件上传成功。您需要更加详细地说明失败的原因。
正如Zeusarm所暗示的那样,HTTP请求完成后,已创建的文件(/ tmp / phpfkhvrw)不会保留-由PHP删除。如果要在请求后保留此失败,则需要致电move_uploaded_file()
服务器上的所有文件都具有root用户和组权限
您可能需要处理权限模型。
答案 1 :(得分:1)
事实证明该文件是在tmp目录中上载的,但由于html和tmp文件夹的所有者和组是 root 而没有被移动。
更改了两个文件夹的所有者和组,现在一切正常。
sudo chown www-data:www-data FolderName -R
或者,可以在所有文件夹上使用权限777,但不建议这样做。
答案 2 :(得分:0)
也许为您的功能添加chmod。例子。
// move_uploaded_file has is_uploaded_file() built-in
if(move_uploaded_file($tmp_file, $file_path)) {
echo "File moved to: {$file_path}<br />";
// remove execute file permissions from the file
if(chmod($file_path, 0644)) {
echo "Execute permissions removed from file.<br />";
$file_permissions = file_permissions($file_path);
echo "File permissions are now '{$file_permissions}'.<br />";
} else {
echo "Error: Execute permissions could not be removed.<br />";
}
}