【问题标题】:Can I embed a server-side action inside a file (mp3s, images etc)?我可以在文件(mp3、图像等)中嵌入服务器端操作吗?
【发布时间】:2012-09-21 13:14:36
【问题描述】:

我正在寻找一种向用户发送常规文件(mp3 或图片)的方法,并记录不通过 HTML/PHP 页面访问该文件的次数。

例如,用户将浏览器指向 bla.com/file.mp3 并开始下载它,而服务器端脚本将执行诸如将数据保存到数据库之类的操作。

知道我应该从哪里开始吗?

谢谢!

【问题讨论】:

  • 你可以解析日志文件。否则不,您应该在更新数据库中的计数器后使用提供内容的文件来拦截请求。
  • 我同意 meagar。如果您担心的是性能,那么您应该:1)使用执行日志记录的 PHP 脚本拦截请求,2)设置 X-Sendfile
  • 另一种方法是让网络服务器模块将请求记录到数据库中。不知道这样的东西是否已经存在。

标签: php ajax upload download mp3


【解决方案1】:

您将需要通过一个 php 脚本,您可以做的是将要跟踪的扩展(最好是在文件夹级别)重写为 php 脚本,然后由该脚本执行您需要的计算并将文件提供给用户.

例如:

如果你想跟踪 /downloads/ 文件夹,你可以在你的网络服务器上创建一个重写来重写一个 php 文件的所有或特定的扩展,我们将在这个例子中调用 proxy.php。

一个示例 uri 将是 proxy.php?file=file.mp3 proxy.php 脚本清理文件参数,检查用户是否有下载权限(如果适用),检查文件是否存在,将文件提供给客户端并在后端执行任何所需的操作,如数据库更新等。

【讨论】:

    【解决方案2】:

    您的意思是您不希望您的用户看到特定页面并打断他们的流程吗?如果这样做,您仍然可以通过以下步骤使用 PHP 页面。 (我不是最新的 PHP,所以它会是伪代码,但你会明白的)

    • 提供指向您文件的链接(例如)http://example.com/trackedDownloader.php?id=someUniqueIdentifer
    • 在 tracedDownloader.php 文件中,确定服务器上与唯一 ID 相关的真实位置(例如 12345 可以映射到 /uploadedFiles/AnExample.mp3)
    • 在输出中设置适当的内容类型标头。
    • 将请求记录到您的数据库中。
    • 直接将文件内容作为页面输出返回。

    【讨论】:

    • ZombieSheep 和@Jason Brumwell:我不是 100% 确定,但是要将内容直接作为输出发送,我需要使用 header() 函数,对吗?我认为在发送标头(以及文件)之前我无法在代码中做任何事情......谢谢
    【解决方案3】:

    您需要扫描日志文件。无论如何,您很可能希望将计数器存储在数据库中?

    使用 PHP 提供静态文件有一个很好的解决方案:

    https://tn123.org/mod_xsendfile/

    【讨论】:

      猜你喜欢
      • 2011-02-11
      • 2010-09-15
      • 1970-01-01
      • 1970-01-01
      • 2017-11-01
      • 1970-01-01
      • 2020-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多