【问题标题】:Why won't my image files upload in PHP?为什么我的图片文件不能在 PHP 中上传?
【发布时间】:2016-11-20 21:28:38
【问题描述】:

我希望我的用户能够将图像上传到他们的帐户(我的 MySQL 数据库)。但是,当我尝试对其进行编码并上传时,该文件似乎从未上传过并且是空的。我已经在我的 PHP 设置中检查了最大上传大小等。提前致谢!!

$data = "";
if(isset($_FILES["up"])) {
   $data = file_get_contents($_FILES['up']['tmp_name']);
   $data = base64_encode($data);
   $data = $connection->real_escape_string($data);
} else {
   echo '<div style="position:absolute;height:100px;top:0px;left:0px;
                     border-top-right-radius:20px;border-top-left-radius:20px;
                     width:100%;background:white;z-index:100;"
          >
            <font style="color:#BB0000;font-size:2.2vw;">'.$_FILES['up']['error'].'</font>
        </div>';
   die('');
}

我的 HTML 是:(并且表单提交正确)

 <input type="file" accept=".jpg,.png,.jpeg" name="up" id="up"/>

【问题讨论】:

  • 多么可怕的文件存储方式。
  • 对,把文件存入文件系统,把名字存入数据库
  • 你的 html 表单中有 enctype="multipart/form-data" 吗?
  • e4c5 - 为什么这样更好?
  • 您需要通过检查文件上传是否成功来进行调试。 $_FILES 也有一个错误元素,最低限度是检查它的值并与我们分享(如果你不能根据它的内容解决问题)。

标签: php html mysql file-upload input-type-file


【解决方案1】:

PHP 代码

$data = "";
if(isset($_FILES["up"])) {
   $data = file_get_contents($_FILES['up']['tmp_name']);
   $data = base64_encode($data);
   $data = $connection->real_escape_string($data);
} else {
   echo '<div style="position:absolute;height:100px;top:0px;left:0px;
                     border-top-right-radius:20px;border-top-left-radius:20px;
                     width:100%;background:white;z-index:100;"
          >
            <font style="color:#BB0000;font-size:2.2vw;">'.$_FILES['up']['error'].'</font>
        </div>';
   die('');
}

HTML 代码

<form method="POST" enctype="multipart/form-data">
<input type="file" accept=".jpg,.png,.jpeg" name="up" id="up"/>
</form>

【讨论】:

  • 我看不出有什么不同?我现在包含了 enctype
  • 你可以使用 move_uploaded_file() 函数代替“base64_encode()”
  • 哦,是的,但问题是它不是以表格形式发送的
  • 函数 base64_to_jpeg($base64_string, $output_file) { $ifp = fopen($output_file, "wb"); fwrite($ifp, base64_decode($base64_string)); fclose($ifp);返回 $output_file; }
  • 你不想用表单设置?
【解决方案2】:

建议:将图像存储在目录中。

你为什么不问 DB?

  1. 读取/写入数据库总是比文件系统慢
  2. 您的数据库备份将变得更加耗时

所以,这是我的解决方案。

第一步:创建目录 userPhotos

第 2 步:创建表单

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

第 3 步:创建一个名为 upload.php 的文件,用于处理文件上传。

<?php
$target_dir = "userPhotos/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$newfilename = ;//assign unique user ID
$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"] . ".";
    if (move_uploaded_file($_FILES["fileToUpload"][$newfilename.$imageFileType], $target_file)) {
      echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";$uploadOk = 1;
} 
} else {
    echo "File is not an image.";
    $uploadOk = 0;
}
}
if($uploadOK==1){
 store the path of image in DB as "/userPhotos/".$newfilename
 echo "uploaded photo : <img src='userphotos/".$newfilename."'">
}
//to display the image fetch the path using user ID as put it in src of img tag. 
?>

如果有人有更好的解决方案,请告诉我。谢谢,祝你好运。

【讨论】:

  • 好的。我已经有了大部分内容,但是我的提交按钮是否必须具有 file type="upload" ?我希望图像可以成为注册表单的一部分
猜你喜欢
  • 2021-01-22
  • 1970-01-01
  • 2011-09-13
  • 2011-07-09
  • 1970-01-01
  • 1970-01-01
  • 2016-06-22
  • 2011-11-27
  • 2016-07-11
相关资源
最近更新 更多