来自另一个目录的PHP glob函数

时间:2014-05-21 13:42:07

标签: php

我在public_html/site.com/pdf中有一些PDF文件,但我的索引文件位于public_html/site.com/

我想使用glob()函数迭代位于pdf/文件夹中的所有pdf文件。问题是我没有得到任何结果。

这是我尝试过的。

# public_html/index.php
<?php
foreach (glob("pdf/*.pdf") as $filename) {
    echo "$filename <br/>";
}
?> 

2 个答案:

答案 0 :(得分:3)

或者,如果要以递归方式搜索公用文件夹,可以使用RecursiveDirectoryIterator来实现此目的:请考虑以下示例:

假设你有这个目录结构:

/var/
  /www/
    /test/
      /images/
         image.png
         /files/
           /files2/
             pdf.pdf <-- searching for some pdf files, happens to be here

<?php

$filetype_to_search = 'pdf';
$root_path = '/var/www/test'; // your doc root (or maybe C:/xampp/htdocs/) :p

foreach ($iterator = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($root_path, 
        RecursiveDirectoryIterator::SKIP_DOTS),
    RecursiveIteratorIterator::SELF_FIRST) as $value) {

    if($value->getExtension() == $filetype_to_search) {
        echo $value->getPathname() . "<br/>";
    }   
}

// ouput should be /var/www/test/images/files/files2/pdf.pdf

?>

答案 1 :(得分:2)

我的建议?只需将您的完整路径设置为变量&amp;在这样的情况下使用它。

通常,您实际上不能相信用于使路径可靠的自动方法由于各种原因。这就是我决定明确设置基本路径as I explain here的原因。我假设您使用的是/var/www/作为根的标准Linux设置。所以在你的情况下你会设置:

$BASE_PATH = '/var/www/public_html/site.com/';

然后你的最终代码将是这样的:

$BASE_PATH = '/var/www/public_html/site.com/'

foreach (glob($BASE_PATH . "pdf/*.pdf") as $filename) {
  echo "$filename <br/>";
}