這里我們是在上傳文件時把上傳的文件轉換成二進制然后保存到數據的字段中去,下次讀讀出我們也用同樣的方法顯示即可.
html,代碼如下:
- <form action=”insertPic.php” method=”post” enctype=”multipart/form-data” name=”mainForm” id=”mainForm”>
- <input type=”file” name=”myFile” />
- <input type=”submit” name=”Submit” value=”Submit”/>
- </form>
將圖片保存到數據庫,代碼如下:
- <?php
- //由于上傳過來的圖片被保存在一個臨時文件中,所以
- //我們僅需要讀取該文件就可以獲取傳過來的圖片
- $fp = fopen($_FILES["myFile"]["tmp_name"],”rb”);
- $buf = addslashes(fread($fp,$_FILES["myFile"]["size"]));
- //創建一個PDO對象
- $dbh = new PDO(“mysql:host=localhost;port=
- 3306;dbname=test”, “root”, “123456″);
- //執行插入操作并將結果保存在一個變量中
- $result = $dbh->query(“INSERT INTO img (images) VALUES (‘$buf’)”);
- //獲取影響的行數
- if ($result->rowCount() >0) {
- echo(“數據已插入。”);
- } else {
- echo(“不能執行插入操作。”);
- }
- //顯式的關閉PDO連接
- $dbh = NULL;
- ?>
顯示圖片,show.php,代碼如下:
- <?php
- $conn=@mysql_connect(“localhost”,”root”,”123456″) or die(“服務器連接錯誤!”); //鏈接數據庫
- @mysql_select_db(“test”,$conn) or die(“未發現數據庫!”);
- $query=”select * from img where Id=”.$_GET['id'];
- $result=mysql_query($query);
- $num=mysql_num_rows($result);
- $data = mysql_result($result,0,”images”);
- header(“Content-type: image/” . $num['imgType']);
- echo $data;
- ?>
或者,代碼如下:<img src=”show.php?id=5″ />
1、fopen函數.
fopen()函數用于打開文件或者URL,語法如下:
int fopen(string filename, string mode);
字符串參數mode可以是下列的情形:
“r”開文件方式為只讀,文件指針指到開始處.
“r+”開文件方式為可讀寫,文件指針指到開始處。
“w”開文件方式為寫入,文件指針指到開始處,并將原文件的長度設為0。若文件不存在,則建立新文件。
“w+”開文件方式為可讀寫,文件指針指到開始處,并將原文件的長度設為0。若文件不存在,則建立新文件。
“a”開文件方式為寫入,文件指針指到文件最后。若文件不存在,則建立新文件。
“a+”開文件方式為可讀寫,文件指針指到文件最后。若文件不存在,則建立新文件。
“b”若操作系統的文字及二進位文件不同,則可以用此參數,UNIX系統不需要使用本參數。
2、Addslashes函數
Addslashes函數用于將字符串加入斜線,語法如下,注:我測試的時候是把這個函數去掉后成功了,道理你懂的,自己試下就明白了.
string addslashes(string str);
該函數使需要讓數據庫處理的字符串,引號的部份加上斜線,以供數據庫查詢(query)能順利運作,這些會被改的字符包括單引號(’)、雙引號(”)、反斜線backslash()以及空字符NULL(the null byte).
3、fread函數
fread函數用于讀到指定長度的位組或到文件尾EOF,語法如下:
string fread(int fp, int length);可安全用于二進制文件
fread() 從文件指針 file 讀取最多 length 個字節,該函數在讀取完最多 length 個字節數,或到達 EOF 的時候,或(對于網絡流)當一個包可用時,或(在打開用戶空間流之后)已讀取了 8192 個字節時就會停止讀取文件,視乎先碰到哪種情況.
二進制轉換成圖片
注:$newFilePath 對生成的圖片名和路徑做處理,這里自己去實現,代碼如下:
- $newFilePath='1.jpg';
- $data = $GLOBALS[HTTP_RAW_POST_DATA];//得到post過來的二進制原始數據
- if(emptyempty($data)){
- $data=file_get_contents("php://input");
- }
- $newFile = fopen($newFilePath,"w");//打開文件準備寫入
- fwrite($newFile,$data);//寫入二進制流到文件
- fclose($newFile);//關閉文件
可以把讀取到的二進制流存到數據庫,也可以直接寫入成一個圖片,獲取二進制頭文件,從而得知屬于什么類型文件,代碼如下:
- $bin = substr($content,0,2);
- $strInfo = @unpack("C2chars", $bin);
- $typeCode = intval($strInfo['chars1'].$strInfo['chars2']);
- $fileType = '';//開源代碼Vevb.com
- switch ($typeCode)
- {
- case 7790:
- $fileType = 'exe';
- break;
- case 7784:
- $fileType = 'midi';
- break;
- case 8297:
- $fileType = 'rar';
- break;
- case 255216:
- $fileType = 'jpg';
- break;
- case 7173:
- $fileType = 'gif';
- break;
- case 6677:
- $fileType = 'bmp';
- break;
- case 13780:
- $fileType = 'png';
- break;
- default:
- echo 'unknown';
- }
新聞熱點
疑難解答