【问题标题】:PHP scandir and relative pathPHP scandir 和相对路径
【发布时间】:2026-02-20 04:45:01
【问题描述】:

我已经尝试了我在此处阅读的所有解决方案,但似乎无法使其正常工作。

我正在尝试在此文件中调用 scandir: https://www.example.com/cms/uploader/index.php

列出此文件夹中的所有文件和目录: https://www.example.com/uploads/

我不想硬编码 example.com 部分,因为这会因站点而异。我尝试了很多组合:dirname(FILE)、DIR、$_SERVER['SERVER_NAME'] 和 $_SERVER['REQUEST_URI'] 等。我要么得到“无法打开目录,未在...中实现”错误或根本不显示任何内容。这是我正在使用的代码:

    $directory = __DIR__ . '/../../uploads';
    $filelist = "";
    $dircont = scandir($directory); 
    foreach($dircont AS $item) 
    if(is_file($item) && $item[0]!='.')
    $filelist .= '<a href="'.$item.'">'.$item.'</a>'."<br />\n";
    echo $filelist;

这样做的正确方法是什么?

【问题讨论】:

  • 只需使用 $_SERVER['DOCUMENT_ROOT'], $directory = $_SERVER['DOCUMENT_ROOT'] 。 '/上传';
  • 试过了,但是没有输出,也没有错误日志。问题可能出在其他地方。我是否需要以某种方式在此处添加目录: if(is_file($item) && $item[0]!='.') ?

标签: php scandir


【解决方案1】:

$directory 变量设置错误。如果你想向上 2 个目录使用 dirname(),如下所示:

$directory = dirname(__DIR__,2) . '/uploads';
$filelist = "";
$dircont = scandir($directory);

foreach($dircont AS $item) {
    if(is_file($item) && $item[0]!='.')
        $filelist .= '<a href="'.$item.'">'.$item.'</a>'."<br />\n";
}


echo $filelist;

您可以阅读更多关于scandir 的信息,如果启用了allow_url_fopen,则有一节介绍如何将其与url 一起使用,但这主要是在本地/开发环境中。

【讨论】:

  • 当我回显 $directory 时,路径看起来正确,但没有列出任何文件。我想知道我的if语句是否有问题?编辑:是的,当我删除列出文件的 if 语句时,我想我可以从这里弄清楚,谢谢!
【解决方案2】:

对不起,我不能写评论来问你一个问题(低声誉)。

据我从您的解释中了解到,您希望添加可能的文件夹名称,以使您的探测以某种方式自动工作。

如果是,那么我会做这样的一段代码;

$website = 'http://localhost/';
$folders = array('uploads','files', 'uploads/files');

$filelist = "";

foreach ($folders as $kinky) 
$dircont = scandir($website.$kinky);
foreach ($dircont AS $item)
    if (is_file($item) && $item[0] != '.')
        $filelist .= '<a href="' . $item . '">' . $item . '</a>' . "<br />\n";

echo $filelist;

希望对你有帮助:)

【讨论】:

  • 我只需要这个目录的内容:example.com/uploads。我试过你的代码,但它不起作用。我收到以下错误:[09-Feb-2019 20:00:36 UTC] PHP Warning: scandir(localhost/uploads): failed to open dir: not implemented in /home/public_html/cms/uploader/index.php on第 123 行 [2019 年 2 月 9 日 20:00:36 UTC] PHP 警告:scandir(): (errno 2):第 123 行的 /home/public_html/cms/uploader/index.php 中没有此类文件或目录 [09 -Feb-2019 20:00:36 UTC] PHP 警告:在第 124 行的 /home/public_html/cms/uploader/index.php 中为 foreach() 提供的参数无效