从php

时间:2016-03-14 13:54:10

标签: php file

我正在尝试打开目录,只读取.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>";    
                        }
                    }
                }
            }

2 个答案:

答案 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
    }
}