我正在尝试打开目录,只读取.txt格式的文件,然后显示内容。我已将其编码,但它没有做任何事情,尽管它也没有记录任何错误。有什么帮助吗?
$dir = 'information';
If (is_dir($dir)) {
$handle = opendir($dir);
} else {
echo "<p>There is a system error</p>";
}
$entry=array();
while(false!==($file = readdir($handle))) {
if ( !strcmp($file, ".") || !strcmp($file, "..")) {
}
else if(substr($file, -4) == '.txt') {
$entry[] = $file;
}
foreach ($entry as $txt_file) {
if(is_file($txt_file) && is_writable($txt_file)) {
$file_open = fopen($txt_file, 'r');
while (!feof($file_open)) {
echo"<p>$file_open</p>";
}
}
}
}
答案 0 :(得分:0)
帮助非常简单。
相反
$dir = 'information';
If (is_dir($dir)) {
$handle = opendir($dir);
} else {
echo "<p>There is a system error</p>";
}
写(我很抱歉重新格式化新行)
$dir = 'information';
if(is_dir($dir))
{
$handle = opendir($dir);
}
else
{
echo "<p>There is a system error</p>";
}
因为if
必须只写小包,因此不 If
。
第二部分重写为(再次,您可以使用自己的新行格式)
$entry=array();
$file = readdir($handle);
while($file !== false)
{
if(!strcmp($file, ".") || !strcmp($file, ".."))
{
}
elseif(substr($file, -4) == '.txt')
{
$entry[] = $file;
}
foreach ($entry as $txt_file)
{
if(is_file($txt_file) && is_writable($txt_file))
{
$file_open = fopen($txt_file, 'r');
while(!feof($file_open))
{
echo"<p>$file_open</p>";
}
}
}
}
因为PHP 有 elseif
,不是 else if
就像JavaScript一样。另外,我将$file = readdir($handle)
分隔为可能的错误来源。
代码部分
if(!strcmp($file, ".") || !strcmp($file, ".."))
{
}
elseif(substr($file, -4) == '.txt')
{
$entry[] = $file;
}
应该只缩短为
if(substr($file, -4) == '.txt')
{
$entry[] = $file;
}
因为如果部分为空,则不是必需的。
这就是我现在可以为你做的一切。
答案 1 :(得分:0)
不要使用readdir
来迭代目录,而是考虑使用glob()
。它允许您指定模式,并返回与之匹配的所有文件。
其次,你的while循环有一个错误:你有条件地将文件名添加到文件列表中,但是你总是使用foreach循环打印每个文件名。在第一个循环中,它将打印第一个文件。在第二个循环中,它将打印第一个和第二个文件等。您应该将while和foreach循环分开以解决该问题(即将它们排除在外)。
使用glob,修改后的代码如下所示:
$file_list = glob('/path/to/files/*.txt');
foreach ($file_list as $file_name) {
if (is_file($file_name) && is_writable($file_name)) {
// Do something with $file_name
}
}