2011-10-04 70 views
1

我有两个虚拟系统进行开发。第一个是Windows + xampp(apache,php,mysql),第二个是Linux + apache + php + mysql。我有非常非常简单的页面,使用外部链接从数据库加载图像(是的,图像不在文件系统中,图像不在这里,是正确与否)。外部图像不显示在Apache下

第一页显示的照片:从数据库

<img src="photo.php?photo_id=4" height="127" width="127"> 

第二个页面加载它们:

if (isset($_GET['photo_id'])) { 
    $link = getDBconnection(); 
    $result = getPhoto($link, $_GET['photo_id']); 

    if ($result) { 
     $row = mysql_fetch_assoc($result); 
     header("Content-type: " . $row['MIMEtype']); 
     echo $row['photoImage']; 
    } 

    closeDBconnection($link); 
} 

一切都在Windows机器上,但Linux机器上做工精细,照片只是不” t出现。我的意思是来自页面目录的图像文件加载并显示,但不知何故这个外部链接停止工作。我放了几个回声,并确保脚本执行和photoImage有二进制数据。

我不知道,这只是配置问题(可能,我没有每天配置apache/php/mysql)。我一直在坚持。有任何想法吗?

PS。数据库完全一样。我刚从Windows导出/导入到Linux的mysql数据库。从数据库中成功选择任何其他数据。这只是照片,不起作用。

已解决
感谢Marc B的编码小费。我意识到可能的问题,但完全忘了它。通过ftp再次将文件复制到LINUX机器后,再次检查我没有更改编码(通过编辑任何文件)后,照片显示出来。

+0

当outputtnig从DB的图像你有没有设置在photo.php头为图像的正确图像类型?即jpeg,png等。 – SW4

+0

是的,使用$ row ['MIMEtype']将标题设置为'image/jpeg'。 MIME类型作为照片表格中的属性存储。 – qlf00n

+0

正在使用同一浏览器是测试? – Ryre

回答

1

有些事情要检查:

  1. 检查数据库错误 - 你说光象场二进制数据,所以不太可能,但永远都不要假设一个数据库调用成功
  2. 检查早期文本输出,导致header()调用失败 - 它应该在某处登录。无论如何,在开发过程中打开display_errors/error_logging,这样您就不必在日志中搜索,找出发生了什么问题。
  3. 在浏览器中手动打开网址,看看会发生什么。也许有一些字符集翻译会导致图像数据被破坏(例如,您使用的是TEXT字段而不是BLOB)。
+0

'if(!mysql_error($ result)){}'足以确保数据库调用成功?感谢提示错误,我设置了额外的'error_reporting(E_ALL);'在脚本的开头,但没有出现错误。最后,编码有一些问题。我再次复制了文件,并且检查了编码是否相同。现在它可以工作。谢谢! – qlf00n

+0

'if($ result === false){die(mysql_error())}'是最简单的错误检查。但是,如果此脚本只能通过''标签加载,那么错误输出文本将被解释为损坏的图像,您可能想改为输出占位符图片。 –

+0

是不是'if($ result)'等于'if($ result === false)'? – qlf00n