【发布时间】:2011-05-05 10:26:12
【问题描述】:
我的服务器中有一个包含此信息的文本文件:
Data1
Data2
Data3
.
.
.
DataN
如何使用 PHP 从文本文件中读取所有信息(逐行)?
【问题讨论】:
我的服务器中有一个包含此信息的文本文件:
Data1
Data2
Data3
.
.
.
DataN
如何使用 PHP 从文本文件中读取所有信息(逐行)?
【问题讨论】:
除非明确定义处理字符串的位置和方式,否则只需使用 file_get_contents()。无需长时间的迭代和变通方法。
例如,从 /client/ 中的 latestversion.txt 读取版本,并使用三元运算符(条件 ? do : else)进行后备
$version = (file_exists("client/latestversion.txt")) ? file_get_contents("client/latestversion.txt") : "0.0.0.0";
这里,我们确认latestversion.txt确实存在,并请求读取它,否则输出“0.0.0.0”。它是完成工作的单线。
然后你就直接回显
echo "The version is: " . $version;
或者你可以这样称呼它
printf("The version is: ", $version);
如果是这种情况,建议根据对该文件的访问权限在此时清除字符串。
【讨论】:
上面从 Payload 发布的代码效果很好。我想为此添加一些内容,因为其他人可能会遇到同样的问题。我使用了您的代码,并试图将一个值与从 .txt 文件中获取的 $line 进行比较。即使我知道我的关键字与一行匹配,但我一直收到错误消息。这是代码示例...
textfile.txt content example:
text1
text2
keyword
text3
$keyword = 'keyword';
while($line = fgets($txt_file)) {
if (substr_compare($line, $keyword, 0) === 0) {
$value = $line;
}
}
echo $value; // returns nothing because the if statement was false
问题是每条 $line 在它的末尾都有一个新行。但在我的情况下,我只是在创建 .txt 文件时使用 enter 换行,它没有用“\n”或 idk“\r\n”之类的东西指定。无论如何,如果您遇到同样的问题,请务必在使用 $line 之前修剪()它以消除任何空白,或者在这种情况下是新行,否则您可能会继续遇到错误。在不产生奇怪结果的情况下,最短和最简单的方法是在 while 语句中像这样简单地修剪它......
while($line = trim(fgets($txt_file))) {
if (substr_compare($line, $keyword, 0) === 0) {
$value = $line;
}
}
echo $value; // result: keyword
是的,我确实得到了一些奇怪的结果,试图在 substr_compare() 函数内的 $line 周围抛出 trim(),即使 if 语句结果为 TRUE,$value 也会有一个带有空格的“keyword”结果在关键字的开头和结尾。奇怪的东西……
【讨论】:
$your_variable = file_get_contents("file_to_read.txt");
【讨论】:
$aa = fopen('a.txt','r');
echo fread($aa,filesize('a.txt'));
$a = fopen('a.txt','r');
while(!feof($a)){echo fgets($a)."<br>";}
fclose($a);
【讨论】:
您可以读取文件夹中的一组txt文件并像这样回显内容。
<?php
$directory = "folder/";
$dir = opendir($directory);
$filenames = [];
while (($file = readdir($dir)) !== false) {
$filename = $directory . $file;
$type = filetype($filename);
if($type !== 'file') continue;
$filenames[] = $filename;
}
closedir($dir);
?>
【讨论】:
$file="./doc.txt";
$doc=file_get_contents($file);
$line=explode("\n",$doc);
foreach($line as $newline){
echo '<h3 style="color:#453288">'.$newline.'</h3><br>';
}
【讨论】:
试试这样的:
$filename = 'file.txt';
$data = file($filename);
foreach ($data as $line_num=>$line)
{
echo 'Line # <b>'.$line_num.'</b>:'.$line.'<br/>';
}
【讨论】:
$filename = "fille.txt";
$fp = fopen($filename, "r");
$content = fread($fp, filesize($filename));
$lines = explode("\n", $content);
fclose($fp);
print_r($lines);
在这段代码中,文件的全部内容被复制到变量$content,然后用文件中的每个换行符将其拆分为一个数组。
【讨论】:
<?php
$fh = fopen('filename.txt','r');
while ($line = fgets($fh)) {
// <... Do your work with the line ...>
// echo($line);
}
fclose($fh);
?>
这将让您逐行阅读。阅读php.net/fgets 上有关 Mac 的行尾问题的注释。
【讨论】:
您也可以使用文件生成数组:
$array = file('/path/to/text.txt');
【讨论】:
W3Schools 是你的朋友:http://www.w3schools.com/php/func_filesystem_fgets.asp
这里:http://php.net/manual/en/function.fopen.php 有更多关于 fopen 的信息,包括模式是什么。
W3Schools 怎么说:
<?php
$file = fopen("test.txt","r");
while(! feof($file))
{
echo fgets($file). "<br />";
}
fclose($file);
?>
fopen 打开文件(在本例中 test.txt 模式为“r”,表示只读,并将指针放在文件开头)
while 循环测试检查它是否在文件末尾 (feof),当它不是时它调用 fgets 来获取指针所在的当前行。
继续执行此操作,直到文件结束,然后关闭文件。
【讨论】:
http://php.net/manual/en/function.file-get-contents.php
http://php.net/manual/en/function.explode.php
$array = explode("\n", file_get_contents($filename));
这实际上不会逐行读取,但它会为您提供一个可以逐行使用的数组。有很多选择。
【讨论】: