我遇到了来自文本文件的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。
subdir1
subdir2
和页面回声
C:\ TESTDIR \ subdir1
C:\ testdir \ subdir1不存在 C:\ TESTDIR \ subdir2
C:\ testdir \ subdir2存在
因此,如果文本文件中的数据后面有一个新行,则代码无法正确读取。我希望这是有道理的,有人可以提供帮助。
的问候,
答案 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);
}