文件上传(本地可用,但远程服务器不行)

3
我正在尝试通过HTML表单将一个msword/doc文件上传到Apache服务器文件夹。在本地测试(通过MAMP测试)时,它可以正常工作,但是当我将其上传到远程服务器(例如GoDaddy)时,它就无法工作了。显示“文件上传出现问题”。
以下是处理文件上传的代码片段。我无法弄清楚我的条件语句有什么问题。
      // Move the file to the target upload folder
      $target = FILE_UPLOADPATH . basename($new_file);
      if (move_uploaded_file($_FILES['new_file']['tmp_name'], $target)) 
      {
        // The new file move was successful, now make sure any old file is deleted
        if (!empty($old_file) && ($old_file != $new_file)) 
        {
          @unlink(FILE_UPLOADPATH . $old_file);
        }
      }
      else 
      {
        // The new file move failed, so delete the temporary file and set the error flag
        @unlink($_FILES['new_file']['tmp_name']);
        echo 'There was a problem with the file upload.' . PHP_EOL;
      }

你能分享完整的 $_FILES 数组吗?因为 error 参数中的值可能有助于解决这个问题。 - fullybaked
嗯,错误代码0意味着成功。 - fullybaked
现在先注释掉您的@unlink调用,以确保仅测试您的上传,并发布结果。新上传的文件是否仍然不出现在目录中? - fullybaked
@kthaker var_dump(is_writable($target)); 给你什么结果? - popthestack
问题出在权限上。我没有意识到我测试的服务器已经设置了ACLs。所以我的chmod权限更改没有生效。感谢您的建议 :) - kthaker
显示剩余2条评论
4个回答

0
如果$_FILES['new_file']['error'] == 0,那么上传不是问题,但调用move_uploaded_file()时出现了问题。你可能在尝试移动文件的目录上有错误的权限设置。

0

您确定要上传到的文件夹有写入权限吗?如果没有,请使用chmod 0777并进行测试。


是的,它具有chmod 775权限。 - kthaker

0

我仔细检查了权限,它们是775。是的,我希望用户直接访问该文件。我认为问题可能出在“move_uploaded_file”行上。数据库将文件名存储在表中,并在上传后在表单上显示它。但是当我检查上传文件夹时,文件不存在。 - kthaker

0

对我来说,我在本地测试时使用了一个小于php的upload_max_filesize的文件,而在远程测试时使用了一个大于upload_max_filesize的文件。有关更多信息,请参见https://dev59.com/v10a5IYBdhLWcg3waYCM#30359278


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接