例如,
如果用户正在访问我的服务器上的图像文件,是否可以同时执行另一个PHP文件?
我想记录访问过此图像文件的用户的ip,HTTP_USER_AGENT
和HTTP_ACCEPT_LANGUAGE
。困难的一点是如何在用户访问图像时执行(或可以说"触发"(该PHP记录文件。我知道我可以先将图像的内容读取到PHP,然后将其输出为图像并同时记录用户的信息,但是当图像文件非常大时,此方法可能会占用如此多的内存使用。出于这个原因,是否可以让用户直接访问图像文件,但也可以同时触发另一个PHP文件?
-
如果你只想记录
$remote_addr
,以及$http_user_agent
和$http_accept_language
,你根本不需要使用 PHP — 整个过程可以使用比combined
格式更精细的自定义日志格式来完成,无论是 nginx 还是 Apache 中。 -
此外,您还可以利用
ngx_http_addition_module
的功能在每个请求之前或之后执行子请求,您将在其中执行日志记录,并且不提供任何回报(例如不实际损坏图像(。 -
或者,您也可以将所有请求都转到PHP,然后使用
X-Accel-Redirect
请求的值,然后让nginx在没有PHP脚本参与的情况下提供图像,从而减轻内存使用问题。
参考文档:
-
- http://nginx.org/r/access_log
- http://nginx.org/r/log_format
-
- http://nginx.org/r/add_before_body
- http://nginx.org/r/add_after_body
-
- http://nginx.org/r/fastcgi_ignore_headers
- http://nginx.org/r/internal
你有 2 个解决方案
- 告诉 Apache 路由到你的索引.php(或其他什么(对于每个图像请求(将所有请求重写给你的脚本.php,处理并路由到正确的文件/控制器(示例:https://stackoverflow.com/a/9453207/4196542
- 不要给出真实的图像URL,并通过PHP控制器,如"/getImage.php?image=foo.png"。记录IP和所需的所有数据,然后提供图像。