0

有没有办法在加载图像时运行代码?

例如,如果我的图像托管在 www.mydomain.com/image.png 并且如果有人执行此链接图像将显示为图像文件。但是,当有人试图查看图像时,我可以运行一组代码吗?

喜欢。

当我打开运行 www.mydomain.com/image.png 它应该执行类似

<?php
  mail("myemail@mydomain.com", "image opened", "image opened by".$Server['addr']);
?>

我发现在线提供了多种此类服务,但是当图像文件试图执行时,我无法弄清楚如何执行代码文件。

谁能给我一个简短的想法,这将如何锻炼?我可以自己编码

4

2 回答 2

0

浏览了一下之后,看起来处理这个问题的最好方法可能是使用mod_rewrite,如果它可用的话。

设置规则,例如

# Enable Rewriting  
RewriteEngine on  

# Rewrite user URLs  
#   Input:  images/image.png/  
#   Output: images.php?f=image.png  
RewriteRule ^images/(\w+\.png)/?$ images.php?f=$1  

然后,使用php 文档中给出的示例来提供图像:

<?php

$filename = $_GET['f'];

if (!file_exists($filename))
{
    header('HTTP/1.0 404 Not Found');
    include('image404.php'); //or something similar if you want a nice error message
    exit();
}
else
{
    mail("myemail@mydomain.com", "image opened", "image opened by".$Server['addr']);

    $fp = fopen($_GET['f'], 'rb');

    header("Content-Type: image/png");
    header("Content-Length: " . filesize($name));

    fpassthru($fp);
}

请注意,它需要您从子目录(如 )提供文件www.mydomain.com/images/image.png,但它避免了将所有 png 文件设置为由 php.ini 处理的问题。

您可能需要考虑是否需要额外的清理:例如,您可能想要删除斜杠和..文件名 - mod_rewrite 如何处理它们需要检查。

于 2013-08-12T15:13:19.537 回答
0

是的,使用图像元素的onload 事件

客户端:

<img src="..." onload="JavaScript_Code">

或者

img = document.getElementById("Image_Id")
img.onload = function(){SomeJavaScriptCode};

服务器端(index.php):

<?php
// do some works with the $_Get["path"]
header('Content-Type: image/png');
readfile($_Get["path"]);
exit;

并且图像 url 将是 *index.php?path=Path_to_png_image_file* 或者您可以执行 URL_Rewriting 以删除索引?网址的一部分

于 2013-08-12T14:31:11.867 回答