客户刚刚要我解决他们的网络问题。我没有建立它,但这是正在发生的事情。
图像作为longblobs存储在数据库中。在搬到新服务器之前,一切正常。在新服务器上,部分图像仅部分显示。即使图像以所需的宽度和高度显示,超过一半的图像也是白色或灰色。 编辑:只有服务器更改后上传的图片才会受到影响!
这用于将图像读入数据库以进行数据库插入:
move_uploaded_file($_FILES['imagefile1']['tmp_name'],"tmppic.img"))
$tmpstr = fopen("tmppic.img","rb");
$image = addslashes(fread($tmpstr,filesize("tmppic.img")));
以下是用于显示图像的PHP函数: imagecreatefromstring, imagecreatetruecolor, imagecopyresampled, imagejpeg
由于这在服务器移动后开始发生,我怀疑服务器配置。
发生了什么事?
答案 0 :(得分:3)
Dunno如果它正在扼杀你,但你肯定需要将addslashes()
更改为mysql_real_escape_string()
。 SQL注入啊...
答案 1 :(得分:3)
好的,想通了。看下面的代码。
if (move_uploaded_file($_FILES['imagefile1']['tmp_name'],"tmppic.img")){
$tmpstr = fopen("tmppic.img","rb");
$image = addslashes(fread($tmpstr,filesize("tmppic.img")));
上传的文件将移至tmppic.img文件中。该文件经常被使用。问题是filesize(“tmppic.img”)在 move_uploaded_file
之前返回文件的大小。因此,如果之前的tmppic.img有120k文件大小并且新上传的文件较大,则只读取120K的信息,因此图片中的灰色区域。
我通过将文件大小(“tmppic.img”)替换为
来解决了这个问题$file_size = $_FILES['imagefile1']['size'];
$image = mysql_real_escape_string(fread($tmpstr,$file_size));
这是一个错误吗?
答案 2 :(得分:1)
确认您的图片字段设置为正确的BLOB类型。
我有同样的问题,这是一个死的简单解决方案;我将我的图像字段设置为“Blob”而不是“LongBlob”。我的数据库无法在字段中分配足够的空间来存储图像数据。将其更改为LongBlog,效果很好!
答案 3 :(得分:0)
在服务器移动期间,数据可能会被破坏 - 特别是如果数据被转储然后重新插入。你能确认整个图像数据实际上在数据库中吗?
编辑:刚刚看到您对该问题的修改。你能确认新图像是否完全插入到数据库中了吗?这可能是插入问题。
答案 4 :(得分:0)
如果图像通过ftp传输到新服务器,则传输模式可能未正确设置(即ascii与二进制)。如果您在ascii ftp模式下传输二进制文件,它可能会将图像中的某些字节解释为换行符并尝试将它们转换为Windows(CRLF)或UNIX(LF)等模式。这通常会破坏图像,因此不完全可读。
答案 5 :(得分:0)
您使用的是什么MySQL库?某些版本的MySQLi库在从数据库中正确检索blob时遇到问题。
我会验证您是否在两台服务器上运行相同版本的PHP和相关的MySQL库。