显示1x1 GIF(跟踪像素,网络信标)的最有效方式

Yah*_*hel 20 javascript php performance analytics image

我正在构建一个基本的分析服务,理论上基于Google Analytics的工作方式,但我没有请求实际图像,而是将图像请求路由到接受数据然后输出图像的脚本.由于浏览器将在每次加载时请求此图像,因此每毫秒都会计算.

我正在寻找一种文件从PHP脚本输出gif文件的最有效方法.到目前为止,我已经建立了3种主要方法.

我是否有更有效的方法从PHP脚本中输出1x1 GIF文件?如果没有,哪些是最有效和可扩展的?

三种识别方法

PHP图像构建库

$im = imagecreatetruecolor(1, 1);
imagefilledrectangle($im, 0, 0, 0, 0, 0xFb6b6F);
header('Content-Type: image/gif');
imagegif($im);
imagedestroy($im);
Run Code Online (Sandbox Code Playgroud)

file_get_contents 关闭服务器的图像并输出它

$im = file_get_contents('raw.gif'); 
header('Content-Type: image/gif'); 
echo $im; 
Run Code Online (Sandbox Code Playgroud)

base64_decode 图片

header('Content-Type: image/gif');
echo base64_decode("R0lGODdhAQABAIAAAPxqbAAAACwAAAAAAQABAAACAkQBADs=");
Run Code Online (Sandbox Code Playgroud)

(我的直觉是base64会是最快的,但我不知道该函数的资源密集程度如何;而且file_get_contents可能扩展得不太好,因为它增加了另一个文件系统操作.)

作为参考,我正在使用的GIF在这里:http://i.stack.imgur.com/LQ1CR.gif

编辑

因此,我提供此图像的原因是我的分析库构建了一个查询字符串并将其附加到此图像请求.我将请求路由到处理数据并响应图像的PHP脚本,而不是解析日志,这样最终用户的浏览器就不会挂起或抛出错误.我的问题是,如何在脚本的范围内最好地服务于该图像?

goa*_*oat 39

也许

header('Content-Type: image/gif');
//equivalent to readfile('pixel.gif')
echo "\x47\x49\x46\x38\x37\x61\x1\x0\x1\x0\x80\x0\x0\xfc\x6a\x6c\x0\x0\x0\x2c\x0\x0\x0\x0\x1\x0\x1\x0\x0\x2\x2\x44\x1\x0\x3b";
Run Code Online (Sandbox Code Playgroud)

这将输出与1x1透明gif的二进制文件内容相同的二进制字符串.我声称这是有效的,因为它不会做任何缓慢的IO,如读取文件,也不会调用任何函数.

如果你想制作你自己的上述十六进制字符串版本,也许你可以改变颜色,你可以使用它来生成echo语句的php代码.

printf('echo "%s";', preg_replace_callback('/./s', function ($matches) {
    return '\x' . dechex(ord($matches[0]));
}, file_get_contents('https://upload.wikimedia.org/wikipedia/en/d/d0/Clear.gif')));
Run Code Online (Sandbox Code Playgroud)