我正在将我的网站从共享主机转移到 VPS。在我的 VPS 上进行测试时,我注意到突然之间我无法再通过网络表单上传文件了。
错误:
Warning: move_uploaded_file(/uploads/logoklein.jpg): failed to open stream: No such file or directory in /var/www/vhosts/denkproducties.nl/httpdocs/denkproducties/upload.php on line 26 Warning: move_uploaded_file(): Unable to move '/tmp/php01nhmx' to '/uploads/logoklein.jpg' in /var/www/vhosts/denkproducties.nl/httpdocs/denkproducties/upload.php on line 26
SO上有很多关于这个的问题,它们几乎都涉及设置权限。我将 TMP 和上传目录都更改为 0777(不寒而栗),但无济于事。我知道 0777 不是明智之举,但我想确保这不是这些文件夹的权限问题。
由于唯一改变的是 VPS,我认为问题一定出在服务器上。我想也许网络服务器是以“无人”的身份运行的,所以它无法访问 tmp 文件夹。我跑了:
ps aux | grpe httpd
这向我展示了:
root 27371 0.0 2.3 340860 24726 ? SNs 12:57 0:00 /usr/sbin/httpd
apache 27372 0.0 0.9 240994 9820 ? SN 12:57 0:00 /usr/sbin/httpd
apache 27373 0.0 1.6 341671 16700 ? SN 12:57 0:00 /usr/sbin/httpd
apache 27374 0.0 1.6 341671 16700 ? SN 12:57 0:00 /usr/sbin/httpd
apache 27375 0.0 1.6 341671 16700 ? SN 12:57 0:00 /usr/sbin/httpd
apache 27376 0.0 1.6 341671 16700 ? SN 12:57 0:00 /usr/sbin/httpd
apache 27377 0.0 1.6 341671 16700 ? SN 12:57 0:00 /usr/sbin/httpd
apache 27378 0.0 1.6 341671 16700 ? SN 12:57 0:00 /usr/sbin/httpd
root 27817 0.0 0.0 103244 824 tty1 S+ 13:40 0:00 grep httpd
顺便说一句,我的服务器正在运行 fCGI。
为了完整起见,我制作了一个带有 Web 表单的小型上传脚本:
$allowed_filetypes = array('.jpg','.gif','.bmp','.png'); // 这些将是通过验证的文件类型。 $max_filesize = 1024000; // 以 BYTES 为单位的最大文件大小(当前为 1MB)。 $upload_path = '/上传/'; // 文件将上传到的位置(当前为“上传”目录)。 $filename = $_FILES['userfile']['name']; // 获取文件名(包括文件扩展名)。 $ext = substr($filename, strpos($filename,'.'), strlen($filename)-1); // 从文件名中获取扩展名。 // 检查文件类型是否允许,如果不允许则 DIE 并通知用户。 if(!in_array($ext,$allowed_filetypes)) die('您尝试上传的文件不被允许。'); // 现在检查文件大小,如果文件太大,则 DIE 并通知用户。 if(文件大小($_FILES['userfile']['tmp_name']) > $max_filesize) die('您尝试上传的文件太大。'); // 检查是否可以上传到指定路径,如果不行就DIE通知用户。 //if(!is_writable($upload_path)) // die('你不能上传到'.$upload_path .'指定目录,请CHMOD到777。'); // 将文件上传到您指定的路径。 if(move_uploaded_file($_FILES['userfile']['tmp_name'],$upload_path . $filename)){ echo '您的文件上传成功,请在此处查看文件'; // 有效。 } 别的 { echo '上传文件时出错。请再试一次。'; //它失败了:(。 }
我在这里想念什么?