如何使用php扫描目录以建立到pdfs的链接?

时间:2009-09-01 18:26:55

标签: php file

我是PHP的新手,但我想做的是为我的一些公司的工作提供动态的目录。

因此,如果我将作业描述的所有pdf放在名为../jobops的文件夹中,并且php文件位于根目录中,我需要做什么。

4 个答案:

答案 0 :(得分:5)

<?php
  $directory = "/jobops";
  $contents = scandir($directory);
    if ($contents) {
       foreach($contents as $key => $value) {
             if ($value == "." || $value == "..") {
                unset($key);
             }
       }
    }
        echo "<ul>";
    foreach($contents as $k => $v) {
      echo "<li><a href=\"$directory/" . $v . "\">link text</a></li>";
    }
        echo "</ul>";

?>

应该有效。获取目录,扫描它,将所有文件名映射到数组$contents删除相对URL(“。”和“..”),然后将它们回显。

请记住,foreach相对较贵;所以您可能希望简单地取消设置$contents[0]$contents[1]

<小时/> 编辑以回应以下(来自OP):

  

警告:   SCANDIR(www.markonsolutions.com/jobops)   [function.scandir]:无法打开   dir:没有这样的文件或目录   /home/content/t/i/m/timhish/html/test.php   第5行警告:scandir()   [function.scandir] :(错误2):没有这样的   文件或目录   /home/content/t/i/m/timhish/h/i/s/h/html/test.php   第5行警告:参数无效   为foreach()提供的   /home/content/t/i/m/timhish/html/test.php   在第15行

     

我从“/ jobops”改变了ti   认为这是一个相对目录   事情,但显然不是这样。也   我不知道是什么   / home / content .......事情是,但我   目前托管与爸爸也许   这就是他们如何存储东西?

$directory变量与调用脚本的位置有关。在我的情况下,这是从根文件夹运行所以它应该,对我来说,$directory = "jobops"假设文件夹和脚本存储在同一个地方。在不知道服务器的目录结构的情况下,我无法真正帮助您,但我建议排除scandir()函数的问题。

要执行此操作,请在脚本所在的目录中创建一个文件夹,调用至少一个图像(以便以下if()不会取消整个数组)并查看是否这样可行。如果它 那么你就找不到文件夹的相对路径了。如果那么我就会陷入困境。

答案 1 :(得分:3)

SPL(PHP5)为目录遍历提供了一个很好的接口:

// whitelist of valid file types (extension => display name)
$valid = array(
    'pdf' => 'PDF',
    'doc' => 'Word'
);

$files = array();    

$dir = new DirectoryIterator($directory_path);

foreach($dir as $file)
{
    // filter out directories
    if($file->isDot() || !$file->isFile()) continue;

    // Use pathinfo to get the file extension
    $info = pathinfo($file->getPathname());

    // Check there is an extension and it is in the whitelist
    if(isset($info['extension']) && isset($valid[$info['extension']])) 
    {
        $files[] = array(
            'filename' => $file->getFilename(),
            'size' => $file->getSize(),
            'type' => $valid[$info['extension']], // 'PDF' or 'Word'
            'created' => date('Y-m-d H:i:s', $file->getCTime())
        );
    }
}

答案 2 :(得分:2)

查看fnmatch()glob()个功能。

(我希望将其发布为评论,但链接太长了)

答案 3 :(得分:0)

<?php
  // open this directory 
$myDirectory = opendir(".");

// get each entry
while($entryName = readdir($myDirectory)) {
    $dirArray[] = $entryName;
}

// close directory
closedir($myDirectory);

//  count elements in array
$indexCount = count($dirArray);
Print ("$indexCount files<br>\n");

// sort 'em
sort($dirArray);

// print 'em
print("<TABLE border=1 cellpadding=5 cellspacing=0 class=whitelinks>\n");
print("<TR><TH>Filename</TH><th>Filetype</th><th>Filesize</th></TR>\n");
// loop through the array of files and print them all
for($index=0; $index < $indexCount; $index++) {
        if (substr("$dirArray[$index]", 0, 1) != "."){ // don't list hidden files
        print("<TR><TD><a href=\"$dirArray[$index]\">$dirArray[$index]</a></td>");
        print("<td>");
        print(filetype($dirArray[$index]));
        print("</td>");
        print("<td>");
        print(filesize($dirArray[$index]));
        print("</td>");
        print("</TR>\n");
    }
}
print("</TABLE>\n");


?>

似乎工作正常,但我需要调整它只搜索子目录,只有* .pdf文件