当前位置: 首页 > 知识库问答 >
问题:

移动\u上载的\u文件失败,但权限似乎正确

锺离宸
2023-03-14

我正在将我的网站从共享主机移动到VPS。当我在VPS上测试时,我注意到突然之间我再也无法通过网络表单上传文件了。

错误:警告:move_uploaded_file(/上传/logoklein.jpg):未能打开流:在第26行 /var/www/vhosts/denkproducties.nl/httpdocs/denkproducties/upload.php中没有这样的文件或目录警告:move_uploaded_file():无法将/tmp/php01nhmx移动到/上传/<##################################################################################################################################################

关于这一点有很多问题,它们几乎都涉及到设置正确的权限。我将TMP和uploads目录都添加到0777(抖动),但没有任何效果。我知道0777不是一件明智的事情,但我想确保这不是这些文件夹的权限问题。

由于唯一改变的是VPS,我想问题一定出在服务器上。我想可能是web服务器以“无人”身份运行,所以它无法访问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'); // These will be the types of file that will pass the validation.
   $max_filesize = 1024000; // Maximum filesize in BYTES (currently 1MB).
   $upload_path = '/uploads/'; // The place the files will be uploaded to (currently a 'uploads' directory).


   $filename = $_FILES['userfile']['name']; // Get the name of the file (including file extension).
   $ext = substr($filename, strpos($filename,'.'), strlen($filename)-1); // Get the extension from the filename.

   // Check if the filetype is allowed, if not DIE and inform the user.
   if(!in_array($ext,$allowed_filetypes))
      die('The file you attempted to upload is not allowed.');

   // Now check the filesize, if it is too large then DIE and inform the user.
   if(filesize($_FILES['userfile']['tmp_name']) > $max_filesize)
      die('The file you attempted to upload is too large.');

   // Check if we can upload to the specified path, if not DIE and inform the user.
   //if(!is_writable($upload_path))
   //   die('You cannot upload to '. $upload_path .'the specified directory, please CHMOD it to 777.');

   // Upload the file to your specified path.
   if(move_uploaded_file($_FILES['userfile']['tmp_name'],$upload_path . $filename)){
         echo 'Your file upload was successful, view the file here'; // It worked.
     } else {
         echo 'There was an error during the file upload.  Please try again.'; // It failed :(.
 }

我错过了什么?


共有1个答案

高正初
2023-03-14

Louis Huppenbauer在评论中对我的类似问题给出了正确的答案。

使用相对路径无效,它需要完整路径。尝试更改/上载/到主机的完整目录,例如:D:\InetPub\Vhosts\website。com\website2。com\上传\

 类似资料:
  • 我目前正在尝试使用Python的Django框架创建一个Web应用程序,同时通过MySQL创建数据库。我正在运行Windows 10,Django 2,Python3.6和MySQL 8。我已经尝试了许多修复方法,但似乎没有任何效果。当我尝试运行测试用例或在本地运行服务器时,我收到同样的错误:django.db.utils.操作错误:(2059,无法加载身份验证插件caching_sha2_pas

  • PHP不遵守上载\u最大\u文件大小 详细信息:使用 和. conf中搜索grep-inrupload_max_filesize,只返回12M值。搜索 /etc/httpd/conf/ /etc/httpd/conf.d/显然是虚拟主机的根。在grep返回0结果的虚拟主机中没有特殊设置。

  • 所以我使用了来制造一个不和谐的。我正在使用查看成员的是否更改。 如果某个成员位于特定的,我希望客户端使用该成员的用户名作为频道名称创建一个新的语音频道,并将该成员移动到该新的语音频道内。这是我的密码: 这不工作。有人能帮帮我吗?

  • 充当缓存代理的NGINX在通过HTTPS从CloudFront服务器获取内容时遇到问题: 这是NGINX错误日志的摘录: 2014/08/14 16:08:26[错误] 27534#0: *11560993SSL_do_handshake()失败(SSL:错误: 14077410: SSL例程:SSL23_GET_SERVER_HELLO: sslv3警报握手失败)而SSL握手到上游,客户端:82

  • 我写了一个应用程序。一切都很好,但后来我想在家里的电脑上处理它。问题是,当我想在模拟器中启动应用程序时,我收到错误消息“INSTALL\u FAILED\u DUPLICATE\u PERMISSION”。在工作中,我对模拟器使用相同的设置。当我尝试在两台不同的电脑上使用它时,其他应用程序没有问题。 对不起,如果我没有给你足够的信息,但我是新的编程。 也许有人有过类似的经历,可以帮助我。 提前感谢

  • 我犯了个奇怪的错误 尝试在my redmi 4 OEM解锁已启用 尝试的解决方案 MIUI优化已关闭 USB调试已打开 验证USB应用程序是否已打开 注意:通过USB打开安装时,会弹出显示设备暂时受到限制