首页 > 后端开发 > 正文

php的框架图片上传 php怎样上传图片

2023-09-20 10:15:45 | 我爱编程网

对于后端开发比较关注的小伙伴们一定非常关心php的框架图片上传 php怎样上传图片,今天我爱编程网小编为大家整理了以下内容,下面一起来看看吧。

php的框架图片上传 php怎样上传图片

怎样用php实现上传图片到数据库

php实现上传图片保存到数据库的方法。具体分析如下: 我爱编程网

php 上传图片,一般都使用move_uploaded_file方法保存在服务器上。但如果一个网站有多台服务器,就需要把图片发布到所有的服务器上才能正常使用(使用图片服务器的除外)
如果把图片数据保存到数据库中,多台服务器间可以实现文件共享,节省空间。

首先图片文件是二进制数据,所以需要把二进制数据保存在mysql数据库。
mysql数据库提供了BLOB类型用于存储大量数据,BLOB是一个二进制对象,能容纳不同大小的数据。

BLOB类型有以下四种,除存储的最大信息量不同外,其他都是一样的。可根据需要使用不同的类型。

TinyBlob       最大 255B
Blob              最大 65K
MediumBlob  最大 16M
LongBlob      最大 4G

数据表photo,用于保存图片数据,结构如下:

CREATE TABLE `photo` (  
  `id` int(10) unsigned NOT NULL auto_increment,  
  `type` varchar(100) NOT NULL,  
  `binarydata` mediumblob NOT NULL,  
  PRIMARY KEY  (`id`)  
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

upload_image_todb.php代码如下:

<?php  
// 连接数据库  
$conn=@mysql_connect("localhost","root","")  or die(mysql_error());  
@mysql_select_db('demo',$conn) or die(mysql_error()); // 判断action  
$action = isset($_REQUEST['action'])? $_REQUEST['action'] : ''; 
// 上传图片  
if($action=='add'){  
    $image = mysql_escape_string(file_get_contents($_FILES['photo']['tmp_name']));  
    $type = $_FILES['photo']['type'];  
    $sqlstr = "insert into photo(type,binarydata) values('".$type."','".$image."')";  
    @mysql_query($sqlstr) or die(mysql_error());  
    header('location:upload_image_todb.php');  
    exit();  
// 显示图片  
}elseif($action=='show'){  
    $id = isset($_GET['id'])? intval($_GET['id']) : 0;  
    $sqlstr = "select * from photo where id=$id";  
    $query = mysql_query($sqlstr) or die(mysql_error());  
    $thread = mysql_fetch_assoc($query);  
    if($thread){  
        header('content-type:'.$thread['type']);  
        echo $thread['binarydata'];  
        exit();  
    }  
}else{  
// 显示图片列表及上传表单  
?>  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">  
<html>  
 <head>  
  <meta http-equiv="content-type" content="text/html; charset=utf-8">  
  <title> upload image to db demo </title>  
 </head>  
  
 <body>  
  <form name="form1" method="post" action="upload_image_todb.php" enctype="multipart/form-data">  
  <p>图片:<input type="file" name="photo"></p>  
  <p><input type="hidden" name="action" value="add"><input type="submit" name="b1" value="提交"></p>  
  </form>  
  
<?php  
    $sqlstr = "select * from photo order by id desc";  
    $query = mysql_query($sqlstr) or die(mysql_error());  
    $result = array();  
    while($thread=mysql_fetch_assoc($query)){  
        $result[] = $thread;  
    }  
    foreach($result as $val){  
        echo '<p><img 
src="upload_image_todb.php?action=show&id='.$val['id'].'&t='.time().'"
 width="150"></p>';  
    }  
?>  
</body>  
</html>  
<?php  
}  
?>

程序运行截图和数据库截图:

php的框架图片上传 php怎样上传图片

php怎样上传图片

一下代码可以实现简单的(单个的)文件上传,你看看吧:有更好的方法可以讨论
<?php
////////上传文件////////////
if(isset($_POST["sub"])){
 //$upfile="../upload_file/".$_FILES["file"]["name"];
 $name=time();//定义变量,保存图片名,以防图片的名字相同
 echo $name;
 $name.=strrchr($_FILES["file"]["name"],".");//上传文件的名称
 echo $name;
 $num=rand(1,10);
 $type=$_FILES["file"]["type"];
 $size=$_FILES["file"]["size"];
 $tmp_name=$_FILES["file"]["tmp_name"];
 if($_FILES["fiel"]["error"]>0){
  echo "上传文件有误:".$_FILES["file"]["error"]."<br/>";
 }else{
  echo "上传文件名为:".$name."<br>";
  echo "上传文件类型为:".$type."<br>";
  echo "上传文件大小为:".($size/1024)."<br>";
  echo "上传到:".$tmp_name."<br>";
  if(file_exists("../upload_file/$name")){
   echo "已经存在";
  }else{
   if(move_uploaded_file($tmp_name,"../upload_file/$name")){
    echo $name."上传成功";
   }else{
    echo $name."上传失败";
   }
  }
 }
}

?>
<form method="post" action="php_upload.php" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" name="sub" value="upload">
<input type="reset" name="res" value="reset"/>
</form>

php的框架图片上传 php怎样上传图片

php 编写 实现上传图片至服务器的函数

<?php
   class FileUpload{
      private $filepath;   //指定上传文件保存的路径
      private $allowtype=array("gif","jpg","jpeg","png");//允许上传文件的类型
      private $maxsize=1000000;//允许上传文件的最大值
      private $israndname=true;//是否随机重命名,
      private $originName;//源文件名字
      private $tmpFileName;//临时文件名字
      private $fileType;//上传后的文件类型,主要是文件后缀名
      private $fileSize;//文件尺寸
      private $newFileName;//新文件名字
      private $errorName=0;//错误号
      private $errorMess="";//用来提供错误报告
        //用于对上传文件初始化
        //指定上传路径  2·允许的类型  3·限制大小  4·是否使用随机文件名称
        //让用户可以不用换位置传参数,后面参数给值不用按照位置或者必须有值
         function __construct($options=array()){
            foreach($options as $key=>$val){
                $key = strtolower($key);
            //查看用户参数中的数组下标是否和成员属性名相同
            //get_class_vars(get_class($this))得到类属性的数组
            //如果$key下标不在这个类属性的数组中,则退出for循环
               if (!in_array($key,get_class_vars(get_class($this)))){
                continue;
                }
             $this -> setOption($key,$val);
         }
     }
         private function setOption($key,$val){
         //让实例化后获取过来的数组下标 = 数组下标的值,这里即为构造函数初始化
         //构造函数中调用,等于把所有属性初始化,将来可以直接访问
          $this -> $key=$val;
         }

         private function getError(){
             $str="上传文件{$this->originName}时出错";
             switch($this -> errorNum){
                 case 4: $str.="没有文件被上传";
                 break;
                 case 3: $str.="文件只有部分上传";
                 break;
                 case 2: $str.="上传文件超过了表单的值";
                 break;
                 case 1: $str.="上传文件超过phpini的值";
                 break;
                 case -1: $str.="未允许的类型";
                 break;
                 case -2: $str.="文件过大上传文件不能超过{$this->maxsize}字节";
                 break;
                 case -3: $str.="上传文件失败";
                 break;
                 case -4: $str.="建立存放上传文件目录失效,请重新上传指定目录";
                 break;
                 case -5: $str.="必须指定上传文件的路径";
                 break;
                 default: $str.="未知错误";
             }
             return $str.'<br>';
         }
         //用来检查文件上传路径
         private function checkFilePath(){
               if(empty($this -> filepath)){
                   $this -> setOption("errorNum",-5);
                   return false;
               }
               if(!file_exists($this -> filepath) || !is_writable($this -> filepath)){
                       if(!@mkdir($this -> filepath,0755)){
                           $this -> setOption("errorNum",-4);
                           return false;
                       }    
                     }
                     return true;
               }
         //用来检查上传文件尺寸大小

         private function checkFileSize(){
            if($this -> fileSize > $this ->maxsize){
                  $this -> setOption("errorNum",-2);
                  return false;
            }else{
            return true;
            }
         }

         //用来检查文件上传类型
         private function checkFileType(){
                if(in_array(strtolower($this->fileType),$this -> allowtype)){
                     return true;
                }else{
                //如果$this->fileType这个类型 不在$this -> allowtype这个数组中,则把错误号变成-1
                      $this -> setOption("errorNum",-1);
                      return false;
                }
         }
         private function setNewFileName(){
              if($this -> israndname){
                       $this -> setOption("newFileName",$this->preRandName());
              }else{
                      $this -> setOption("newFileName",$this -> originName);
              }
         }
         //用于检查文件随机文件名
         private function preRandName(){
                $fileName=date("Ymdhis").rand(100,999);
                return $fileName.".".$this -> fileType;
         }
         //用来上传一个文件

      function uploadFile($fileField){
            //检查文件路径
            $return = true;
          if(!$this -> checkFilePath()){
               $this -> errorMess=$this -> getError();
               return false;
            }//获取文件信息
             $name     = $_FILES[$fileField]['name'];
             $tmp_name = $_FILES[$fileField]['tmp_name'];
             $size     = $_FILES[$fileField]['size'];
             $error    = $_FILES[$fileField]['error'];              
          if(is_array($name)){//判断获取过来的文件名字是否为数组
              $errors=array();//如果为数组则设置为一个数组错误号
                 for($i=0;$i<count($name);$i++){
                  //循环每个文件即每个类属性赋值或者说初始化属性值 或者初始化构造函数
                     if($this->setFiles($name[$i],$tmp_name[$i],$size[$i],$error[$i])){
                         if(!$this->checkFileSize() || !$this->checkFileType()){
                          //如果上面尺寸或者类型不对,则调用这个错误信息
                             $errors[$i]=$this->getError();
                             $return=false;
                         }
                     }else{
                      //这里是
                      $error[]=$this->getError();
                      $return=false;
                     }
                     if(!$return)
                      $this->setFiles();
                 }

                 if($return){
                  $fileNames=array();
                    for($i=0;$i<count($name);$i++){
                      if($this->setFiles($name[$i],$tmp_name[$i],$size[$i],$error[$i])){
                             $this->setNewFileName();
                         if(!$this->copyFile()){
                           $errors=$this->getError();
                           $return=false;
                         }else{
                          $fileNames[$i]=$this->newFileName;
                         }
                          }

                    }
                       $this->newFileName=$fileNames;
                 }

           $this->errorMess=$errors;
           return $return;
                 

          }else{

            //看看$name,$tmp_name,$size,$error这些是否赋值成功 否则返回FALSE
            if($this -> setFiles($name,$tmp_name,$size,$error)){
            //看看文件大小尺寸是否匹配,不匹配返回FALSE
                    if($this -> checkFileSize() && $this -> checkFileType()){
                          //获取新文件名
                          $this->setNewFileName();
                            if($this->copyFile()){
                                return true;
                            }else{
                               return false;
                            }
                    }else{
                    $return=false;
                         }
    }else{
    $return=false;
          }
                             if(!$return){
                        $this -> errorMess = $this ->getError();
                        return $return;
                                 }
}

        }

    function copyFile(){//将文件从临时目录拷贝到目标文件夹
        if(!$this->errorNum){
           //如果传递来的路径有斜杠,则删除斜杠再加上斜杠
           //./upload+./
           $filepath=rtrim($this->filepath,'/').'/';
            //./upload+./+加上随机后的新文件名和后缀
            //这里指创建一个新的$filepath.这个文件 像占位符但是为空的
           $filepath.=$this->newFileName;
          //尝试着把临时文件$this->tmpFileName移动到$filepath下哪里覆盖原来的这个文件
               if(@move_uploaded_file($this->tmpFileName,$filepath)){
                       return true;
                   }else{
                     $this->setOption('errorNum',-3);
                     return false;
                       }
        }else{
         return false;
             }
        }
          //这里是为了其他剩余的属性进行初始化操作!
         private function setFiles($name="",$tmp_name="",$size=0,$error=0){
         //这里给错误号赋值
             $this -> setOption("errorNum",$error);
             //如果这里有错误,直接返回错误
               if ($error){
                   return false;
               }
             $this -> setOption("originName",$name);//复制名字为源文件名
             $this -> setOption("tmpFileName",$tmp_name);
             $arrstr = explode(".",$name);//按点分割文件名,
             //取分割后的字符串数组最后一个 并转换为小写,赋值为文件类型
             $this -> setOption("fileType",strtolower($arrstr[count($arrstr)-1]));
             $this -> setOption("fileSize",$size);
             return true;
         }
         //用来获取上传后的文件名
         function getNewFileName(){ 
              return $this -> newFileName;
          }

         //上传失败,后则返回这个方法,就可以产看报告
         function getErrorMsg(){
                   return $this -> errorMess;
         }
   }
?>


============================调用====================================


<?php
require("FileUpload.class.php");
//这里实例化后赋值为数组,数组的下标要对应类中属性的值,否则不能传递值,可以不分先后但是必须一致
$up = new FileUpload(array('israndname'=>'true',"filepath"=>"./upload/",'allowtype'=>array('txt','doc','jpg','gif'),"maxsize"=>1000000));
   echo '<pre>';

   if($up -> uploadFile("pic")){
     print_r($up -> getNewFileName());
   } else{
     print_r($up -> getErrorMsg());
   }
   echo '<pre>';
?>


-------------------HTML-------------------------
<html>
 <head>
<meta http-quive="content-type" content="text/html;charset=utf-8" ></meta>
 </head>
 <body>
          <form action="upload.php" method="post" enctype="multipart/form-data">
                shoppic:<input type="file" name="pic[]"><br>

                <input type="hidden" name="MAX_FILE_SIZE" value="1000000">
                <input type="submit" name="sub" value="添加商品">
          </form>
 </body>

</html>

-------------------或者HTML-------------------------

<html>
 <head>
<meta http-quive="content-type" content="text/html;charset=utf-8" ></meta>
 </head>
 <body>
          <form action="upload.php" method="post" enctype="multipart/form-data">
               //区别在这里
                shoppic:<input type="file" name="pic[]"><br>
shoppic:<input type="file" name="pic[]"><br>
shoppic:<input type="file" name="pic[]"><br>
                <input type="hidden" name="MAX_FILE_SIZE" value="1000000">
                <input type="submit" name="sub" value="添加商品">
          </form>
 </body>

</html>
=====================================================================

以上是自己总结的  还没有怎么精简加工过,仅供参考

以上不止可以上传图片,可以上自定义任何文件

以上就是我爱编程网小编为大家带来的内容了,希望能够帮助到大家,了解更多后端开发资讯敬请关注我爱编程网。
与“php的框架图片上传 php怎样上传图片”相关推荐
php图片上传框架 怎样用php实现上传图片到数据库
php图片上传框架 怎样用php实现上传图片到数据库

PHP实现上传图片到数据库并显示输出的方法本文实例讲述了PHP实现上传图片到数据库并显示输出的方法。分享给大家供大家参考,具体如下:1.创建数据表CREATETABLEccs_image(idint(4)unsignedNOTNULLauto_increment,descriptionvarchar(250)defaultNUL

2023-09-14 00:37:15
php传图片框架 php中上传图片的问题
php传图片框架 php中上传图片的问题

php怎样上传图片一下代码可以实现简单的(单个的)文件上传,你看看吧:有更好的方法可以讨论&lt;?php////////上传文件////////////if(isset($_POST["sub"])){ //$upfile="../upload_file/".$_FILES["file"]["name"]; $name=time();//定义变量,保存图片名,以防图片的名字相同 echo 

2023-09-10 09:03:38
php上传图片框架 PHP实现上传图片到数据库并显示输出的方法
php上传图片框架 PHP实现上传图片到数据库并显示输出的方法

PHP实现上传图片到数据库并显示输出的方法本文实例讲述了PHP实现上传图片到数据库并显示输出的方法。分享给大家供大家参考,具体如下:1.创建数据表CREATETABLEccs_image(idint(4)unsignedNOTNULLauto_increment,descriptionvarchar(250)defaultNUL

2023-09-08 23:48:13
php框架怎么加图片 php 图片上传预览功能怎么实现
php框架怎么加图片 php 图片上传预览功能怎么实现

PHP后台添加图片信息和文字信息同时上传啊,比如先inster文字信息进库,query成功之后,再上传图片。当然也可以先上传图片,再文字入库,文字入库不成功的话,再unlink(删除)掉图片。上传是没有先后次序的。所有数据一起被发往服务器。(你的在线编辑器不错,能发我一个吗?170525859163@.com)谢谢。有空我们还能多多交流。QQ就是前面那个数字了。顺便贴个上传代

2023-09-19 21:52:53
php上传多张图片框架 input file用了multiple属性,而且选择了多张图片,PHP该怎么上传?
php上传多张图片框架 input file用了multiple属性,而且选择了多张图片,PHP该怎么上传?

inputfile用了multiple属性,而且选择了多张图片,PHP该怎么上传?其实就那两个函数\x0d\x0ais_uploaded_file()和move_uploaded_file()\x0d\x0a是循环上传的。你打印下$_FILES这个超全局数组就明白了。下面我的测试代码上传图片的:\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0a无标题

2023-09-23 17:33:21
php在手机上传照片框架 php微信上传永久图片素材求代码
php在手机上传照片框架 php微信上传永久图片素材求代码

php微信上传永久图片素材求代码您好,这样的://素材constMEDIA_FOREVER_UPLOAD_URL='/material/add_material?';constMEDIA_FOREVER_NEWS_UPLOAD_URL='/material/add_news?';constMEDIA_FOREVER_NEWS_UPDATE_URL='/material/upd

2023-10-02 23:33:22
php框架实现多图片上传 yii2高级框架怎么使用jquery file upload上传插件
php框架实现多图片上传 yii2高级框架怎么使用jquery file upload上传插件

WebUploader+php视频分片上传由于最近项目中遇到有做视频上传的功能,决定写一篇文章详细说明大文件上传的原理和使用BaiduWebFE(FEX)团队开发的文件上传插件WebUploader。利用前端框架WebUploader配置进行对大文件的分片(由Baidu官方测试,每5M一个分片是效率最高的),这里,我的服务端是php,所以需要修改php.ini里面的post_max_s

2023-08-30 04:07:10
web前端开发图片上传 前端图片上传给后端还需要给后端字段吗
web前端开发图片上传 前端图片上传给后端还需要给后端字段吗

前端图片上传给后端还需要给后端字段吗【聚焦前端实战】后端让我把图片文件和字段一起上传了...2022年11月21日但是如果要把字段和图片文件一起上传那就不支持了,当然也不能像普通的字段上传一样使用JSON,这个时候就要掏出我们的FormData格式了!CSDN编程社区大家还在搜js将文件转为二进制流vue选择文件夹获取绝对路径后端响应图片url给前端前

2023-09-25 20:33:47