是否可以在用户访问另一个文件的那一刻触发(执行)php文件?



例如,
如果用户正在访问我的服务器上的图像文件,是否可以同时执行另一个PHP文件?

我想记录访问过此图像文件的用户的ip,HTTP_USER_AGENTHTTP_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和所需的所有数据,然后提供图像。

最新更新