我希望在通过脚本查看图像后获得查看器的HTTP_USER_AGENT
。
这是目录
/www
|-- /other.org
|-- /example.com
|-- /sub
|-- .htaccess
|-- agentlog.php
|-- /i
|-- photo.png
我已将图像文件和脚本分隔到不同的文件夹中。所有文件的根目录都在域的子目录中。所以http://example.com/sub
,图片存储在http://example.com/sub/i
。 .htaccess
文件会将所有图像重定向到PHP文件,该文件获取HTTP_USER_AGENT
并将其存储在数据库中,并通过子域显示图像,该子域不会被.htaccess
重定向。
更详细地说,用户在浏览器中输入http://example.com/sub/photo.png
,对于观看者来说,它看起来就像是图像,观众不会注意到任何其他内容或任何重定向。但是,当用户输入时会发生什么
.htaccess
将检查photo.png
中是否存在http://example.com/sub/i/photo.png
,如果图片存在,则将请求重定向到agentlog.php
处的http://example.com/sub/agentlog.php
文件,然后agentlog.php
会记录并保存到数据库,并显示photo.png
到http://i.example.com/photo.png
,其中http://i.example.com
指向/www/sub/i
。
以下是.htaccess
文件
RewriteEngine On
RewriteCond %{HTTP_HOST} !^i\. [NC]
RewriteCond %{DOCUMENT_ROOT}/i/$1 -f
RewriteRule ^(.+\.(?:jpe?g|png|gif))$ agentlog.php [NC,L]
这是没有sql代码的agentlog.php
文件
<?php
$path = $_SERVER['REQUEST_URI'];
$agent = $_SERVER['HTTP_USER_AGENT'];
$ext = pathinfo($_SERVER['REQUEST_URI'], PATHINFO_EXTENSION);
$filename = basename($path);
header("Content-Type: image/$ext");
$img = "http://i.example.com/$filename";
readfile($img);
除了图像实际上没有显示自己,.htaccess
重定向外,一切正常。它显示
�PNG IHDR�^���� �IDATx��ݯ��u���............
而不是实际的图像本身。
如果我直接访问图像,它工作正常,所以我认为问题出在.htaccess
但我不知道还有什么其他规则可以使这个工作。
如果需要其他更多信息,我将很乐意加入。我该如何解决这个问题?或者有什么方法可以做到这一点?我已经放入了内容标题,但不确定它为什么不起作用。
答案 0 :(得分:2)
如果您使用结束标记?>
检查,之后是否有任何空格或换行符。省略结束标记被认为是一种很好的做法。
<强>编辑强>
试试这个: -
$img = "http://i.example.com/$filename";
header("Content-Type: image/$ext");
header('Content-Length: ' . filesize($img));
ob_clean(); // Clean (erase) the output buffer.
flush(); // Flush system output buffer.
readfile($img); // Output the file to browser.
exit; // Stop execution of the script
答案 1 :(得分:0)
一切都很好,除了图像实际上没有显示, .htaccess重定向。它显示
�PNG IHDR�^���� �IDATx��ݯ��u���............
这是标题的错误(mime类型错误) - text / plain而不是image /...
无论如何,你的.htaccess在我的环境中不起作用 它应该是这样的:
RewriteEngine On
RewriteCond %{REQUEST_URI} (.+\.(?:jpe?g|png|gif))
RewriteRule ^(.+\.(?:jpe?g|png|gif))$ agentlog.php [NC,L]
PHP代码可以是这样的
<?php
$path = $_SERVER['REQUEST_URI'];
$agent = $_SERVER['HTTP_USER_AGENT'];
$ext = pathinfo($_SERVER['REQUEST_URI'], PATHINFO_EXTENSION);
$filename = basename($path);
header("Content-Type: image/".$ext);
readfile($filename);
?>