Лучший способ автоматически удалять комментарии из кода PHP - PullRequest
45 голосов
/ 02 февраля 2009

Какой лучший способ удалить комментарии из файла PHP?

Я хочу сделать что-то похожее на strip-whitespace () - но оно также не должно удалять разрывы строк.

EG:

Я хочу это:

<?PHP
// something
if ($whatsit) {
    do_something(); # we do something here
    echo '<html>Some embedded HTML</html>';
}
/* another long 
comment
*/
some_more_code();
?>

стать:

<?PHP
if ($whatsit) {
    do_something();
    echo '<html>Some embedded HTML</html>';
}
some_more_code();
?>

(Хотя, если в комментариях нет пустых строк, это не будет нормально).

Это может быть невозможным из-за необходимости сохранения встроенного html - вот что запутало вещи, которые появились в Google.

Ответы [ 12 ]

0 голосов
/ 20 мая 2019

в 2019 году может работать так

<?php
/*   hi there !!!
here are the comments */
//another try

echo removecomments('index.php');

/*   hi there !!!
here are the comments */
//another try
function removecomments($f){
    $w=Array(';','{','}');
    $ts = token_get_all(php_strip_whitespace($f));
    $s='';
    foreach($ts as $t){
        if(is_array($t)){
            $s .=$t[1];
        }else{
            $s .=$t;
            if( in_array($t,$w) ) $s.=chr(13).chr(10);
        }
    }

    return $s;
}

?>

если вы хотите увидеть результаты, просто давайте сначала запустим его в xampp, затем вы получите пустую страницу, но если вы щелкните правой кнопкой мыши и выберите источник просмотра, вы получите скрипт php ... он загружается сам и удаляет все комментарии, а также вкладки. Я тоже предпочитаю это решение, потому что я использую его, чтобы ускорить мой фреймворк с одним файловым движком "m.php", и после php_strip_whitespace весь исходный код без этого скрипта, который я наблюдаю, работает медленнее: я сделал 10 тестов, а затем вычислил математическое среднее (я думаю, что php 7 восстанавливает пропущенные данные cr_lf, когда выполняет синтаксический анализ или занимает некоторое время, когда они отсутствуют)

0 голосов
/ 02 февраля 2009

Загвоздка в том, что менее надежный алгоритм сопоставления (например, простое регулярное выражение) начнет отсекаться, когда явно не должен:

if (preg_match('#^/*' . $this->index . '#', $this->permalink_structure)) {  

Это может не повлиять на ваш код, но в конце концов кто-то получит кусочек от вашего скрипта. Поэтому вам придется использовать утилиту, которая понимает больше языка, чем вы могли бы ожидать.

-Adam

...