0

我只是在尝试在一个目录中显示所有文件,然后用 fgets 在它们旁边显示一些信息。我似乎无法让它工作。我现在有点讨厌 php,但我基本上希望它显示一个 tr,每个 tr 有两个 td。一个带有文件名的 td,另一个带有“描述”的 td,这只是我放在文件第一部分的一些信息。

<table>
<?php
if ($handle = opendir('desktop/')) {
while (false !== ($file = readdir($handle))) {
    if ($file != "." && $file != "..") {

      $string = "$file";     


$searchArray = array("_", ".php");
$replaceArray = array("", "");
$string = str_replace($searchArray,$replaceArray,$string);
$handle = @fopen("desktop/$file", "r");
if ($handle) {
while (($buffer = fgets($handle, 4096)) !== false) {
    echo $buffer;
}
if (!feof($handle)) {
    echo "Error: unexpected fgets() fail\n";
}
fclose($handle);
}
echo "<tr><td><a href=desktop/$file>$string\n</a></td><td>$buffer</td></tr>"; 
    }
}
closedir($handle);
}
?>
</table>
4

1 回答 1

0

您重新定义了导致您的问题的“$handle”。

$handle 最初是保存“目录”资源的变量。然后,您重新使用它来保存文件资源。然后当您返回目录资源以获取下一个文件的名称时, $handle 不再是目录资源,而是一个文件 - 所以问题出现了。

调用第一个“$dirHandle”和第二个“$fileHandle”,因为这会让你更清楚?


编辑:如何只获取第一行(根据评论中的要求):

if ($handle) { 
    if (($buffer = fgets($handle, 4096)) !== false) { 
        echo "<tr><td><a href=desktop/$file>$string\n</a></td><td>$buffer</td></tr>";  
    }
} 

(注意:您可能还想使用 htmlspecialchars() 使其更安全)

于 2012-07-18T02:46:51.703 回答