【问题标题】:Link to file on local hard drive链接到本地​​硬盘上的文件
【发布时间】:2014-04-30 19:56:45
【问题描述】:

我正在尝试将本地 HDD 上的文件夹内容显示为 Web 浏览器中的链接。 这就是我获取文件夹内容的方式

$dir = scandir($path);
            foreach($dir as $token)
            {
                if(($token != ".") && ($token != ".."))
                {
                    if(is_dir($path.'/'.$token))
                    {
                        $folders[] = $token;
                    }
                    else
                    {
                        $files[] = $token;
                    }
                }
            }
            foreach($folders as $folder)
            {
                $newpath = $path.'/'.$folder;
                echo "<a href = tema2.php?cale=$newpath> [ $folder ] </a>" . "<br>";
            }
            foreach($files as $file)
            {
                $newpath = $path.'/'.$file;
                echo "<a href = file:///$newpath> $file </a>" . "<br>";
            }

一切正常,除了文件的链接在按下时什么都不做。我的网络浏览器中显示的链接是这样的:“file:///C:/folder/test.txt”。试过这个是 Firefox、Chrome 和 IE。

【问题讨论】:

标签: php html


【解决方案1】:

如果文件不在网络服务器文件夹的范围内,它将无法访问该文件来传递它。

您可以创建一个文件处理程序来传递文件:

所以改变echo "&lt;a href = file:///$newpath&gt; $file &lt;/a&gt;" . "&lt;br&gt;";

echo "&lt;a href = \"fileHandler.php?file=$file\"" . "&lt;br&gt;";

并创建 fileHandler.php 为:

<?php
    $file = $_GET['file'];
    header('content-type:application/'.end(explode('.',$file)));
    Header("Content-Disposition: attachment; filename=" . $file); //to set download filename
    exit(file_get_contents($file));
?>

或绕过网络服务器并直接链接到文件(这只适用于 LAN 或 VPN)

所以改变echo "&lt;a href = file:///$newpath&gt; $file &lt;/a&gt;" . "&lt;br&gt;";

echo "&lt;a href ='$_SERVER[HTTP_HOST]/$newpath/$file'&gt;$file&lt;/a&gt;&lt;br /&gt;"

【讨论】:

  • 我尝试了文件处理程序,但它不起作用。如果你说的是真的,那么为什么它会起作用,因为 filehandler.php 仍然无法访问 Web 服务器文件夹之外。
  • apache 不能像 apache 配置文件中定义的那样移动到其根目录之上(通常 /var/www/sites-available 在 *nix 系统上),但 php 可以(前提是它有权访问文件夹),这是文件处理程序的美妙之处,它允许您将私有文件和公共文件分开,同时仍然能够传递某些私有文件
  • 实际上它可以工作,但是以一种奇怪的方式。当我点击一个文件时,它会提示我下载 filehandler.php,其中包含文件的内容。
  • 这就是header('content-type:application/'.end(explode('.',$file))); 行的用途,它告诉php 提供文件,而不是在浏览器中显示其内容
  • 嗯,是的,但我不想下载一个 php 文件然后打开它......我明白代码试图做什么,但我不确定我得到了想要的结果
【解决方案2】:

这行不通

您不能链接 Apache 的 htdocs 文件夹之外的文件

2 个选项:

1) 将你需要的文件移动到 htdocs

2) 使用虚拟主机/DocumentRoot

http://httpd.apache.org/docs/current/en/urlmapping.html

Make XAMPP/Apache serve file outside of htdocs

【讨论】:

    【解决方案3】:

    我通过在 apache 文档文件夹中创建指向包含我希望共享的内容的任何文件夹的符号链接来规避这一点。所以说我想从“Z:/Media/”提供文件,我在“D:/Server/HTTP/”(我的 Apache 文档根文件夹)中创建一个名为“Media”的符号链接,然后我可以提供一个文件从那里,例如“/Media/Movies/Fargo.mp4”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-28
      • 2011-09-08
      • 2014-02-12
      相关资源
      最近更新 更多