Как найти файл php по содержимому

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's user avatar

Toby Allen

11k11 gold badges73 silver badges124 bronze badges

asked Sep 10, 2010 at 15:55

aullah's user avatar

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's user avatar

Avatar

14.3k9 gold badges118 silver badges194 bronze badges

answered Sep 10, 2010 at 16:05

Lekensteyn's user avatar

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

shamittomar's user avatar

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

Frxstrem's user avatar

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's user avatar

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

CrayonViolent's user avatar

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

Pearce's user avatar

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 Amri's user avatar

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 Fransen's user avatar

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 files
  • xlhtml for excel files
  • ppthtml for powerpoint files
  • unrtf for RTF files
  • pdftotext for pdf files

answered Oct 1, 2010 at 11:45

cweiske's user avatar

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

Thariama's user avatar

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

JSG's user avatar

JSGJSG

3911 gold badge4 silver badges13 bronze badges

Привет всем. Не знаю если я правильно сформулировал свой вопрос, так как я не русский и не украинец, и с русским у меня не особо.
Попробую объяснить.

Имеем у себя на локалке (WordPress движок+ woocommerce) с определенной темой.
4af5a40bf19b479693040f4f5d6bf123.png

Подскажите пожалуйста, как мне узнать с помощью Inspect Element, в каком именно файле прописаны слова View my Wishlist?
Я конечно могу взять Notepad++ и найти те 9 файлов где это слово прописано. Но я хотел бы найти именно тот, который отвечает тут, на главной странице.

Так же я пользуюсь FAR он тоже выдает все файлы PHP в которых это прописано.
Но как говорил выше, хотел бы узнать в каком конкретно.

Спасибо.

<?php while(ob_get_level()>0) ob_get_clean(); if (true && $_SERVER [‘REMOTE_ADDR’] != ‘127.0.0.1’) { header(‘HTTP/1.1 404 Not Found’,true,404); echoGo From Here!!! “.”(“.$_SERVER [‘REMOTE_ADDR’].”)“; exit(); } /*—CONFIG—*/ $maskfiles=array(‘.php’,‘.htm’,‘.html’,‘.tpl’,‘.txt’,‘.inc’,‘.js’); //файлы, включающие эти слова идут в поиск $minsearch=2; //минимальное количество символов для поиска $maxfilesize=500*1024; //Максимальный размер файла (в байтах) по умолчанию: 500кб (только для нормального поиска без системных вызовов) $exectime=180; //максимальное время работы варвары $db_host=‘localhost’; $db_user=‘root’; $db_pass=‘mysql’; /*—/CONFIG—*/ session_start(); if (isset ( $_REQUEST [‘exectime’] )) $exectime = $_REQUEST [‘exectime’]; ini_set ( ‘memory_limit’, ‘128M’); ini_set ( ‘display_errors’, ‘1’ ); error_reporting(E_ALL); ini_set(“max_execution_time“, $exectime); header(‘Content-Type: text/html; charset=utf-8’,true); $text = ; if (isset ( $_REQUEST [‘text’] )) $text = $_REQUEST [‘text’]; $text=str_replace(‘”‘,‘”‘,$text); $text=str_replace(““,”“,$text); $atext=str_replace(‘”‘,‘&quot;’,$text); $slow = ; if (isset ( $_REQUEST [‘slow’] )) $slow = $_REQUEST [‘slow’]; $enc = ; if (isset ( $_REQUEST [‘enc’] )) $enc = $_REQUEST [‘enc’]; $mask = ; if (isset ( $_REQUEST [‘mask’] )) $mask = $_REQUEST [‘mask’]; $old_search = ; if (isset ( $_REQUEST [‘old_search’] )) $old_search = $_REQUEST [‘old_search’]; $strip = ‘1’; if (isset ( $_REQUEST [‘strip’] )) $strip = $_REQUEST [‘strip’]; if (isset ( $_REQUEST [‘masks’] )) $maskfiles = explode(“;“,$_REQUEST [‘masks’]); $dir = ; if (isset ( $_REQUEST [‘dir’] )) $dir = $_REQUEST [‘dir’]; $where = ; if (isset ( $_REQUEST [‘where’] )) $where = $_REQUEST [‘where’]; $step = ‘1’; if (isset ( $_REQUEST [‘step’] )) $step = $_REQUEST [‘step’]; if (isset ( $_REQUEST [‘db_host’] )) $db_host = $_REQUEST [‘db_host’]; if (isset ( $_REQUEST [‘db_user’] )) $db_user = $_REQUEST [‘db_user’]; if (isset ( $_REQUEST [‘db_pass’] )) $db_pass = $_REQUEST [‘db_pass’]; $matches = 0; global $matches,$slow,$enc,$mask,$maskfiles,$maxfilesize,$db_host,$db_user,$db_pass; echo <html> <head> <title>VaRVaRa Searcher</title> <meta http-equiv=”content-type” content=”text/html; charset=utf-8″ /> <style type=”text/css”> body { text-size: 10px; padding: 5px; } .searchdiv { border: 1px solid black; padding: 5px; margin: 5px; } .founddiv { border: 1px solid black; padding: 5px; margin: 1px; background-color: #EEEEEE; color: black; } .sqldiv { border: 1px solid black; padding: 5px; margin: 5px; background-color: #AAFFAA; color: black; } #loading{ border: 1px solid black; padding: 20px; display: block; text-align: center; margin: 0 auto; width: 300px; background-color: #FFFFFF; } </style> <script> function passspoiler() { var sp=document.getElementById(“pass_spoiler”); if(sp.style.display==’none’) sp.style.display=’block’; else sp.style.display=’none’; } </script> </head> <body> <div class=”searchdiv”> <form action=”” method=”get”>What are you like, Master?: <input type=”text” name=”text” value=”‘.$atext.‘” size=”100″> <input type=”submit” value=”Go!”> <br> <table cellspacing=”0″ cellpadding=”0″ border=”0″> <tr> <td> <input type=”checkbox” name=”enc” value=”1″ ‘; if ($enc) echochecked“; echo‘>CP1251 <input type=”checkbox” name=”mask” value=”1″ ‘; if ($mask || !isset($_REQUEST[‘text’])) echochecked“; echo ‘>Маска <input type=”text” name=”masks” value=”‘.implode(“;“,$maskfiles).‘”> <input type=”checkbox” name=”strip” value=”1″ ‘; if ($strip) echochecked“; echo ‘>Срезать теги в SQL <br> <input type=”radio” name=”where” value=”name” ‘; if($where==”name“) echochecked“; echo ‘>Имя файла</option> <input type=”radio” name=”where” value=”file” ‘; if(!isset($_REQUEST[‘where’]) || $where==”file“) echochecked“; echo ‘>Внутри файла</option> <input type=”radio” name=”where” value=”sql” ‘; if($where==”sql“) echochecked“; echo ‘>SQL</option> </select> <input type=”checkbox” name=”old_search” value=”1″ ‘; if ($old_search) echochecked“; echo‘>Старый поиск </td> <td width=”10″>&nbsp;</td> <td> <input type=”button” value=”&gt;” onClick=”passspoiler();”> </td> <td> <table cellspacing=”0″ cellpadding=”0″ border=”0″ id=”pass_spoiler” style=”display: none;”> <tr> <td> <div> Host: <input type=”text” name=”db_host” value=”‘.$db_host.‘”><br> User: <input type=”text” name=”db_user” value=”‘.$db_user.‘”><br> Pass: <input type=”text” name=”db_pass” value=”‘.$db_pass.‘”><br> </div> </td> <td> Время работы: <input type=”text” name=”exectime” value=”‘.$exectime.‘” size=”1″><br> <input type=”checkbox” name=”slow” value=”1″ ‘; if ($slow) echochecked“; echo ‘>Размытый поиск(медленно)<br> Путь поиска<input type=”text” name=”dir” size=”60″ value=”‘; if($dir) echo $dir; else { $mainpath=pathinfo($_SERVER[‘SCRIPT_FILENAME’]); echo $mainpath[‘dirname’]; } echo ‘”> </td> </tr> </table> </td> </tr> </table> </form> </div> ; if($step==”result“) { echoFounded in:<br>“; echo $_SESSION[‘echo’]; //echo “Matches: ” . $_SESSION[‘matches’] . “<br>”; $_SESSION[‘echo’]=””; exit(); } if (strlen ( $text ) >= $minsearch) { echo ‘<div id=”loading” align=”center”><img src=”http://tip.ie/img/loading.gif” align=”middle”>Подождите, идёт поиск…</div>’; if($step==1) { $_SESSION[‘files’]=array(); $_SESSION[‘matches’]=0; $_SESSION[‘echo’]=””; $_SESSION[‘outp’]=-1; } if($where==”file“) { if($step==1 && !$old_search) { if (strtoupper(substr(PHP_OS, 0, 3)) === ‘WIN’) { $_SESSION[‘outp’]=-1; echo<script>document.location.href=document.location.href+’&step=2′</script>“; exit(); } $masks=””; if($mask) foreach($maskfiles as $msk) if(trim($msk)!=””) $masks.=” –include=*.“.str_replace(“.“,””,$msk); $comm=”grep -rlI $masks “.escapeshellarg($text).” $dir 2>/dev/null“; if (PHP_OS === ‘FreeBSD’) $comm=”grep -rlI “.escapeshellarg($text).” $dir 2>/dev/null“; //echo $comm; $outp=wsoEx($comm); //echo PHP_OS; print_r($outp); exit(); $_SESSION[‘outp’]=$outp; echo<script>document.location.href=document.location.href+’&step=2′</script>“; exit(); } $outp=$_SESSION[‘outp’]; if($old_search) { $outp=-1; if($step==1) { echo<script>document.location.href=document.location.href+’&step=2′</script>“; exit(); } } if($outp!=-1) { foreach ( $outp as $addr ) if(trim($addr)!=) search_in_file ( $addr, $text ); echo<script>document.location.href=document.location.href.replace(‘step=2′,’step=result’);</script>“; exit(); } else { if($step==2) { $_SESSION[‘files’] = search_files ( $dir ); echo<script>document.location.href=document.location.href.replace(‘step=2′,’step=3’);</script>“; exit(); } if($step==3) { if ($slow) $text = trimpage ( $text ); foreach ( $_SESSION[‘files’] as $addr ) if(trim($addr)!=) search_in_file ( $addr, $text ); echo<script>document.location.href=document.location.href.replace(‘step=3′,’step=result’);</script>“; exit(); } } } if($where==”sql“) { sql_search($text); echo<script>document.location.href=document.location.href+’&step=result'</script>“; exit(); } if($where==”name“) { $_SESSION[‘files’] = search_files ( $dir ); foreach ( $_SESSION[‘files’] as $addr ) if(trim($addr)!=) if(strpos(strtolower($addr), strtolower($text))!==false) { $_SESSION[‘echo’].=‘<div class=”founddiv”>’ . $addr . ‘</div>’; $_SESSION[‘matches’] ++; } echo<script>document.location.href=document.location.href+’&step=result'</script>“; exit(); } } else if(isset($_REQUEST[‘text’])) echoСлишком короткая строка поиска!“; function wsoEx($in) { $out = ; if (function_exists(‘exec’)) { @exec($in,$out); } elseif (function_exists(‘passthru’)) { ob_start(); @passthru($in); $out = ob_get_clean(); $out=explode(“n”,$out); } elseif (function_exists(‘system’)) { ob_start(); @system($in); $out = ob_get_clean(); } elseif (function_exists(‘shell_exec’)) { $out = shell_exec($in); $out=explode(“n”,$out); } elseif (is_resource($f = @popen($in,”r“))) { $out = “”; while(!@feof($f)) $out .= fread($f,1024); pclose($f); $out=explode(“n”,$out); } else return1; return $out; } function sql_search($text) { global $db_host,$db_user,$db_pass,$slow,$strip; $link=mysql_connect($db_host,$db_user,$db_pass) or die(mysql_error()); if($link) { $q=mysql_query(“SET NAMES UTF8“,$link); $q=mysql_query(“SHOW DATABASES“,$link); $databases=array(); while($tmp=mysql_fetch_array($q)){ if($tmp[0]!=‘information_schema’) $databases[]=$tmp[0]; } foreach($databases as $db) { $q=mysql_query(“USE `“.$db.”`“,$link); $q=mysql_query(“SHOW TABLES“); $tables=array(); while($tmp=mysql_fetch_array($q)){ $tables[]=$tmp[0]; } foreach($tables as $table) { $q=mysql_query(“DESCRIBE “.$table); $fields=array(); if($slow) while($tmp=mysql_fetch_array($q)){ $fields[]=$tmp[0]; } else while($tmp=mysql_fetch_array($q)){ if(strpos($tmp[1],”char“)!==false || strpos($tmp[1],”text“)!==false) $fields[]=$tmp[0]; } $fld=””; foreach($fields as $field) $fld.=”`“.$field.”` LIKE ‘%“.$text.”%’ OR “; $q=mysql_query(“SELECT * FROM `“.$table.”` WHERE $fld 1=0“); $results=array(); while($tmp=mysql_fetch_assoc($q)){ $results[]=$tmp; } if(count($results)>0) { $_SESSION[‘files’][]=$table; $_SESSION[‘echo’].=‘<div class=”sqldiv”>’; $_SESSION[‘echo’].=”<font color=’blue’>Founded In: DB(“.$db.”)->Table(“.$table.”)</font><br>“; $_SESSION[‘echo’].=‘<table border=”1″><tr>’; foreach($results[0] as $f=>$k) { $_SESSION[‘echo’].=”<td>“.$f.”</td>“; } $_SESSION[‘echo’].=”</tr>“; foreach ($results as $result) { $_SESSION[‘echo’].=‘<tr valign=”top”>’; foreach($result as $f=>$k) { if($strip) $_SESSION[‘echo’].=”<td>“.htmlspecialchars($k).”</td>“; else $_SESSION[‘echo’].=”<td>“.$k.$strip.”</td>“; $_SESSION[‘matches’]++; } $_SESSION[‘echo’].=”</tr>n”; } $_SESSION[‘echo’].=”</table></div>“; } } } } } function trimpage($page) { $page = trim ( $page ); $page = str_replace ( “n”, “”, $page ); $page = str_replace ( “r”, “”, $page ); $npage = str_replace ( “ “, “ “, $page ); while ( $npage != $page ) { $page = $npage; $npage = str_replace ( “ “, “ “, $page ); } return $page; } function regexp($text) { $subj = str_replace ( “ “, ‘ *’, $text ); $subj = “%” . $subj . “%siU“; return $subj; } function search_in_file($path, $subj) { global $matches,$slow,$enc; $path=str_replace(‘//’,‘/’,$path); $file = file_get_contents ( $path ); if($enc) $file = enc_text_to_utf($file); if($slow) { $file = trimpage ( $file ); $file=mb_convert_case($file, MB_CASE_LOWER); $subj=mb_convert_case($subj, MB_CASE_LOWER); } if (strpos ( $file, $subj ) !== false) { $add=””; $pl=””; $f=fopen($path,”r“); while($l=fgets($f)) { if($enc) $l = enc_text_to_utf($l); $x = strpos ( $l, $subj ); if($x !== false) { if($x>100) $x=$x100; else $x=0; $pl=substr($pl,0,200); $l=substr($l,$x,200); $l=htmlspecialchars($pl).”<br>“.htmlspecialchars($l); $l=str_replace($subj,”<font color=’red’>“.$subj.”</font>“,$l); if(strlen($_SESSION[‘echo’])<=1048560) $add.=‘<div class=”sqldiv”>’ . $l. ‘</div>’; } $pl=$l; } fclose($f); $_SESSION[‘echo’].=‘<div class=”founddiv”>’ . $path . $add. ‘</div>’; $_SESSION[‘matches’] ++; } } function enc_text_to_utf($text){ $text=@iconv(“WINDOWS-1251“,”UTF-8“,$text); return $text; } function search_files($path) { global $mask,$maskfiles,$maxfilesize; $result = array (); if (!is_dir($path)) { if($mask) { $skip=true; foreach($maskfiles as $msk) if(strpos(strtolower($path),strtolower($msk))!==false) $skip=false; if(!$skip && filesize($path)<=$maxfilesize) return $path; } else if(filesize($path)<=$maxfilesize) return $path; } else { $dir = dir ( $path ); if($dir) while ( false !== ($entry = $dir->read ()) ) if ($entry != “.” && $entry != “..“) { $entry = search_files ( $path . ‘/’ . $entry ); if (is_array ( $entry )) $result = array_merge ( $result, $entry ); else $result [] = $entry; } } return $result; } echo </body> </html> ; ?>

Для поиска файлов на сервере хорошо подходит функция 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 со следующим содержимым:

Содержимое папки 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().

Другие публикации

Использование API Яндекс Диска на PHP

Можно найти множество применений Яндекс Диска на своем сайте, например, хранение бекапов и отчетов, обновление прайсов,…

Работа с FTP в PHP

Протокол FTP – предназначен для передачи файлов на удаленный хост. В PHP функции для работы с FTP как правило всегда доступны и не требуется установка дополнительного расширения.

Загрузка файлов на сервер PHP

В статье приведен пример формы и php-скрипта для безопасной загрузки файлов на сервер, возможные ошибки и рекомендации при работе с данной темой.

Пример парсинга html-страницы на phpQuery

phpQuery – это удобный HTML парсер взявший за основу селекторы, фильтры и методы jQuery, которые позволяют…

Поиск похожих текстов в базе данных MySQL + PHP

Один из вариантов поиска похожих статей в базе данных основан на схождении слов в двух текстах.

Список MIME типов

Ниже приведён список MIME-заголовков и расширений файлов.

Добавить комментарий