【发布时间】:2010-12-04 14:25:38
【问题描述】:
我有一堆 .tgz 文件可以通过它访问。符号链接。当我在指向符号链接的页面上单击href 时,它会下载一个相当奇怪的文件。下载的文件具有符号链接的名称,打开存档后,我得到(据我所知)一个二进制文件,它可能是也可能不是静态文件的内容。
我想做的是让 PHP 显示一个文件下载对话框,该对话框给出了由符号链接链接的文件,而不是实际的符号链接。这可能吗?
【问题讨论】:
我有一堆 .tgz 文件可以通过它访问。符号链接。当我在指向符号链接的页面上单击href 时,它会下载一个相当奇怪的文件。下载的文件具有符号链接的名称,打开存档后,我得到(据我所知)一个二进制文件,它可能是也可能不是静态文件的内容。
我想做的是让 PHP 显示一个文件下载对话框,该对话框给出了由符号链接链接的文件,而不是实际的符号链接。这可能吗?
【问题讨论】:
为了给你一个准确的答案,我需要了解更多关于你如何提供文件的信息。 为什么连php都牵扯进来?文件不是由网络服务器提供的吗?您是重定向到它还是从打印它的 php 脚本中将其读入内存?
但我可以告诉你。
在大多数情况下,PHP 确实将符号链接作为文件处理,并且不会无缝地提供链接后面的文件。
有 php 函数 is_link() 来检查资源指针是否为链接, 有函数 readlink() 可以在链接后面提供文件,还有 linkinfo() 可以为您提供有关链接的信息。
但很可能您需要明确允许 Apache 或您正在使用的任何服务器遵循符号链接,这些符号链接可以使用 apache 中的 Options FollowSymLinks 指令来实现。
【讨论】:
header() 参数后,我最终通过使用这一行来读取文件来解决这个问题:readfile(readlink("path/to/symlink"));
PHP 有 readlink,可让您获取它的目标/链接到的路径。
但是,认为您的问题与 apache 重写或绝对路径(再次)有关
PS :你的 apache mime 是否支持 tgz 扩展?
【讨论】: