【问题标题】:File upload in PHP giving errorPHP中的文件上传给出错误
【发布时间】:2015-05-19 15:30:33
【问题描述】:

我正在使用 PHP 构建一个 Web 应用程序。我正在其中创建一个文件上传部分,但我遇到了问题。

<form action="upload.php" method="post" enctype="multipart/form-data">
Select image to upload:
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Upload Image" name="submit">
</form>

上传.php:

<?php
$target_dir = "images/";
$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.";
  }
  }
  ?>

它适用于图像。但是当我尝试检查如果我上传 mp4 文件会发生什么。它回显文件已存在,抱歉,只允许使用 JPG、JPEG、PNG 和 GIF 文件。抱歉,上传文件时出错。请指导我在哪里做错了,这样我就可以正常工作而不会出错。提前致谢。

【问题讨论】:

  • 因为你的php文件有限制
  • @Amit Thakur 它还显示文件已经存在。是吗?
  • 您确定您要上传的文件在目录中不存在吗?
  • 是的,请复制此代码并检查您的本地主机。谢谢
  • 经过一些修改后,working 对我来说很好===>

标签: php


【解决方案1】:

检查文件扩展名大小写。并允许大小写。

if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif" && $imageFileType != "JPG" && $imageFileType != " PNG" && $imageFileType != "JPEG" && $imageFileType != "GIF" )

【讨论】:

    【解决方案2】:

    HTML 代码

    <form method="POST" enctype="multipart/form-data">
    <input id="tags" type="file" name="employer_image"  />
    <input type="submit" name="submit" value="submit">
    </form
    

    上传.PHP

    if (isset( $_POST['submit'] )
    {
     function GetImageExtension($imagetype)
      {
           if(empty($imagetype)) return false;
           switch($imagetype)
           {
               case 'image/bmp': return '.bmp';
               case 'image/gif': return '.gif';
               case 'image/jpeg': return '.jpg';
               case 'image/png': return '.png';
               default: return false;
           }
    
          }
       if (!empty($_FILES["employer_image"]["name"])) {
       $file_name=$_FILES["employer_image"]["name"];
       $temp_name=$_FILES["employer_image"]["tmp_name"];
       $imgtype=$_FILES["employer_image"]["type"];
       $ext= GetImageExtension($imgtype);
       $imagename=date("d-m-Y").'-'.time().$ext;
       $target_path = "folder-path".$imagename;
      if(move_uploaded_file($temp_name, $target_path)) {
               /* write insert query for store in mysql*/
       }else{
       exit("Error While uploading image on the server");
       } 
      }
    }
    

    点击提交按钮后,首先从本地选择文件 它被重定向到upload.php文件,第一个函数是白色的,它找到文件的扩展名,它返回你的文件扩展名 您需要创建一个文件夹(您可以在其中存储名称) 在扩展代码之后,它会获取带有日期和时间的文件名,您可以设置保存图像的文件的目标路径,然后运行插入查询。 首先检查可以移动文件的文件夹权限

    谢谢 维韦克

    【讨论】:

    • 我们更新了描述
    【解决方案3】:

    它适用于图像。但是当我尝试检查会发生什么时 我上传 mp4 文件。它回显对不起,只允许使用 JPG、JPEG、PNG 和 GIF 文件

    这只是因为您的代码对其进行了限制。

    // 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;
    }
    

    如果文件不是jpgpngjpeggif,则不允许上传。

    它回显文件已经存在

    这仅仅是因为文件已经在那里(无论目录在哪里),由于这个检查:

    // Check if file already exists
    if (file_exists($target_file)) {
    echo "Sorry, file already exists.";
    $uploadOk = 0;
    }
    

    抱歉,上传您的文件时出错

    我不明白这是为什么。您的条件 if ($uploadOk == 0) 在所有其他条件中设置为 0,因此应该为 true,并且应该回显“抱歉,您的文件未上传”。

    搬到cmets去问问。

    【讨论】:

    • &James 我知道我已经限制了这个代码,但是它的回显文件已经退出了,只允许抱歉......我只想有错误而不是文件已经退出+错误
    • 代码中这条注释的正上方:// Check if $uploadOk is set to 0 by an error 把这个告诉我结果:echo $uploadOk; exit;
    • 我收到此错误:文件是图像 - image/jpeg。抱歉,文件已存在。0
    【解决方案4】:

    因为你有禁止其他扩展的条件,所以它按照代码工作:

    if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType !=    "jpeg" && $imageFileType != "gif" ) {
        echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
        $uploadOk = 0;
    }
    

    显然,您的目标文件夹中已经有了这样的文件。再检查一遍。

    【讨论】:

    • 我知道我已经限制了此代码,但它的回显文件已经退出,只允许抱歉......我只想有错误而不是文件已经退出+错误
    • 文件名是否相同?
    猜你喜欢
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    • 2010-09-05
    • 2012-05-04
    相关资源
    最近更新 更多