PHP将图片保存为MySQL数据库的一个失败的解决方案
本文分析了PHP将图片保存到MySQL数据库中失败的原因,供大家参考,具体分析如下:保存图片数据库是不明智的,我们是把图片保存到服务器,然后把图片地址保存到数据库中,所以每次我们只看图片地址就可以显示出来,但我还是把图片保存到mysql数据库解决方案中,代码如下:
复制代码代码如下:require'class /分贝。php;
文件;
$ FP = fopen($文件名,R);
$ IMG = fread($ FP,文件大小($文件名));
Fclose($ FP);
为数据库->执行(插入db2.testimg(` IMG `)值($ IMG););
报告错误:
代码如下:
复制代码代码如下:$ img = fread($ FP,文件大小($文件名));
$ img = addslashes($ IMG)
To error, a variety of search results, Baidu is addslashes, or no addslashes, it is nonsense.
复制代码代码如下:base64_decode
img = base64_encode美元(美元IMG);
插入成功,图片文件17.0k,出来base64_decode,显示正常,找到一个16元的方法:
复制代码如下:$ img = bin2hex($ IMG);
有效,输出不需要解密,它是存储在数据库中非常25K,更是Base64。后来,后来,后来,发现phpmyadmin直接上传图片文件可以使用小于Base64文件,文件12.8k ..
phpMyAdmin的源代码,common.lib.php文件183有一个神奇的功能,代码如下:
复制代码如下:功能pma_sqladdslashes($ a_string = '',is_like美元= false,$ CRLF = false,php_code美元= false)
{
如果($ is_like){
a_string美元= str_replace(,,a_string美元);
{人}
a_string美元= str_replace(,,a_string美元);
}
如果($ CRLF){
a_string美元= str_replace(n
a_string美元= str_replace(R
a_string美元= str_replace(T
}
如果($ php_code){
a_string美元= str_replace(,a_string美元);
{人}
a_string美元= str_replace(' ',' ',a_string美元);
}
返回的a_string;
Of the'PMA_sqlAddslashes} / / end (function$img) '= PMA_sqlAddslashes ($img);
该文件的大小是一样大的12.8k和phpMyAdmin。
例如,前台image.html,代码如下:
复制代码代码如下所示:
上传图片
文件:
后台处理upimage.php代码如下:
复制代码代码如下:< PHP
将图片插入到数据库中
imgfile美元美元'imgfile_files { } =;
submitbtn美元美元'submitbtn_post { } =;
如果($ submitbtn = = 'ok'and is_array($ imgfile)){
$name = $ imgfile { 'name' }; / /获取图片名称
类型=美元美元imgfile {类型}; / /获取图片类型
大imgfile美元美元'size{ }; / /获取图片的长度
tmpfile = { 'tmp_name imgfile美元美元的}; / /路图像上传到一个临时文件
如果($ tmpfile和is_uploaded_file($ tmpfile)){ / /判断上传的文件是空的,文件没有上传的文件
读取图像流
文件大小= fopen(tmpfile美元,rb);
imgdata美元= bin2hex(fread($文件大小美元)); / / bin2hex()将二进制数据转换为116进制表示
Fclose(文件);
$ mysqli = mysql_connect(localhost
mysql_select_db(测试); / /选择数据库
插入 / /数据库表,添加0x图片数据,用来表示16进制数
如果(mysql_query(插入图片(名称、类型、图像)值($名。,, $型。
插入成功!显示图片;
其他的
插入失败!;
mysql_close();
}其他
请先选择图片!单击此返回。
别的}
请先选择图片!单击此返回。
>
显示图片disimage.php,代码如下:
复制代码代码如下:< PHP
mysql_connect(localhost
mysql_select_db(测试);
图片显示/新插入
结果= mysql_query美元(选择图像从图像ID =(选择最大值(ID)从图像))
行= mysql_fetch_object美元($结果);
标题(内容类型:图像/ pjpeg );
回波$行- >图像;
mysql_close();
>
结论:
pma_sqladdslashes使用文件12.8k作为原始图片一样大
bin2hex 16是一个很好用的文件25k
base64_encode好用,文件出来,需要base64_decode 17k
addslashes不好用,继续犯错误,这表明addslashes好一些Windows的机器。
希望本文能对大家的PHP程序设计有所帮助。