PHP中的文件树/查看器 - 文件不会打开,除非它们在基本目录中

时间:2014-08-12 16:03:34

标签: php jquery

我已经在这方面搜索了很多东西,我似乎无法找到解决问题的简单方法。

我在我们的网站上使用PHP File Tree,因为它非常漂亮,是我能找到的唯一简单的树视图。但是,我现在遇到的问题是,我实际可以打开的唯一文件必须是根级别。因此,如果它是我要打开的子文件夹中的文件,我会得到一个"未找到"错误,其中url类似于"〜/ users / blah / root / file.txt"而不是"〜/ users / blah / root / subfolder / file.txt"。

电话很简单:

echo php_file_tree(REALPATH."support");

和正在执行重要工作的功能部分(问题所在,基本上是)

        foreach( $file as $this_file ) {
        if( $this_file != "." && $this_file != ".." ) {
            if( is_dir("$directory/$this_file") ) {
                // Directory
                $php_file_tree .= "<li class=\"pft-directory\"><a href=\"#\">" . htmlspecialchars($this_file) . "</a>";
                $php_file_tree .= php_file_tree_dir("$directory/$this_file", $return_link ,$extensions, false);
                $php_file_tree .= "</li>";
            } else  {
                // File
                $link = $directory."/".$this_file;
                // Get extension (prepend 'ext-' to prevent invalid classes from extensions that begin with numbers)
                $ext = "ext-" . substr($this_file, strrpos($this_file, ".") + 1); 
                    $php_file_tree .= "<li class=\"pft-file " . strtolower($ext) . "\"><a href=".$this_file."\">" . htmlspecialchars($this_file) . "</a></li>";
                }
        }
    }

在原始代码中,$ link用于href;但是,我遇到了这个问题,因为它使用了我正在使用的暂存站点上不存在的路径的绝对路径。所以使用$ this_file,文件将打开,但我知道这是不正确的,因为else之前的if语句负责文件夹。但是,$ link确实包含子文件夹,因为它调用了所需的目录。

有没有办法组合这两个,基本上所以我可以将子文件夹作为文件名的一部分传递给href,这样它就能打开?以前有人有这样的问题吗?

整个设置需要是动态的,所以不需要硬编码路径。管理员可以根据需要删除和添加文件夹和文件。那里有大量的文件浏览器,但它们看起来并不像这个树视图那样简单,而且我是php和jQuery的绝对新手,所以有一半时间我不明白什么是继续但是,我得到了这个,但我不知道如何解决。

非常感谢任何帮助!

编辑:我唯一一次表现得正确的是当我在函数中设置url时;但是,这只能在我的本地机器上工作,因为我知道它的路径。服务器是不同的,我不知道如何找到它的路径!

1 个答案:

答案 0 :(得分:0)

您需要在所有文件路径操作中包含$directory。您的else条款中缺少它:

 $php_file_tree .= "..snip..."\"><a href=\"$directory/$this_file\">" ...snip...
                                           ^^^^^^^^^^^--missing

现在您正在构建树状列表,而对于像foo/bar/baz/file.txt这样的文件,您最终会生成

 <li><a href="file.txt">foo/bar/baz/file.txt</a>

点击该链接后,您将在与脚本本身相同的目录中查找file.txt,例如http://example.com/script.php将链接到http://example.com/file.txt,而不是您想要的http://example.com/foo/bar/baz/file.txt