Я просто быстро соединил следующее, чтобы отсканировать каталог и подкаталоги, чтобы вывести список файлов в соответствии с обнаруженным содержимым в файлах - это может быть полезно.
<code>error_reporting( E_ALL );
ini_set( 'display_errors', 1 );
set_time_limit( 60 );
/* edit to suit. Choose directory, file extensions and exclusions */
$config=(object)array(
'directory' => __DIR__,
'extensions' => array( 'php', 'html', 'htm' ),
'exclusions' => array(
'bookmarks_11_01_2019.html',
'bookmarks_05_01_2019.html'
)
);
function getnodes($type,$attr){
/*
helper function to get $type elements
and return attribute $attr
*/
global $dom;
global $info;
global $ext;
$col=$dom->getElementsByTagName( $type );
$tmp=[];
if( $col->length > 0 ){
foreach( $col as $node ){
$tmp[]=array(
$attr => $node->getAttribute( $attr ),
'file' => $info->getFileName(),
'dir' => $info->getPathInfo()->getRealPath(),
'type' => $type,
'ext' => $ext
);
}
}
return $tmp;
}
libxml_use_internal_errors( true );
$dom=new DOMDocument;
$links=[];
/* create the recusive iterators */
$dirItr=new RecursiveDirectoryIterator( $config->directory, RecursiveDirectoryIterator::KEY_AS_PATHNAME );
foreach( new RecursiveIteratorIterator( $dirItr, RecursiveIteratorIterator::CHILD_FIRST ) as $obj => $info ) {
if( $info->isFile() ){
$ext = pathinfo( $info->getFileName(), PATHINFO_EXTENSION );
/* only scan files of specified extensions that are not in the exclusions list */
if( in_array( $ext, $config->extensions ) && !in_array( $info->getFileName(), $config->exclusions ) ){
/* load a new file into DOMDocument */
$dom->loadHTMLFile( $info->getPathName() );
/* ignore errors */
libxml_clear_errors();
/* find elements that may be of interest */
$links=array_merge(
$links,
getnodes( 'a', 'href' ),
getnodes( 'form', 'action' ),
getnodes( 'img', 'src' ),
getnodes( 'iframe', 'src' )
);
}
}
}
/* display scan results*/
printf( '<pre>%s
', print_r ($ links, true));