来自文本文件

时间:2017-08-19 13:05:40

标签: php foreach

我遇到了来自文本文件的foreach循环问题。我有一个目录树,这些目录的列表在一个文本文件中,我想根据列表检查树,并在缺少任何目录时回显。

我遇到的问题是我无法查看新行的帐户,因此如果文件有1行,则返回它存在,但如果文件有两行它返回第一个作为缺失,第二个作为现有,即使它在文件中两次相同的条目 - 请参阅下面的代码以澄清

<?php
  $logFile = 'LogFile.txt';
  $rootDirectory = 'C:\testdir\\';
  $verificationFile = 'verificationfiles/directoryverification.txt';
  $verificationContents = file($verificationFile);
  $fh = fopen($logFile,'a') or die("can't open file");
  $new_line = "\r\n";

 foreach($verificationContents as $directoryName) {
    $subDirectory = $rootDirectory.$directoryName;
    echo "$subDirectory <br />";


    if (file_exists($subDirectory)) {
     echo "$subDirectory Exists <br />";
    } else {
    echo "$subDirectory Does Not Exist <br />";
     $libverificationfailed = 'failed';
    fwrite($fh, "$subDirectory Not Found");
    fwrite($fh, $new_line);
    }


 }
?>

因此,作为示例,根目录有2个子目录,subdir1和subdir2。

directoryverification.txt

subdir1  
subdir2

和页面回声

  

C:\ TESTDIR \ subdir1
  C:\ testdir \ subdir1不存在   C:\ TESTDIR \ subdir2
  C:\ testdir \ subdir2存在

因此,如果文本文件中的数据后面有一个新行,则代码无法正确读取。我希望这是有道理的,有人可以提供帮助。

的问候,

2 个答案:

答案 0 :(得分:1)

谢谢rickdenhaan,

$subDirectory = rtrim($subDirectory);

在if语句排序之前。

答案 1 :(得分:0)

试试这个

    $rootDirectory = 'C:\testdir\\';
    $verificationFile = 'verificationfiles/directoryverification.txt';
    $file = new \SplFileObject($verificationFile, 'r');
    $file->setFlags(\SplFileObject::SKIP_EMPTY);

    while ( $dirname = $file->fgets() )
    {
        $dirname = $rootDirectory . trim($dirname);

        if ( !file_exists($dirname) )
        {
            echo sprintf("direcrory %s does not exist\n", $dirname); 
            continue;
        }

        echo sprintf("direcrory %s exists\n", $dirname); 
    }