php圖片的二進制轉(zhuǎn)換實現(xiàn)方法
本文實例講述了php圖片的二進制轉(zhuǎn)換實現(xiàn)方法。分享給大家供大家參考。具體實現(xiàn)方法如下:
這里我們是在上傳文件時把上傳的文件轉(zhuǎn)換成二進制然后保存到數(shù)據(jù)的字段中去,下次讀讀出我們也用同樣的方法顯示即可.
html代碼如下:
<input type="file" name="myFile" />
<input type="submit" name="Submit" value="Submit"/>
</form>
將圖片保存到數(shù)據(jù)庫,代碼如下:
//由于上傳過來的圖片被保存在一個臨時文件中,所以
//我們僅需要讀取該文件就可以獲取傳過來的圖片
$fp = fopen($_FILES["myFile"]["tmp_name"],"rb");
$buf = addslashes(fread($fp,$_FILES["myFile"]["size"]));
//創(chuàng)建一個PDO對象
$dbh = new PDO("mysql:host=localhost;port=
3306;dbname=test", "root", "123456″);
//執(zhí)行插入操作并將結果保存在一個變量中
$result = $dbh->query("INSERT INTO img (images) VALUES (‘$buf')");
//獲取影響的行數(shù)
if ($result->rowCount() >0) {
echo("數(shù)據(jù)已插入。");
} else {
echo("不能執(zhí)行插入操作。");
}
//顯式的關閉PDO連接
$dbh = NULL;
?>
顯示圖片show.php,代碼如下:
$conn=@mysql_connect("localhost","root","123456″) or die("服務器連接錯誤!"); //鏈接數(shù)據(jù)庫
@mysql_select_db("test",$conn) or die("未發(fā)現(xiàn)數(shù)據(jù)庫!");
$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;
?>
或者,代碼如下:
補充:
1、fopen函數(shù).
fopen()函數(shù)用于打開文件或者URL,語法如下:
int fopen(string filename, string mode);
字符串參數(shù)mode可以是下列的情形:
"r"開文件方式為只讀,文件指針指到開始處.
"r+"開文件方式為可讀寫,文件指針指到開始處。
"w"開文件方式為寫入,文件指針指到開始處,并將原文件的長度設為0。若文件不存在,則建立新文件。
"w+"開文件方式為可讀寫,文件指針指到開始處,并將原文件的長度設為0。若文件不存在,則建立新文件。
"a"開文件方式為寫入,文件指針指到文件最后。若文件不存在,則建立新文件。
"a+"開文件方式為可讀寫,文件指針指到文件最后。若文件不存在,則建立新文件。
"b"若操作系統(tǒng)的文字及二進位文件不同,則可以用此參數(shù),UNIX系統(tǒng)不需要使用本參數(shù)。
2、Addslashes函數(shù)
Addslashes函數(shù)用于將字符串加入斜線,語法如下,注:我測試的時候是把這個函數(shù)去掉后成功了,道理你懂的,自己試下就明白了.
string addslashes(string str);
該函數(shù)使需要讓數(shù)據(jù)庫處理的字符串,引號的部份加上斜線,以供數(shù)據(jù)庫查詢(query)能順利運作,這些會被改的字符包括單引號(')、雙引號(")、反斜線backslash()以及空字符NULL(the null byte).
3、fread函數(shù)
fread函數(shù)用于讀到指定長度的位組或到文件尾EOF,語法如下:
string fread(int fp, int length);可安全用于二進制文件
fread() 從文件指針 file 讀取最多 length 個字節(jié),該函數(shù)在讀取完最多 length 個字節(jié)數(shù),或到達 EOF 的時候,或(對于網(wǎng)絡流)當一個包可用時,或(在打開用戶空間流之后)已讀取了 8192 個字節(jié)時就會停止讀取文件,視乎先碰到哪種情況.
二進制轉(zhuǎn)換成圖片
注:$newFilePath 對生成的圖片名和路徑做處理,這里自己去實現(xiàn),代碼如下:
$data = $GLOBALS[HTTP_RAW_POST_DATA];//得到post過來的二進制原始數(shù)據(jù)
if(emptyempty($data)){
$data=file_get_contents("php://input");
}
$newFile = fopen($newFilePath,"w");//打開文件準備寫入
fwrite($newFile,$data);//寫入二進制流到文件
fclose($newFile);//關閉文件
可以把讀取到的二進制流存到數(shù)據(jù)庫,也可以直接寫入成一個圖片,獲取二進制頭文件,從而得知屬于什么類型文件,代碼如下:
$strInfo = @unpack("C2chars", $bin);
$typeCode = intval($strInfo['chars1'].$strInfo['chars2']);
$fileType = '';
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';
}
希望本文所述對大家的PHP程序設計有所幫助。
- PHP函數(shù)篇詳解十進制、二進制、八進制和十六進制轉(zhuǎn)換函數(shù)說明
- php顏色轉(zhuǎn)換函數(shù)hex-rgb(將十六進制格式轉(zhuǎn)成十進制格式)
- PHP實現(xiàn)十進制、二進制、八進制和十六進制轉(zhuǎn)換相關函數(shù)用法分析
- php將字符串轉(zhuǎn)換成16進制的方法
- php 實現(xiàn)進制轉(zhuǎn)換(二進制、八進制、十六進制)互相轉(zhuǎn)換實現(xiàn)代碼
- php實現(xiàn)文件與16進制相互轉(zhuǎn)換的方法示例
- php實現(xiàn)36進制與10進制轉(zhuǎn)換功能示例
- PHP進制轉(zhuǎn)換實例分析(2,8,16,36,64進制至10進制相互轉(zhuǎn)換)
- PHP實現(xiàn)十進制數(shù)字與二十六進制字母串相互轉(zhuǎn)換操作示例
相關文章
php 使用curl模擬ip和來源進行訪問的實現(xiàn)方法
下面小編就為大家?guī)硪黄猵hp 使用curl模擬ip和來源進行訪問的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-05-05php實現(xiàn)數(shù)組中索引關聯(lián)數(shù)據(jù)轉(zhuǎn)換成json對象的方法
這篇文章主要介紹了php實現(xiàn)數(shù)組中索引關聯(lián)數(shù)據(jù)轉(zhuǎn)換成json對象的方法,基于Yii框架分析了php數(shù)組與json格式數(shù)據(jù)的轉(zhuǎn)換技巧,需要的朋友可以參考下2015-07-07PHP使用strrev翻轉(zhuǎn)中文亂碼問題的解決方法
這篇文章主要介紹了PHP使用strrev翻轉(zhuǎn)中文亂碼問題的解決方法,通過自定義函數(shù)遍歷字符串并設置編碼格式解決亂碼問題,需要的朋友可以參考下2017-01-01Linux服務器下PHPMailer發(fā)送郵件失敗的問題解決
這篇文章主要給大家介紹了關于如何解決Linux服務器下PHPMailer發(fā)送郵件失敗的問題,文中通過示例代碼介紹的很詳細,相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。2017-03-03PHP中文URL編解碼(urlencode()rawurlencode()
PHP中對于URL進行編碼,可以使用 urlencode() 或者 rawurlencode(),二者的區(qū)別是前者把空格編碼為 '+',而后者把空格編碼為 '%20',不過應該注意的是,在編碼時應該只對部分URL編碼,否則URL中的冒號和反斜杠也會被轉(zhuǎn)義。2010-07-07Linux環(huán)境下php實現(xiàn)給網(wǎng)站截圖的方法
這篇文章主要介紹了Linux環(huán)境下php實現(xiàn)給網(wǎng)站截圖的方法,結合實例形式較為詳細的分析了Linux環(huán)境下php實現(xiàn)網(wǎng)站截圖的具體步驟與相關操作技巧,需要的朋友可以參考下2016-05-05