是否有可能在用户访问另一个文件时触发(执行)php文件?

时间:2017-07-29 19:32:42

标签: php .htaccess

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

我想记录访问此图片文件的用户的IP,<ul class="nav nav-tabs"> <?php $qu= "sql query for generating all tabs with some condition"; $rr=mysqli_query($conn,$qu); $num = 0; while($tab1 =mysqli_fetch_array($rr)){ ?> <li <?php if($num == 0){ ?> class="active" <?php }else{?> class="" <?php }?>><a data-toggle="tab" href="#<?php echo $tab1['field_name']; ?>"><?php echo $tab1['field_name'];?></a></li> <?php $num++; } ?> </ul> <div class="tab-content"> <?php $qu= "sql query for generating all tabs with some condition"; //again i run same query of above $rr=mysqli_query($conn,$qu); $num = 0; while($tab1 =mysqli_fetch_array($rr)) { ?> <div id="<?php echo $tab1['field_name']; ?>" <?php if($num == 0){ ?> class="tab-pane fade in active" <?php }else{?> class="tab-pane fade in" <?php }?> > <table> <thead> <tr> all rows </tr> </thead> <?php $qu1= "sql query for generating result"; $resout = mysqli_query($conn, $qu1); if(mysqli_num_rows($resout) > 0){ while($row2 =mysqli_fetch_array($resout)){ ?> <tbody> <tr> <td><?php echo $row2['field_name'];?></td> </tr> </tbody> <?php } } else { echo 'No result Found'; } ?> </table> </div> <?php $num++; } ?> <!-- End of the While Loop --> </div> </div> HTTP_USER_AGENT。难点在于如何在用户访问图像时执行(或可能说“触发”)PHP记录文件。我知道我可以首先将图像的内容读入PHP,然后将其作为图像输出并同时记录用户的信息,但是当图像文件的大小非常大时,这种方法可能会占用大量内存。 。因此,是否可以让用户直接访问图像文件,还可以同时触发另一个PHP文件?

2 个答案:

答案 0 :(得分:0)

你有2个解决方案

  • 告诉apache为每个图像请求路由到index.php(或其他)(将所有请求重写为yourscript.php,处理并路由到正确的文件/控制器)例如:https://stackoverflow.com/a/9453207/4196542
  • 不提供真实的图片网址,并通过像“/getImage.php?image=foo.png”这样的php控制器。记录ip和您想要的所有数据然后提供图像。

答案 1 :(得分:0)

  • 如果您只想记录$remote_addr,以及$http_user_agent$http_accept_language,您根本不需要使用PHP - 整个过程可以在combined以及nginx中,使用比Apache更精细的自定义日志格式来完成。

  • 此外,您还可以利用ngx_http_addition_module的功能在每个其他请求之前或之后执行子请求,您可以在其中进行日志记录,并且不提供任何回报(例如不会实际损坏)图片)。

  • 或者,您也可以将所有请求转到PHP,然后将X-Accel-Redirect与请求的值一起使用,随后让nginx在不涉及您的php脚本的情况下提供图像,从而减轻您的需求记忆使用问题。

参考文档: