如何使用 PHP 在文本文件中搜索字符串
Posted
技术标签:
【中文标题】如何使用 PHP 在文本文件中搜索字符串【英文标题】:how to search for a string in text file using PHP 【发布时间】:2017-12-23 10:20:04 【问题描述】:我有一个读取 TXT 文件并显示其内容的 php 代码。
我想让用户搜索他想要的任何单词,如果可用,系统将显示它和行号。
直到现在我能够阅读文本并显示它。
我知道我需要逐行读取它并存储在变量中,还是有更好的选择?
代码
<?php
$myFile = "test.txt";
$myFileLink = fopen($myFile, 'r');
$myFileContents = fread($myFileLink, filesize($myFile));
while(!feof($myFileContents))
echo fgets($myFileContents) . "<br />";
if(isset($_POST["search"]))
$search =$_POST['name'];
$myFileContents = str_replace(["\r\n","\r"], "\n", $myFileContents);
if( preg_match_all('/('.preg_quote($search,'/').')/i', $myFileContents, $matches,PREG_OFFSET_CAPTURE))
foreach($matches[1] as $match)
$line = 1+substr_count(substr($myFileContents,0,$match[1]), "\n");
echo "Found $search on $line";
fclose($myFileLink);
//echo $myFileContents;
?>
<html>
<head>
</head>
<body>
<form action="index.php" method="post">
<p>enter your string <input type ="text" id = "idName" name="name" /></p>
<p><input type ="Submit" name ="search" value= "Search" /></p>
</form>
</body>
</html>
【问题讨论】:
file_get_contents
如果文件不是很大。
对于更大的文件,使用fgets
直到找到包含搜索字符串的行并保持正在处理的行的运行计数器
@rickdenhaan 现在我尝试了 feof () 和 fgets() 函数,但它显示此错误:警告:feof() 期望参数 1 是资源,c:\xampp\ 中给出的字符串htdocs\readfiletest\index.php 在第 10 行 警告:fgets() 期望参数 1 是资源,字符串在第 11 行的 c:\xampp\htdocs\readfiletest\index.php 中给出
那些函数需要$myFileLink
而不是$myFileContents
【参考方案1】:
类似的东西
$myFileContents = file_get_contents($myFileLink);
if( preg_match_all('/('.preg_quote($search,'/').')/i', $myFileContents, $matches))
print_r($matches);
使用 Preg 匹配所有且不区分大小写的标志。
获取行号要困难得多,因为您需要执行以下操作:
$myFileContents = "Lorem ipsum dolor sit amet, consectetur adipiscing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
Excepteur sint occaecat cupidatat non proident,
sunt in culpa qui officia deserunt mollit anim id est laborum.";
$search = "non proident";
//normalize line endings.
$myFileContents = str_replace(["\r\n","\r"], "\n", $myFileContents);
//Enter your code here, enjoy!
if( preg_match_all('/('.preg_quote($search,'/').')/i', $myFileContents, $matches,PREG_OFFSET_CAPTURE))
foreach($matches[1] as $match)
$line = 1+substr_count(substr($myFileContents,0,$match[1]), "\n");
echo "Found $search on $line";
输出
Found non proident on 5
你可以看到live here
如果它是一个大文件,您可以在阅读每一行时进行类似的搜索。像这样的
$myFileLink = fopen($myFile, 'r');
$line = 1;
while(!feof($myFileLink))
$myFileContents = fgets($myFileLink);
if( preg_match_all('/('.preg_quote($search,'/').')/i', $myFileContents, $matches))
foreach($matches[1] as $match)
echo "Found $match on $line";
++$line;
【讨论】:
我将编辑我的问题并添加新代码看看以上是关于如何使用 PHP 在文本文件中搜索字符串的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 PHP 列出不属于 ISO 8859-1 字符集的文本文件中使用的所有 UTF-8 字符?
如何在多个文件中搜索字符串并在 Excel 或 Powershell 中的 csv 中返回带有行号/文本的文件名