Using php, I’m trying to create a script which will search within a text file and grab that entire line and echo it.
I have a text file (.txt) titled “numorder.txt” and within that text file, there are several lines of data, with new lines coming in every 5 minutes (using cron job). The data looks similar to:
2 aullah1
7 name
12 username
How would I go about creating a php script which will search for the data “aullah1” and then grab the entire line and echo it? (Once echoed, it should display “2 aullah1” (without quotations).
If I didn’t explain anything clearly and/or you’d like me to explain in more detail, please comment.
Toby Allen
11k11 gold badges73 silver badges124 bronze badges
asked Sep 10, 2010 at 15:55
4
And a PHP example, multiple matching lines will be displayed:
<?php
$file = 'somefile.txt';
$searchfor = 'name';
// the following line prevents the browser from parsing this as HTML.
header('Content-Type: text/plain');
// get the file contents, assuming the file to be readable (and exist)
$contents = file_get_contents($file);
// escape special characters in the query
$pattern = preg_quote($searchfor, '/');
// finalise the regular expression, matching the whole line
$pattern = "/^.*$pattern.*$/m";
// search, and store all matching occurences in $matches
if (preg_match_all($pattern, $contents, $matches))
{
echo "Found matches:n";
echo implode("n", $matches[0]);
}
else
{
echo "No matches found";
}
Avatar
14.3k9 gold badges118 silver badges194 bronze badges
answered Sep 10, 2010 at 16:05
LekensteynLekensteyn
64k22 gold badges157 silver badges192 bronze badges
5
Do it like this. This approach lets you search a file of any size (big size won’t crash the script) and will return ALL lines that match the string you want.
<?php
$searchthis = "mystring";
$matches = array();
$handle = @fopen("path/to/inputfile.txt", "r");
if ($handle)
{
while (!feof($handle))
{
$buffer = fgets($handle);
if(strpos($buffer, $searchthis) !== FALSE)
$matches[] = $buffer;
}
fclose($handle);
}
//show results:
print_r($matches);
?>
Note the way strpos
is used with !==
operator.
answered Sep 10, 2010 at 16:11
shamittomarshamittomar
46k12 gold badges74 silver badges78 bronze badges
6
Using file()
and strpos()
:
<?php
// What to look for
$search = 'foo';
// Read from file
$lines = file('file.txt');
foreach($lines as $line)
{
// Check if the line contains the string we're looking for, and print if it does
if(strpos($line, $search) !== false)
echo $line;
}
When tested on this file:
foozah
barzah
abczah
It outputs:
foozah
Update:
To show text if the text is not found, use something like this:
<?php
$search = 'foo';
$lines = file('file.txt');
// Store true when the text is found
$found = false;
foreach($lines as $line)
{
if(strpos($line, $search) !== false)
{
$found = true;
echo $line;
}
}
// If the text was not found, show a message
if(!$found)
{
echo 'No match found';
}
Here I’m using the $found
variable to find out if a match was found.
answered Sep 10, 2010 at 16:15
FrxstremFrxstrem
38.1k9 gold badges78 silver badges115 bronze badges
3
$searchfor = $_GET['keyword'];
$file = 'users.txt';
$contents = file_get_contents($file);
$pattern = preg_quote($searchfor, '/');
$pattern = "/^.*$pattern.*$/m";
if (preg_match_all($pattern, $contents, $matches)) {
echo "Found matches:<br />";
echo implode("<br />", $matches[0]);
} else {
echo "No matches found";
fclose ($file);
}
zessx
67.8k28 gold badges135 silver badges158 bronze badges
answered Nov 16, 2015 at 4:23
3
one way…
$needle = "blah";
$content = file_get_contents('file.txt');
preg_match('~^(.*'.$needle.'.*)$~',$content,$line);
echo $line[1];
though it would probably be better to read it line by line with fopen() and fread() and use strpos()
answered Sep 10, 2010 at 16:07
CrayonViolentCrayonViolent
32k5 gold badges56 silver badges79 bronze badges
2
Slightly modified approach of the Upvoted answer to support multiple directories and variable keywords through a GET variable (if you wish to do it that way)
if (isset($_GET["keyword"])){
foreach(glob('*.php') as $file) {
$searchfor = $_GET["keyword"];
// the following line prevents the browser from parsing this as HTML.
header('Content-Type: text/plain');
// get the file contents, assuming the file to be readable (and exist)
$contents = file_get_contents($file);
// escape special characters in the query
$pattern = preg_quote($searchfor, '/');
// finalise the regular expression, matching the whole line
$pattern = "/^.*$pattern.*$/m";
// search, and store all matching occurences in $matches
if(preg_match_all($pattern, $contents, $matches)){
echo "Found matches:n";
echo $file. "n";
echo implode("n", $matches[0]);
echo "nn";
}
else{
// echo "No matches found";
}
}
}
answered Apr 17, 2022 at 20:00
PearcePearce
3204 silver badges10 bronze badges
How to search text in some files like PDF, doc, docs or txt using PHP?
I want to do similar function as Full Text Search in MySQL,
but this time, I’m directly search through files, not database.
The search will do searching in many files that located in a folder.
Any suggestion, tips or solutions for this problem?
I also noticed that, google also do searching through the files.
asked Oct 1, 2010 at 11:31
Hafizul AmriHafizul Amri
2,6337 gold badges28 silver badges30 bronze badges
2
For searching PDF’s you’ll need a program like pdftotext, which converts content from a pdf to text. For Word documents a simular thingy could be available (because of all the styling and encryption in Word files).
An example to search through PDF’s (copied from one of my scripts (it’s a snippet, not the entire code, but it should give you some understanding) where I extract keywords and store matches in a PDF-results-array.):
foreach($keywords as $keyword)
{
$keyword = strtolower($keyword);
$file = ABSOLUTE_PATH_SITE."_uploaded/files/Transcripties/".$pdfFiles[$i];
$content = addslashes(shell_exec('/usr/bin/pdftotext ''.$file.'' -'));
$result = substr_count(strtolower($content), $keyword);
if($result > 0)
{
if(!in_array($pdfFiles[$i], $matchesOnPDF))
{
array_push($matchesOnPDF, array(
"matches" => $result,
"type" => "PDF",
"pdfFile" => $pdfFiles[$i]));
}
}
}
answered Oct 1, 2010 at 11:38
Ben FransenBen Fransen
10.8k18 gold badges74 silver badges129 bronze badges
Depending on the file type, you should convert the file to text and then search through it using i.e. file_get_contents()
and str_pos()
. To convert files to text, you have – beside others – the following tools available:
catdoc
for word filesxlhtml
for excel filesppthtml
for powerpoint filesunrtf
for RTF filespdftotext
for pdf files
answered Oct 1, 2010 at 11:45
cweiskecweiske
29.7k14 gold badges132 silver badges192 bronze badges
1
If you are under a linux server you may use
grep -R "text to be searched for" ./ // location is everything under the actual directory
called from php using exec resulting in
cmd = 'grep -R "text to be searched for" ./';
$result = exec(grep);
print_r(result);
answered Oct 1, 2010 at 11:36
ThariamaThariama
49.7k12 gold badges138 silver badges166 bronze badges
2021 I came across this and found something so I figure I will link to it…
Note: docx, pdfs and others are not regular text files and require more scripting and/or different libraries to read and/or edit each different type unless you can find an all in one library. This means you would have to script out each different file type you want to search though including a normal text file. If you don’t want to script it completely then you have to install each of the libraries you will need for each of the file types you want to read as well. But you still need to script each to handle them as the library functions.
I found the basic answer here on the stack.
answered Jun 15, 2021 at 18:46
JSGJSG
3911 gold badge4 silver badges13 bronze badges
Привет всем. Не знаю если я правильно сформулировал свой вопрос, так как я не русский и не украинец, и с русским у меня не особо.
Попробую объяснить.
Имеем у себя на локалке (WordPress движок+ woocommerce) с определенной темой.
Подскажите пожалуйста, как мне узнать с помощью Inspect Element, в каком именно файле прописаны слова View my Wishlist?
Я конечно могу взять Notepad++ и найти те 9 файлов где это слово прописано. Но я хотел бы найти именно тот, который отвечает тут, на главной странице.
Так же я пользуюсь FAR он тоже выдает все файлы PHP в которых это прописано.
Но как говорил выше, хотел бы узнать в каком конкретно.
Спасибо.
Для поиска файлов на сервере хорошо подходит функция glob(), которая возвращает список файлов по заданной маске, например:
$files = glob('/tmp/*.jpg');
PHP
В маске можно использовать следующие специальные символы:
* |
Соответствует нулю или большему количеству любых символов. |
? |
Один любой символ. |
[...] |
Один символ входящий в группу. |
[!...] |
Один символ не входящий в группу. |
{...,...} |
Вхождение подстрок, работает с флагом GLOB_BRACE . |
|
Экранирует следующий символ, кроме случаев, когда используется флаг GLOB_NOESCAPE . |
Доступные флаги:
GLOB_MARK |
Добавляет слеш к каждой возвращаемой директории. |
GLOB_NOSORT |
Возвращает файлы в том виде, в котором они содержатся в директории (без сортировки). Если этот флаг не указан, то имена сортируются по алфавиту. |
GLOB_NOCHECK |
Возвращает шаблон поиска, если с его помощью не был найден ни один файл. |
GLOB_NOESCAPE |
Обратные слеши не экранируют метасимволы. |
GLOB_BRACE |
Раскрывает {a,b,c} для совпадения с «a », «b » или «c ». |
GLOB_ONLYDIR |
Возвращает только директории, совпадающие с шаблоном. |
GLOB_ERR |
Останавливается при ошибках чтения (например, директории без права чтения), по умолчанию ошибки игнорируются. |
Возможно использовать несколько флагов:
$files = glob('/tmp/*.jpg', GLOB_NOSORT|GLOB_ERR);
PHP
Далее во всех примерах используется папка tmp со следующим содержимым:
1
Поиск в директории
Список всех файлов и директорий
$dir = __DIR__ . '/tmp';
$files = array();
foreach(glob($dir . '/*') as $file) {
$files[] = basename($file);
}
print_r($files);
PHP
Результат:
Array
(
[0] => 1.svg
[1] => 2.jpg
[2] => 22-f.gif
[3] => 22.svg
[4] => img.png
[5] => path
[6] => prod.png
[7] => style-1.txt
[8] => style-2.css
)
Только файлы
$dir = __DIR__ . '/tmp';
$files = array();
foreach(glob($dir . '/*') as $file) {
if (is_file($file)) {
$files[] = basename($file);
}
}
print_r($files);
PHP
Результат:
Array
(
[0] => 1.svg
[1] => 2.jpg
[2] => 22-f.gif
[3] => 22.svg
[4] => img.png
[5] => prod.png
[6] => style-1.txt
[7] => style-2.css
)
Только директории
$dir = __DIR__ . '/tmp';
$files = array();
foreach(glob($dir . '/*') as $file) {
if (is_dir($file)) {
$files[] = basename($file);
}
}
print_r($files);
PHP
Результат:
Array
(
[0] => path
)
Поиск по расширению
$dir = __DIR__ . '/tmp';
$files = array();
foreach(glob($dir . '/*.svg') as $file) {
$files[] = basename($file);
}
print_r($files);
PHP
Результат:
Array
(
[0] => 1.svg
[1] => 22.svg
)
Поиск по нескольким расширениям
$dir = __DIR__ . '/tmp';
$files = array();
foreach(glob($dir . '/*.{jpg,png}', GLOB_BRACE) as $file) {
$files[] = basename($file);
}
print_r($files);
PHP
Результат:
Array
(
[0] => 2.jpg
[1] => img.png
[2] => prod.png
)
Поиск по имени файла
Например, в названия файлов начинаются со слова «style»:
$dir = __DIR__ . '/tmp';
$files = array();
foreach(glob($dir . '/style*.*') as $file) {
$files[] = basename($file);
}
print_r($files);
PHP
Результат:
Array
(
[0] => style-1.txt
[1] => style-2.css
)
Или начинаются с цифр:
$dir = __DIR__ . '/tmp';
$files = array();
foreach(glob($dir . '/[0-9]*.*', GLOB_BRACE) as $obj) {
$files[] = basename($obj);
}
print_r($files);
PHP
Результат:
Array
(
[0] => 1.svg
[1] => 2.jpg
[2] => 22-f.gif
[3] => 22.svg
)
2
Поиск в дереве
Поиск по всем подкатегориям более сложный т.к. требует применение рекурсии.
Список всех файлов
function glob_tree_files($path, $_base_path = null)
{
if (is_null($_base_path)) {
$_base_path = '';
} else {
$_base_path .= basename($path) . '/';
}
$out = array();
foreach(glob($path . '/*') as $file) {
if (is_dir($file)) {
$out = array_merge($out, glob_tree_files($file, $_base_path));
} else {
$out[] = $_base_path . basename($file);
}
}
return $out;
}
$dir = __DIR__ . '/tmp';
$files = glob_tree_files($dir);
print_r($files);
PHP
Результат:
Array
(
[0] => 1.svg
[1] => 2.jpg
[2] => 22-f.gif
[3] => 22.svg
[4] => img.png
[5] => path/icon-rew.png
[6] => path/marker.png
[7] => path/psd/1.psd
[8] => path/psd/2.psd
[9] => path/psd/index.psd
[10] => path/sh-1.png
[11] => path/title-1.png
[12] => prod.png
[13] => style-1.txt
[14] => style-2.css
)
Список всех директорий
function glob_tree_dirs($path, $_base_path = null)
{
if (is_null($_base_path)) {
$_base_path = '';
} else {
$_base_path .= basename($path) . '/';
}
$out = array();
foreach(glob($path . '/*', GLOB_ONLYDIR) as $file) {
if (is_dir($file)) {
$out[] = $_base_path . basename($file);
$out = array_merge($out, glob_tree_dirs($file, $_base_path));
}
}
return $out;
}
$dir = __DIR__ . '/tmp';
$files = glob_tree_dirs($dir);
print_r($files);
PHP
Результат:
Array
(
[0] => path
[1] => path/psd
)
Поиск по имени/расширению
function glob_tree_search($path, $pattern, $_base_path = null)
{
if (is_null($_base_path)) {
$_base_path = '';
} else {
$_base_path .= basename($path) . '/';
}
$out = array();
foreach(glob($path . '/' . $pattern, GLOB_BRACE) as $file) {
$out[] = $_base_path . basename($file);
}
foreach(glob($path . '/*', GLOB_ONLYDIR) as $file) {
$out = array_merge($out, glob_tree_search($file, $pattern, $_base_path));
}
return $out;
}
$path = __DIR__ . '/tmp';
$files = glob_tree_search($path, '*.{jpg,png}');
print_r($files);
PHP
Результат:
Array
(
[0] => 2.jpg
[1] => img.png
[2] => prod.png
[3] => path/icon-rew.png
[4] => path/marker.png
[5] => path/sh-1.png
[6] => path/title-1.png
)
Чтобы в результирующих списках выводились полные пути к файлам, достаточно удалить функцию basename()
.
Другие публикации
Можно найти множество применений Яндекс Диска на своем сайте, например, хранение бекапов и отчетов, обновление прайсов,…
Протокол FTP – предназначен для передачи файлов на удаленный хост. В PHP функции для работы с FTP как правило всегда доступны и не требуется установка дополнительного расширения.
В статье приведен пример формы и php-скрипта для безопасной загрузки файлов на сервер, возможные ошибки и рекомендации при работе с данной темой.
phpQuery – это удобный HTML парсер взявший за основу селекторы, фильтры и методы jQuery, которые позволяют…
Один из вариантов поиска похожих статей в базе данных основан на схождении слов в двух текстах.
Ниже приведён список MIME-заголовков и расширений файлов.