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程序设计有所帮助。