【问题标题】:Uploading a picture - error上传图片 - 错误
【发布时间】:2015-07-24 20:05:46
【问题描述】:

我正在用 HTML 制作一个页面,该页面会将图像传递给 PHP 脚本,然后 PHP 脚本应该将图片上传到服务器上的目录。

这是我的 HTML 表单:

<form role="form" action="upload.php" method="post" enctype="multipart/form-data">
<div class="form-group">
  <div class="row" style="margin-top: 125px;">
    <div class="col-sm-4" style="border-style: solid; border-width: medium; border-color: black; height: 206px; width: 156px; ">
      <img id="blah" src="#" alt="your image" style="margin-left:-15px" />
    </div>
    <div class="col-sm-7">
      <h3 class="text-center" style="margin-top: 0px">Choose your picture:</h3>
      <input type='file' onchange="readURL(this);" class="hidden" id="fileToUpload" name="fileToUpload"/>
      <label for="fileToUpload" class="btn btn-info col-sm-12" style="margin-top: 60px">Browse</label>
      <a class="btn btn-warning col-sm-5" style="margin-top: 15px" href="#">Skip</a>
      <div class="col-sm-2"></div>
      <button class="btn btn-success col-sm-5" style="margin-top: 15px" type="submit">Upload</button>
    </div>
  </div>
</div>
</form>

这就是它的样子: http://oi60.tinypic.com/15xspjn.jpg

这是来自 upload.php 的 PHP 代码,我从 w3schools 获得的:

 <?php
$target_dir = "../uploads/avatars/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
    echo "File is an image - " . $check["mime"] . ".";
    $uploadOk = 1;
} else {
    echo "File is not an image.";
    $uploadOk = 0;
}
}
// Check if file already exists
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}
// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
$uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
    echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
} else {
    echo "Sorry, there was an error uploading your file.";
}
}
?>

我收到“抱歉,上传您的文件时出错”。上传图片时。

有什么想法吗?

附:我的 PHP 配置中有“file_uploads = On”。

【问题讨论】:

  • 听起来文件可能太大了。你的 php 错误日志文件是怎么说的?
  • 如果是这种情况,我也会收到“抱歉,您的文件太大。”...
  • 基本调试:您是否检查过您是否有权将文件移动到 $target_dir 中?也许您正在尝试覆盖,但这是不允许的。另外,您的上传验证不正确。上传时您要做的第一件事是检查['error'] 以查看是否发生了上传。在完成之前,您必须假设该文件的 $_FILES 中的所有 ELSE 都是错误/不正确的。
  • 您的示例代码正在检查成功上传的文件大小,以确保它不大于 5mb。但是,如果 php 设置只允许上传 2mb,我认为它不会上传您的文件,因此当代码尝试移动文件时,它不存在并且您收到“抱歉,您的文件未上传。 "顺便说一下,upload_max_filesize 的默认设置是 2mb。
  • 所以我检查了错误日志,这是我发现的:

标签: php html twitter-bootstrap file upload


【解决方案1】:

正如您的 if statement 所说:

if(move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file))

也就是说,只要 PHP 函数 move_uploaded_file 出现,就会调用它。 有关如何以及何时发生此错误的信息,您必须转到http://php.net/manual/en/function.move-uploaded-file.php

对于我们(堆栈溢出社区)来说,很难发现它为什么会这样说,因为这可能是多个问题,我们不确定在此错误发生之前您做了什么。 你能详细说明一下吗?

这个函数通常做的是检查 POSTED 文件名称是否是合法的名称。 所以如果你是$target_file 这是$target_dir . basename($_FILES["fileToUpload"]["name"]);$target_dir = "../uploads/avatars/" 这可能有多个问题,比如目录不可访问或不存在。 您需要确保此目录存在。

下一个问题可能是您正在覆盖现有文件,并且由于某种原因无法完成(使用$_FILES["fileToUpload"]["name"] 并不是我真正的理想选择,我会做一些事情,比如获取今天的时间和日期。也就是说,如果您不需要文件是特定名称)

如果这对你有任何帮助,请告诉我:)

编辑:您也可以尝试将if(move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) 更改为if(move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_dir . 'test' . '.' . $imageFileType)) 以测试是否有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-08
    • 2016-01-02
    • 2018-06-22
    • 2013-07-07
    • 2015-11-02
    相关资源
    最近更新 更多