0

我正在将我的网站从共享主机转移到 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 '上传文件时出错。请再试一次。'; //它失败了:(。
 }

我在这里想念什么?

4

1 回答 1

1

评论中的 Louis Huppenbauer 对我的类似问题有正确的答案。

使用相对路径不起作用,它需要完整路径。尝试将 /uploads/ 更改为主机的完整目录,例如:D:\InetPub\Vhosts\website.com\website2.com\uploads\

于 2014-02-27T02:40:59.500 回答