文件没有被上传到服务器使用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
您正在使用~/upload/
,并将波形和斜杠用作路径。
您应该使用upload/
作为相对路径来删除所有的波浪线和斜线。
或者,如sonic720
在评论中所述:/var/www/upload
这将因服务器而异,因此您的可能是类似这是另一种选择。
如果从服务器的根目录执行脚本,则使用upload/
。
如果从一个子文件夹下执行的,则可能需要调整它,例如:../upload/
同时检查文件夹权限。 0755
或0777
,但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);
我第二这一点。 “〜”字符反映了Web用户的主目录,应该在PHP脚本中避免。通常情况下,Web用户的主目录应该是/ var/www /或类似的地方,你不能写文件。 使用'__DIR__'并为您的应用程序设置BASE_PATH。查找一些wordpress代码,你可以很容易地搜索ABSPATH,这是同样的事情。 – Ligemer 2014-10-02 00:01:28
@ sonic720这是一个很好的观点。 +1 – 2014-10-02 00:02:31
@ Fred-ii-感谢您的回复,所以我将路径更改为'../ upload /',并在其上运行了'chmod 777'。但我现在得到一个'未能打开流:权限被拒绝在../ test.php'中,并且我在该文件夹上运行了'chmod 777'以及... – Ray 2014-10-02 00:34:17
检查move_uploaded_file的'返回值()' – 2014-10-01 23:53:46