我正在使用PHP设置一个简单的像素跟踪脚本,以下技术上有效,但是当我在Safari中查看检查器时,我得到以下警告(1by1.gif是42B gif):
esource解释为文档但是 使用MIME类型image / gif进行传输。
header("Content-type: image/gif");
header("Content-Length: 42");
echo file_get_contents("/path/to/1by1.gif");
// do tracking stuff below here
我查看了其他跟踪像素,它们都在检查器中显示,就好像它们是实际图像一样,即使扩展名为.php也是如此。任何想法如何解决这个警告?
修改
我尝试了以下操作,并收到同样的警告:
header("Content-type: image/gif");
$img = imagecreatefromstring(file_get_contents("/path/to/1by1.gif"));
imagegif($img);
答案 0 :(得分:1)
您可以在HTML源代码中编写1x1.gif
(或其他一些名称),然后让Apache实际提供PHP脚本。您可以使用.htaccess
执行此操作,其中包含以下内容:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^1x1\.gif$ tracking_script.php [NC,L]
这样,Safari就会看到gif
扩展名,不会抱怨。
答案 1 :(得分:0)
我很困惑。函数file_get_contents()用于从文本文件中获取内容。你打算在这里打算什么?该函数将内容返回为字符串或false。你的echo语句实际上传递的结果是正确解释为文档而不是gif。
更新:我花了一些时间来重现这个并看到警告。回显file_get_contents()确实在浏览器中显示了gif,简单的include()也显示了警告。这个警告会给你带来麻烦吗?或者这只是为了一场选美比赛?我只能推测Safari的Inspector有点挑剔。 Chrome中的相同工具不会显示警告。
答案 2 :(得分:0)
这很有趣。如果我删除内容长度并只使用以下内容,它似乎完美地工作。任何人都知道为什么会这样吗?
header("Content-type: image/gif");
echo file_get_contents("/path/to/1by1.gif");
// do tracking stuff below here
答案 3 :(得分:0)
$img = imagecreatefromstring(file_get_contents("/path/to/1by1.gif"));
imagegif($img);
此代码
这里可能出现很多问题。例如,将图像写回可能不会产生相同的精确字节流,可能更多,也许更少。这可能会使您的Content-Length
标头无效,并且当您对此类内容撒谎时,浏览器不会喜欢它。或者也许在其中一行中有一个通知或警告,它将作为GIF数据之前的内容发出。这肯定看起来像<文档“而不是Webkit的图像数据。
通过file_get_contents
/ include
/ echo
投放文件消除了通过GD过滤的步骤。如果代码在没有该步骤的情况下正常工作,那么错误就在那里。