【问题标题】:PHP file download with symlinks带符号链接的 PHP 文件下载
【发布时间】:2010-12-04 14:25:38
【问题描述】:

我有一堆 .tgz 文件可以通过它访问。符号链接。当我在指向符号链接的页面上单击href 时,它会下载一个相当奇怪的文件。下载的文件具有符号链接的名称,打开存档后,我得到(据我所知)一个二进制文件,它可能是也可能不是静态文件的内容。

我想做的是让 PHP 显示一个文件下载对话框,该对话框给出了由符号链接链接的文件,而不是实际的符号链接。这可能吗?

【问题讨论】:

    标签: php download symlink


    【解决方案1】:

    为了给你一个准确的答案,我需要了解更多关于你如何提供文件的信息。 为什么连php都牵扯进来?文件不是由网络服务器提供的吗?您是重定向到它还是从打印它的 php 脚本中将其读入内存?

    但我可以告诉你。

    在大多数情况下,PHP 确实将符号链接作为文件处理,并且不会无缝地提供链接后面的文件。

    有 php 函数 is_link() 来检查资源指针是否为链接, 有函数 readlink() 可以在链接后面提供文件,还有 linkinfo() 可以为您提供有关链接的信息。

    但很可能您需要明确允许 Apache 或您正在使用的任何服务器遵循符号链接,这些符号链接可以使用 apache 中的 Options FollowSymLinks 指令来实现。

    【讨论】:

    • 是的,Options FollowSymLinks 似乎很可疑
    • 谢谢乔。在传递了一些header() 参数后,我最终通过使用这一行来读取文件来解决这个问题:readfile(readlink("path/to/symlink"));
    • 我尝试使用 Apache 配置开关,但无济于事。
    • 所以它现在可以工作还是你还有问题?如果是这样,我可以设置您的 apache 日志级别以进行调试并将输出发送给我们...
    【解决方案2】:

    PHP 有 readlink,可让您获取它的目标/链接到的路径。
    但是,认为您的问题与 apache 重写或绝对路径(再次)有关

    PS :你的 apache mime 是否支持 tgz 扩展?

    参考:http://www.w3schools.com/media/media_mimeref.asp

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-16
      相关资源
      最近更新 更多