【发布时间】:2014-04-02 07:08:56
【问题描述】:
我试图打开一个充满文本文件的目录,然后逐行读取每个文件,将每行中的信息写入一个新文件。在我尝试迭代的目录中的每个文本文件中,信息的格式如下:
JunkInfo/UserName_ID_Date_Location.Type
所以我想打开这些文本文件中的每一个,并以如下形式在我的新文件中写入一行:
UserName,ID,Date,Location,Type
这是我目前想出的代码:
<?php
$my_file = 'info.txt';
$writeFile = fopen($my_file, 'w') or die('Cannot open file: '.$my_file); //implicitly creates file
$files = scandir('/../DirectoryToScan');
foreach($files as $file)
{
$handle = @fopen($file, "r");
if ($handle)
{
while (($buffer = fgets($handle, 4096)) !== false)
{
$data = explode("_", $buffer);
$username = explode("/", $data[0])[1];
$location = explode(".", $data[3])[0];
$type = explode(".", $data[3])[1];
$stringToWrite = $username . "," . $data[1] . "," . $data[2] . "," . $location . "," . $type;
fwrite($writeFile, $stringToWrite);
}
if (!feof($handle))
{
echo "Error: unexpected fgets() fail\n";
}
fclose($handle);
}
}
fclose($writeFile);
?>
所以我的问题是,这似乎不起作用。我只是从来没有发生过任何事情——输出文件从未被写入,我不知道为什么。
【问题讨论】:
-
$files数组是否包含您认为的内容?在foreach循环之前尝试print_r($files)以查看其中的内容。 -
此外,您可以抑制
fopen调用可能发生的任何错误,并且您不会处理$handle无效的情况。这些可能是您需要捕获的错误情况。 -
是的 - 刚刚检查了一下,
$files似乎得到了我需要的东西。