好吧,我的图片上传脚本/应用程序出了问题。我一次又一次地尝试调试,但仍然无法找出问题所在。代码似乎很好,但由于某种原因,文件看起来不会保存在临时目录中,以便它可以移动到我服务器上的上传目录。我已经确定我正在尝试上传它的目录(上传),包括临时目录,具有读/写/执行权限集,并且上传在php.ini文件夹中设置为on。我有一种感觉,文件永远不会保存到临时文件夹,但我不知道如何检查是否是这种情况,因为我知道文件在脚本完成执行后被删除。我希望你们能帮助我,因为我不知道该怎么做。我的脚本有代码。
此外,这是我的问题所在。
if (is_uploaded_file($filetempname)) {
$final = "../public_html/uploads/" . $filename;
$result = move_uploaded_file($filetempname, $final);
if($result)
{
echo 'success';
echo "<br>Stored in: " . "public_html/uploads/" . $filename;
}
else
{
echo 'Image was not uploaded.';
}
$ result = move_uploaded_file($ filetempname,$ final)保持返回false,没有出现错误的迹象。我知道如果文件类型不正确,它将返回false并且不会复制任何内容,如果由于某种原因无法移动文件,它将返回false,并且它将引发一条警告消息。但是,我根本没有提出任何消息。我所知道的是它返回false并且它没有做它应该做的事情。
<?php
error_reporting(E_ALL);
print_r($_FILES);
$filetype = $_FILES["file"]["type"];
$filename = $_FILES["file"]["name"];
$filetempname = $_FILES["file"]["tmp_name"];
$filesize = $_FILES["file"]["size"];
$error = $_FILES["file"]["error"];
$allowedExts = array("gif", "jpeg", "jpg", "png");
$extension = end(explode(".", $filename));
if ((($filetype == "image/gif")
|| ($filetype == "image/jpeg")
|| ($filetype == "image/jpg")
|| ($filetype == "image/pjepg")
|| ($filetype == "image/x-png")
|| ($filetype == "image/png"))
&& ($filesize < 1000000)
&& in_array($extension, $allowedExts)) {
if ( $error > 0) {
echo "Error: " . $error . "<br>";
}
else {
echo "Upload: " . $filename . "<br>";
echo "Type: " . $filetype . "<br>";
echo "Size: " . ($filesize / 1024) . " KB<br>";
echo "Stored in: " . $filetempname . "<br>";
if (file_exists("../public_html/uploads/" . $filename)) {
echo $filename . " already exists. ";
}
else {
if (is_uploaded_file($filetempname)) {
$final = "../public_html/uploads/" . $filename;
$result = move_uploaded_file($filetempname, $final);
if($result)
{
echo 'success';
echo "<br>Stored in: " . "public_html/uploads/" . $filename;
}
else
{
echo 'Image was not uploaded.';
}
}
}
}
}
else {
echo "Invalid file";
}
?>
以下是表单的代码。
<form enctype="multipart/form-data" method="post" action="scripts/snap.php">
<!--<p>
<input id="plat" class="plat" name="plat" type="hidden" value="" />
<input id="plon" class="plon" name="plon" type="hidden" value="" />
</p>-->
<div class="row">
<label for="file">Select an image to Upload</label><br />
<input type="file" name="file" id="file" /><!--onchange="fileSelected();"-->
</div>
<div id="filename"></div>
<div id="fileSize"></div>
<div id="fileType"></div>
<div class="row">
<input type="submit" name="submit" value="Submit" />
<!--<input type="button" onclick="uploadFile()" value="Upload" />-->
</div>
<div id="progressNumber"></div>
</form>
答案 0 :(得分:1)
忘记所有文件类型检查以及其他任何内容。编写一个只有一个责任的单独脚本:将上传的文件移动到您要永久存储它的位置。专注于那个一个小部分并让它发挥作用。
一旦你有文件移动代码工作,将它包装在一个函数中,然后,只有当该部分工作时,将文件移动代码集成到你拥有的其余代码中。
这里的总体教训是,当您遇到问题时,最好以模块化的方式编写代码,以便真正快速,轻松地确定问题的确切位置。
另外,考虑使用一个框架或库来处理这个文件,为你上传工作,因为你在这里重新发明轮子。
答案 1 :(得分:0)
首先,检查您是否正确提交。你在表单上包含了enctype吗?
<form method='POST' enctype='multipart/form-data' action='upload.php'>
接下来,您的代码print_r($_FILES);
是否返回任何值或是否为null?
如果是,请尝试检查上传文件夹中您知道的任何现有文件并使用is_file()
,因为您可能指定的路径不正确。
编辑:表单中没有问题