表单的php文件是:
<?php
$allowedExts = array("jpg", "jpeg", "gif", "png");
$extension = end(explode(".", $_FILES["file"]["name"]));
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 60000)
&& in_array($extension, $allowedExts))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
if (file_exists("http://example.me/imgs/examples" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],
"http://example.me/imgs/examples" . $_FILES["file"]["name"]);
echo "Stored in: " . "http://example.me/imgs/examples" . $_FILES["file"]["name"];
}
}
}
else
{
echo "Invalid file";
}
?>
这很直接,对吧?表单的html是:
<form action="img_upload.php" method="post" enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" />
<input type="submit" name="submit" value="Submit"/>
</form>
也够简单;正确?提交图像后,我被重定向到img_upload.php文件,显示以下文字:
Upload: example.jpg
Type: image/jpeg
Size: 39.1943359375 Kb
Temp file: C:\WINDOWS\Temp\php66.tmp
Stored in: http://example.me/imgs/examplesexample.jpg
当我尝试做这样的简单任务而没有错误但也没有结果时,我感到很沮丧。我已经尝试在php脚本中添加“/”之类的imgs / examples /,它提交的唯一区别是以下行:
Stored in: http://example.me/imgs/examples/example.jpg
关于我在这里缺少什么的任何想法。我有许多其他PHP脚本/ mysql表,其中图像正在使用和上传,但对于这个简单的任务没有。我在localhost上的apache服务器上使用php 5。感谢所有人提前帮助。
答案 0 :(得分:3)
您不太可能将文件移至http://example.me/imgs/examples/
。这不是本地系统的路径。
您需要将其移至C:/path/to/web/root/filename.jpg
之类的路径。
这与http协议可能有效的其他地方不同,因为您正在编写文件,而不是正在阅读文件。
您的PHP脚本无法确切知道您的http://example.me/imgs/examples/
目录与其自身位于同一服务器上;并且它无法弄清楚,通过该URL,您实际上是指c:/apache/htdocs/imgs/examples/
。 (想象一下,如果您将Apache设置为将上述目录映射到完全不同的地方 - 或者您的文件系统设置为实际将该目录链接到其他地方!PHP无法弄清楚它,它太复杂了。)虽然它可能是在某些情况下可能会写入HTTP协议URL,但这并不是很清楚这意味着什么,编写PHP的人并没有实现这一点。如果它被写入,它可能采取将文件作为POST上传到该URL的形式,这将要求您编写代码以接受该文件,然后将其移动到本地系统上的某个位置...这正是无论如何你要做什么。
答案 1 :(得分:2)
您正在尝试使用无效的HTTP路径(http://example.me/imgs/examples
)移动上传的文件。
指定服务器路径,如/imgs/examples/
[使用正确的路径,我只是假设]
move_uploaded_file($_FILES["file"]["tmp_name"],
"/imgs/examples/" . $_FILES["file"]["name"]);
此外,您可能需要将HTTP路径下面的行更改为服务器路径
if (file_exists("http://example.me/imgs/examples" . $_FILES["file"]["name"]))
答案 2 :(得分:2)
第一个问题是您将网址传递给move_uploaded_file()
。这需要是本地文件系统路径。与file_exists()
相同,它不能使用URL。例如:
// if img directory is on the same level as the PHP script...
move_uploaded_file($_FILES["file"]["tmp_name"], "imgs/examples/" . $_FILES["file"]["name"]);
第二个问题是你没有检查返回值,你只是假设移动有效。 move_uploaded_file()
成功时返回布尔值true
,失败时返回false
。
尝试:
if(move_uploaded_file($_FILES["file"]["tmp_name"], "imgs/examples/" . $_FILES["file"]["name"]))
{
// worked
}
else
{
// didn't work
}
答案 3 :(得分:1)
您必须使用目录位置系统进行上传。 firstyl;不要使用http://! secondary:例如,它可以位于某个目录中; 我们想要上传 在.php文件路径上传/ dir
move_uploaded_file($_FILES["file"]["tmp_name"],"uploads/" . $_FILES["file"]["name"]);
move_uploaded_file($_FILES["file"]["tmp_name"],"../uploads/" . $_FILES["file"]["name"]);