文件没有被上传到服务器使用PHP脚本

问题描述:

因此,我想了解如何使用HTML和PHP将文件上传到Web服务器的简单教程/示例。有没有错误,一切似乎工作正常,但该文件不保存在Web服务器上...文件没有被上传到服务器使用PHP脚本

我正在使用Amazon EC2实例。 编辑: 我现在已经在我的回声输出许可警告/错误,如下图所示,即使是在运行目录CHMOD 777后

的index.html

<form enctype="multipart/form-data" action="test.php" method="POST"> 
<input type="hidden" name="MAX_FILE_SIZE" value="10000000" /> 
Choose a file to upload: <input name="uploadedfile" type="file" /><br /> 
<input type="submit" value="Upload File" /> 
</form> 

test.php的

<?php 
$allowedExts = array("gif", "jpeg", "jpg", "png","tiff"); 
$temp = explode(".", $_FILES["uploadedfile"]["name"]); 
$extension = end($temp); 
echo "Upload attempt...: " . $_FILES["uploadedfile"]["name"] . "<br>"; 
if ((($_FILES["uploadedfile"]["type"] == "image/gif") 
    || ($_FILES["uploadedfile"]["type"] == "image/jpeg") 
    || ($_FILES["uploadedfile"]["type"] == "image/tiff") 
    || ($_FILES["uploadedfile"]["type"] == "image/jpg") 
    || ($_FILES["uploadedfile"]["type"] == "image/pjpeg") 
    || ($_FILES["uploadedfile"]["type"] == "image/x-png") 
    || ($_FILES["uploadedfile"]["type"] == "image/png")) 
    && ($_FILES["uploadedfile"]["size"] < 20000000) 
    && in_array($extension, $allowedExts)) { 

    if ($_FILES["uploadedfile"]["error"] > 0) { 
    echo "Return Code: " . $_FILES["uploadedfile"]["error"] . "<br>"; 
    } else { 
    echo "Upload: " . $_FILES["uploadedfile"]["name"] . "<br>"; 
    echo "Type: " . $_FILES["uploadedfile"]["type"] . "<br>"; 
    echo "Size: " . ($_FILES["uploadedfile"]["size"]/1024) . " kB<br>"; 
    echo "Temp file: " . $_FILES["uploadedfile"]["tmp_name"] . "<br>"; 
    if (file_exists("~/upload/" . $_FILES["uploadedfile"]["name"])) { 
     echo $_FILES["uploadedfile"]["name"] . " already exists. "; 
    } else { 
     move_uploaded_file($_FILES["uploadedfile"]["tmp_name"], 
         "../upload/" . $_FILES["uploadedfile"]["name"]); 
     echo "Stored in: " . "../upload/" . $_FILES["uploadedfile"]["name"]; 
    } 
    } 
} else { 
    echo "Invalid file"; 
} 
?> 

echo output

Upload attempt...: storeflyer.jpg 
Upload: storeflyer.jpg 
Type: image/jpeg 
Size: 35.1708984375 kB 
Temp file: /tmp/phpqq6J4C 
Warning: move_uploaded_file(../upload/storeflyer.jpg): failed to open stream: Permission denied in ../test.php on line 29 Warning: move_uploaded_file(): Unable to move '/tmp/phpqq6J4C' to '../upload/storeflyer.jpg' in ../test.php on line 29 Stored in: ../upload/storeflyer.jpg 
+0

检查move_uploaded_file的'返回值()' – 2014-10-01 23:53:46

您正在使用~/upload/,并将波形和斜杠用作路径。

您应该使用upload/作为相对路径来删除所有的波浪线和斜线。

或者,如sonic720在评论中所述:/var/www/upload这将因服务器而异,因此您的可能是类似​​这是另一种选择。

如果从服务器的根目录执行脚本,则使用upload/

如果从一个子文件夹下执行的,则可能需要调整它,例如:../upload/

同时检查文件夹权限。 07550777,但0755更安全使用。

  • 关于:__DIR__ & BASE_PATH

咨询:http://php.net/manual/en/function.dirname.php


编辑:

我发现别的东西echo "Return Code: " . $_FILES["file"]["error"] . "<br>";应该读作echo "Return Code: " . $_FILES["uploadedfile"]["error"] . "<br>";


添加error reporting到您的文件(S),这将在生产测试帮助的顶部。

error_reporting(E_ALL); 
ini_set('display_errors', 1); 

+1

我第二这一点。 “〜”字符反映了Web用户的主目录,应该在PHP脚本中避免。通常情况下,Web用户的主目录应该是/ var/www /或类似的地方,你不能写文件。 使用'__DIR__'并为您的应用程序设置BASE_PATH。查找一些wordpress代码,你可以很容易地搜索ABSPATH,这是同样的事情。 – Ligemer 2014-10-02 00:01:28

+1

@ sonic720这是一个很好的观点。 +1 – 2014-10-02 00:02:31

+0

@ Fred-ii-感谢您的回复,所以我将路径更改为'../ upload /',并在其上运行了'chmod 777'。但我现在得到一个'未能打开流:权限被拒绝在../ test.php'中,并且我在该文件夹上运行了'chmod 777'以及... – Ray 2014-10-02 00:34:17