php如何上傳檔案到資料庫中,這裡分享幾個例子,掌握下php將檔案儲存到mysql資料庫的方法,怎麼讓php上傳檔案並儲存到資料庫的實例程式碼。
php上傳檔案到資料庫 無非是在資料庫中建一個longblob字段來保存這個文件 不過如果上傳4--5m的文件,這時候就會有些問題要注意 1,修改php.ini post_max_size upload_max_filesize2個參數的值,使他們比你需要上傳檔案的大小大 2,修改my.cnf 修改mysql資料庫的max_allowed_packet參數的值 此參數意義: max_allowed_packet 一個包的最大尺寸。訊息緩衝區被初始化為net_buffer_length字節,但是可在需要時增加到max_allowed_packet個位元組。缺省地,該值太小必能捕捉到大的(可能錯誤)包。如果你正在使用大的blob列,你必須增加該值。它應該像你想要使用的最大blob的那麼大。 一、php把圖片上傳到資料庫 建立3個php檔: readdir.php - 把圖片放到資料庫的程式碼 image.php - 顯示實際圖片的程式碼 view.php - 顯示你如何呼叫資料庫中的圖片的程式碼 1,建立一個資料庫 create table `images` ( `imgid` int not null auto_increment , `sixfourdata` longtext not null , primary key ( `imgid` ) );readdir.php 具體內容: $dbcnx = mysql_connect("localhost", "username", "password"); mysql_select_db("base64imgdb"); ?> '需要開啟一個目錄 "./" 'readdir.php 檔案定位於這個目錄: $path = "./"; $dir_handle = opendir($path) or die("unable to open directory $path");把圖象分類,並且讀出正在使用的一些數據 fopen '轉換 base64_encode ' 插入到表裡 while ($file = readdir($dir_handle)) { $filetyp = substr($file, -3); if ($filetyp == 'gif' or $filetyp == 'jpg') { $handle = fopen($path . "/" . $file,'r'); $file_content = fread($handle,filesize($path . "/" . $file)); fclose($handle); $encoded = chunk_split(base64_encode($file_content)); $sql = "insert into images set sixfourdata='$encoded'"; mysql_query($sql); } } ?>關閉設定的目錄,然後處理: closedir($dir_handle); echo("complete"); mysql_close($dbcnx); ?>讀出圖片的程式碼:image.php $dbcnx = mysql_connect("localhost", "username", "password"); mysql_select_db("base64imgdb"); ?>讀出圖片使用的程式碼image.php?img=x: $img = $_request["img"]; ?>之後需要連接資料庫,然後讀出: $result = mysql_query("select * from images where imgid=" . $img . ""); if (!$result) { echo("請求錯誤: " . mysql_error() . ""); exit(); } while ($row = mysql_fetch_array($result)) { $imgid = $row["imgid"]; $encodeddata = $row["sixfourdata"]; } ?> mysql_close($dbcnx); echo base64_decode($encodeddata); ?> 理解base64-encoded 圖象資料格式。 "讓我們來看看具體的圖片吧!" view.php image.php?img=1 image.php?img=357 readdir.php: ################################ # db connection # change these values ################################ $dbcnx = mysql_connect("localhost", "username", "password"); mysql_select_db("base64imgdb"); ############################### # db connection # change these values ############################### $dbcnx = mysql_connect("localhost", "username", "password"); mysql_select_db("base64imgdb"); $path = "./"; $dir_handle = opendir($path) or die("unable to open directory $path"); while ($file = readdir($dir_handle)) { $filetyp = substr($file, -3); if ($filetyp == 'gif' or $filetyp == 'jpg') { $handle = fopen($file,'r'); $file_content = fread($handle,filesize($file)); fclose($handle); $encoded = chunk_split(base64_encode($file_content)); $sql = "insert into images set sixfourdata='$encoded'"; mysql_query($sql); } } closedir($dir_handle); echo("complete"); mysql_close($dbcnx); ?> image.php: $dbcnx = mysql_connect("localhost", "username", "password"); $dbcnx = mysql_connect("localhost", "username", "password"); mysql_select_db("base64imgdb"); $img = $_request["img"]; $result = mysql_query("select * from images where imgid=" . $img . ""); if (!$result) { echo("error performing query: " . mysql_error() . ""); exit(); } while ($row = mysql_fetch_array($result) ) { $imgid = $row["imgid"]; $encodeddata = $row["sixfourdata"]; } mysql_close($dbcnx); echo base64_decode($encodeddata); ?> view.php (i shouldnt need to post this..) .. ..二、怎麼讓php 上傳檔案並存進資料庫 1、show_info.php
$num=mysql_num_rows($result); if($num $data = mysql_result($result,0,"file_data"); $type = mysql_result($result,0,"file_type"); $name = mysql_result($result,0,"file_name"); mysql_close($conn); //先輸出對應的檔案頭,並且恢復原來的檔名 header("content-type:$type"); header("content-disposition: attachment; filename=$name"); echo $data; ?> 2、show_info.php
$sql = "select file_name ,file_size from receive where id=$id"; $result = mysql_query($sql,$conn); if(!$result) die(" error: mysql query"); //如果沒有指定的記錄,則報錯 $num=mysql_num_rows($result); if($num //下面兩句程式也可以這麼寫 //$row=mysql_fetch_object($result); //$name=$row->name; //$size=$row->size; $name = mysql_result($result,0,"file_name"); $size = mysql_result($result,0,"file_size"); mysql_close($conn); echo " 上傳的檔案的資訊:"; echo " the file's name - $name"; echo " the file's size - $size"; echo " 附件"; ?> 3、submit.php
$myfile=$_files["myfile"]; //設定超時限制時間,預設時間為 30秒,設定為0時為不限時 $time_limit=60; set_time_limit($time_limit); // //把文件內容讀到字串中 $fp=fopen($myfile['tmp_name'], "rb"); if(!$fp) die("file open error"); $file_data = addslashes(fread($fp, filesize($myfile['tmp_name']))); fclose($fp); unlink($myfile['tmp_name']); //檔案格式,名字,大小 $file_type=$myfile["type"]; $file_name=$myfile["name"]; $file_size=$myfile["size"]; die($file_type); //連接資料庫,把檔案存到資料庫中 $conn=mysql_connect("localhost","root","admin"); if(!$conn) die("error : mysql connect failed"); mysql_select_db("nokiapaymentplat",$conn); $sql="insert into receive (file_data,file_type,file_name,file_size) values ('$file_data','$file_type','$file_name',$file_size)"; $result=mysql_query($sql,$conn); //下面這句取出了剛才的insert語句的id $id=mysql_insert_id(); mysql_close($conn); set_time_limit(30); //恢復預設逾時設定 echo "上傳成功--- "; echo "顯示上傳檔案資訊"; } else { echo "你沒有上傳任何檔案"; } ?> 4、upload.php |