2017-08-19 20 views
1

テキストファイルのforeachループに問題があります。私はディレクトリツリーを持っていて、これらのディレクトリのリストはテキストファイルにあります。ツリーをリストと照合して、ディレクトリがない場合はエコーします。PHP foreachループ(テキストファイルから)

問題は、私は新しい行のアカウントを見ることができないので、ファイルに1行があればそれが存在すると返しますが、ファイルに2行があればまず、それは同じエントリがファイルに二回だ場合でも、不足していると、既存のように二通り - 明確

ので
<?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存在する

テキストファイル内のデータの後に改行があると、コードが正しく読み込まれません。私はこれが意味を成し、誰かが助けることを望んでいる。

に関して、

+0

から:**注:** FILE_IGNORE_NEW_LINES **を使用していない限り、結果として得られる配列の各行に行末が含まれます。行の終わりが表示されないようにするには、[rtrim()](http://php.net/rtrim)を使用する必要があります。 – rickdenhaan

+0

ありがとうございましたrickdenhaan、 $ subDirectory = rtrim($ subDirectory); if文の直前にソートされています。 –

答えて

0

はrickdenhaanこの

$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); 
    } 
+0

どうすれば変数としてチェックしているディレクトリを設定できますか? 私の探しているディレクトリはCのtestdirに設定されていますが、これは時々変更する必要があります –

+0

@AshtonWattsが編集されました。 – nk2ge5k

1

おかげで、if文は、それをソートする直前に

$subDirectory = rtrim($subDirectory); 

を試してみてください。