我已经在这方面搜索了很多东西,我似乎无法找到解决问题的简单方法。
我在我们的网站上使用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时;但是,这只能在我的本地机器上工作,因为我知道它的路径。服务器是不同的,我不知道如何找到它的路径!
答案 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
。