Проверьте используемые файлы в каталогах с PHP - PullRequest
0 голосов
/ 27 февраля 2019

Я получил работу от другого программиста.К сожалению, библиотеки также полны тестовых файлов, и я не знаю, какие из них на самом деле используются.Я бы хотел отфильтровать это, посмотрев на ссылки в файлах.

Это было бы долго вручную.Я написал код, но не перечислил все используемые файлы.

Очистить корневой каталог будет достаточно.

Спасибо, ваш совет!

$files = scandir('/public_html/');

$hrefs = array();

foreach ($files as $file) {

   $info = pathinfo($file);
   if ($info["extension"] == "php") {

      $php = file_get_contents($file);

      $dom = new DOMDocument();
      $dom->loadHTML($php);

      $tags = $dom->getElementsByTagName('a');
        foreach ($tags as $tag) {
          $href = $tag->getAttribute('href');
          $href = basename($href);
          if (is_file($href) && !in_array($href, $hrefs)) {
              $hrefs[] = $href;
          }
      }

      $tags = $dom->getElementsByTagName('form');
      foreach ($tags as $tag) {
          $href = $tag->getAttribute('action');
          $href = basename($href);
          if (is_file($href) && !in_array($href, $hrefs)) {
              $hrefs[] = $href;
          }
      }

      $tags = $dom->getElementsByTagName('img');
      foreach ($tags as $tag) {
        $href = $tag->getAttribute('src');
        $href = basename($href);
        if (is_file($href) && !in_array($href, $hrefs)) {
            $hrefs[] = $href;
        }
      }

  }

}

print_r($hrefs, true);

1 Ответ

0 голосов
/ 28 февраля 2019

Я просто быстро соединил следующее, чтобы отсканировать каталог и подкаталоги, чтобы вывести список файлов в соответствии с обнаруженным содержимым в файлах - это может быть полезно.

<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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...