2009-08-28 73 views
0

我有一个代码,可以对图像进行篡改并将其发送到浏览器。PHP创建图像文件,但只适用于本地开发,而不适用于远程服务器

但它不能正常工作......只有当我要求它将图像输出到文件而不是浏览器时。

我不认为问题是我的代码,因为这个问题只发生在真正的服务器上;在我的电脑里它的工作很完美。

代码:

$img = $_GET['img']; 

ini_set('allow_url_fopen', 'on'); 

$info = getimagesize($img); 
header('Content-type: '.image_type_to_mime_type($info[2])); 
Fotos::redimensiona($img, null, Fotos::MINIGAL_WIDTH, Fotos::MINIGAL_HEIGHT, false); 

照片:: redimensiona():

//[...] a whole bunch of code calculating dimensions, they just works 
// $funcImage is like 'imagejpeg'/'imagepng'/'imagegif', depends on file 
if ($arquivo) { 
    $funcImage($thumb, "$final.$ext"); 
    return "$final.$ext"; 
} 
else { 
    $funcImage($thumb); 
} 

记住:工作地方发展,但不是做远程Web服务器上。

[编辑]
如果我评论的header线,二进制代码印;并且如我所料,当我更改原始图像时,此代码会发生变化。
但随着header火狐显示我的网页的URL(如http://www.sabianoar.com.br/novosabia/inc/phpImg.php?img=awful_escaped_long_path.jpeg),如果我这样做CTRL+I它告诉我这是一个0x0大小的JPEG,像10kb。
歌剧显示我一个空的图像,因为它会怎么做,如果我放在了错误的src<img>,即

[EDIT2] EyeOfGnome说:“没有一个JPEG文件:始于0xef为0xBB”当我尝试保存并打开输出(通常将其保存到.jpeg文件中)。

+0

当“无法正常工作”时会发生什么?它错误吗?没有输出?破碎的图像? – NSSec 2009-08-28 05:10:08

+0

看看编辑。 =]我刚刚添加了这个信息... – igorsantos07 2009-08-28 05:10:54

回答

3

您的代码在开始时输出BOM。如果在<?php之前包含物料清单,请从远程Web服务器打开您的代码并检查(使用十六进制编辑器,例如xxd)。如果BOM不在您正在查看的文件中,则可能包含在文件中。

一些编辑器添加BOM和apache输出它。这可能会破坏你的图像。

+0

谢谢你很多\ o / – igorsantos07 2009-08-30 03:49:07

0

检查图像所在的图像/目录的权限。

+0

该文件夹是777和JPEG,666.两者都是可读的。我忘了说[我会编辑问题],但如果我评论'header'行,二进制代码将被打印。并且当我更改原始图像时,此代码会发生变化。 – igorsantos07 2009-08-28 05:06:04

+0

您是否尝试制作JPEG 777?我不知道它是否会起作用。我前段时间体验过这个怪癖。 – Randell 2009-08-28 05:35:26

+0

另外,请检查浏览器的HTML源代码。 – Randell 2009-08-28 05:36:11

0

这可能不是原因,但你为什么呼应Fotos::redimensional()的结果?像imagejpeg()等功能都会在输出图像后返回一个bool(不是图像数据),所以你最终会在图像的最后打印一个'1'。我只是测试了这个,但它似乎并没有打破JPEG图像。

+0

是的...这不会中断'因为它在我的电脑上工作。无论如何,我删除了回声。 = P,但并没有解决我的问题=( – igorsantos07 2009-08-28 10:55:12

0

您是否尝试过将本地计算机与服务器进行比较?比较phpinfo()的输出;他们是不同的平台吗?

相关问题