PHP читает комментарии к файлу НЕ содержимое файла - забыто - PullRequest
3 голосов
/ 12 июля 2010

Извините, ребята, забыли об этом, мне нужно прочитать первый «пакет» комментариев в примере с php-файлом:

<?php
/** This is some basic file info **/
?>
<?php This is the "file" proper" ?>

Мне нужно прочитать первый комментарий в другом файле, но я полностью забыл, как получить / ** Это некоторая базовая информация о файле ** / в виде строки Извините, но спасибо в adavance

Ответы [ 5 ]

13 голосов
/ 12 июля 2010

Существует функция token_get_all($code), которая может использоваться для этого, и она более надежна, чем вы могли подумать.

Вот несколько примеров кода для получения всех комментариев из файла (это не проверено, но должно бытьдостаточно, чтобы начать):

<?php

    $source = file_get_contents( "file.php" );

    $tokens = token_get_all( $source );
    $comment = array(
        T_COMMENT,      // All comments since PHP5
        T_ML_COMMENT,   // Multiline comments PHP4 only
        T_DOC_COMMENT   // PHPDoc comments      
    );
    foreach( $tokens as $token ) {
        if( !in_array($token[0], $comment) )
            continue;
        // Do something with the comment
        $txt = $token[1];
    }

?>
1 голос
/ 18 апреля 2016

Я думаю, вы тоже можете попробовать это.

/**
* Return first doc comment found in this file.
* 
* @return string
*/
function getFileCommentBlock($file_name)
  {
    $Comments = array_filter(
       token_get_all( file_get_contents( $file_name ) ),function($entry) {
           return $entry[0] == T_DOC_COMMENT;
       }
   );
    $fileComment = array_shift( $Comments );
    return $fileComment[1];
}
0 голосов
/ 12 июля 2010
function find_between($from,$to,$string){
   $cstring = strstr($string, $from);
   $newstring = substr(substr($cstring,0,strpos($cstring,$to)),1);
   return $newstring;
}

тогда просто позвоните: $comments = find_between('/\*\*','\*\*/',$myfileline);

0 голосов
/ 12 июля 2010

Используйте это:

preg_match("/\/\*\*(.*?)\*\*\//", $file, $match);
$info = $match[1];
0 голосов
/ 12 июля 2010

Это то, что вы имеете в виду?

$file_contents = '/**

sd
asdsa
das
sa
das
sa
a
ad**/';

preg_match('#/\*\*(.*)\*\*/#s', $file_contents, $matches);

var_dump($matches);
...