php_strip_whitespace

(PHP 5)

php_strip_whitespaceВозвращает исходный код без комментариев и пробелов

Описание

string php_strip_whitespace ( string $filename )

Возвращает исходный код PHP в файл (filename) исключая комментарии и пробелы. Эта функция может быть полезной для определения актуального объема чистого кода в скриптах по сравнению с объемом комментариев. Функция аналогична использованию php -w из командной строки.

Список параметров

filename

Путь к PHP файлу.

Возвращаемые значения

Возвращает очищенный исходный код, или пустую строку в случае ошибки.

Замечание:

Эта функция работает как описано в PHP 5.0.1. Перед этим может быть возвращена пустая строка. Для более детальной информации смотрите отчет об ошибках » #29606.

Примеры

Пример #1 Пример использования php_strip_whitespace()

<?php
// PHP комментарий

/*
 * Другой PHP комментарий
 */

echo        php_strip_whitespace(__FILE__);
// Символы новой строки считаются пробелами, и также удаляются:
do_nothing();
?>

Результат выполнения данного примера:

<?php
 echo php_strip_whitespace(__FILE__); do_nothing(); ?>

В результате выполнения примера выведен исходный код PHP, исключая комментарии, пробелы и пустые строки.

Коментарии

Beware that this function uses the output buffering mechanism.

If you give a 'stream wrapped' path as argument, anything echoed by the stream wrapper during this call (e.g. trace messages) won't be displayed to the screen but will be inserted in php_strip_whitespace's result.

If you execute this stripped code later, it will display the messages which should have been output during php_strip_whitespace's execution !
2006-07-08 11:57:36
http://php5.kiev.ua/manual/ru/function.php-strip-whitespace.html
Автор:
If you wish to just remove excess whitespace from a string, see the example "Strip whitespace" in the preg_replace documentation (function.preg-replace).
2007-10-03 08:14:39
http://php5.kiev.ua/manual/ru/function.php-strip-whitespace.html
With this function You can compress Your PHP source code.

<?php

function compress_php_src($src) {
   
// Whitespaces left and right from this signs can be ignored
   
static $IW = array(
       
T_CONCAT_EQUAL,             // .=
       
T_DOUBLE_ARROW,             // =>
       
T_BOOLEAN_AND,              // &&
       
T_BOOLEAN_OR,               // ||
       
T_IS_EQUAL,                 // ==
       
T_IS_NOT_EQUAL,             // != or <>
       
T_IS_SMALLER_OR_EQUAL,      // <=
       
T_IS_GREATER_OR_EQUAL,      // >=
       
T_INC,                      // ++
       
T_DEC,                      // --
       
T_PLUS_EQUAL,               // +=
       
T_MINUS_EQUAL,              // -=
       
T_MUL_EQUAL,                // *=
       
T_DIV_EQUAL,                // /=
       
T_IS_IDENTICAL,             // ===
       
T_IS_NOT_IDENTICAL,         // !==
       
T_DOUBLE_COLON,             // ::
       
T_PAAMAYIM_NEKUDOTAYIM,     // ::
       
T_OBJECT_OPERATOR,          // ->
       
T_DOLLAR_OPEN_CURLY_BRACES// ${
       
T_AND_EQUAL,                // &=
       
T_MOD_EQUAL,                // %=
       
T_XOR_EQUAL,                // ^=
       
T_OR_EQUAL,                 // |=
       
T_SL,                       // <<
       
T_SR,                       // >>
       
T_SL_EQUAL,                 // <<=
       
T_SR_EQUAL,                 // >>=
   
);
    if(
is_file($src)) {
        if(!
$src file_get_contents($src)) {
            return 
false;
        }
    }
   
$tokens token_get_all($src);
   
   
$new "";
   
$c sizeof($tokens);
   
$iw false// ignore whitespace
   
$ih false// in HEREDOC
   
$ls "";    // last sign
   
$ot null// open tag
   
for($i 0$i $c$i++) {
       
$token $tokens[$i];
        if(
is_array($token)) {
            list(
$tn$ts) = $token// tokens: number, string, line
           
$tname token_name($tn);
            if(
$tn == T_INLINE_HTML) {
               
$new .= $ts;
               
$iw false;
            } else {
                if(
$tn == T_OPEN_TAG) {
                    if(
strpos($ts" ") || strpos($ts"\n") || strpos($ts"\t") || strpos($ts"\r")) {
                       
$ts rtrim($ts);
                    }
                   
$ts .= " ";
                   
$new .= $ts;
                   
$ot T_OPEN_TAG;
                   
$iw true;
                } elseif(
$tn == T_OPEN_TAG_WITH_ECHO) {
                   
$new .= $ts;
                   
$ot T_OPEN_TAG_WITH_ECHO;
                   
$iw true;
                } elseif(
$tn == T_CLOSE_TAG) {
                    if(
$ot == T_OPEN_TAG_WITH_ECHO) {
                       
$new rtrim($new"; ");
                    } else {
                       
$ts " ".$ts;
                    }
                   
$new .= $ts;
                   
$ot null;
                   
$iw false;
                } elseif(
in_array($tn$IW)) {
                   
$new .= $ts;
                   
$iw true;
                } elseif(
$tn == T_CONSTANT_ENCAPSED_STRING
                       
|| $tn == T_ENCAPSED_AND_WHITESPACE)
                {
                    if(
$ts[0] == '"') {
                       
$ts addcslashes($ts"\n\t\r");
                    }
                   
$new .= $ts;
                   
$iw true;
                } elseif(
$tn == T_WHITESPACE) {
                   
$nt = @$tokens[$i+1];
                    if(!
$iw && (!is_string($nt) || $nt == '$') && !in_array($nt[0], $IW)) {
                       
$new .= " ";
                    }
                   
$iw false;
                } elseif(
$tn == T_START_HEREDOC) {
                   
$new .= "<<<S\n";
                   
$iw false;
                   
$ih true// in HEREDOC
               
} elseif($tn == T_END_HEREDOC) {
                   
$new .= "S;";
                   
$iw true;
                   
$ih false// in HEREDOC
                   
for($j $i+1$j $c$j++) {
                        if(
is_string($tokens[$j]) && $tokens[$j] == ";") {
                           
$i $j;
                            break;
                        } else if(
$tokens[$j][0] == T_CLOSE_TAG) {
                            break;
                        }
                    }
                } elseif(
$tn == T_COMMENT || $tn == T_DOC_COMMENT) {
                   
$iw true;
                } else {
                    if(!
$ih) {
                       
$ts strtolower($ts);
                    }
                   
$new .= $ts;
                   
$iw false;
                }
            }
           
$ls "";
        } else {
            if((
$token != ";" && $token != ":") || $ls != $token) {
               
$new .= $token;
               
$ls $token;
            }
           
$iw true;
        }
    }
    return 
$new;
}

?>

For example:
<?php

$src 
= <<<EOT
<?php
// some comment
for ( 
$i = 0; $i < 99; $i ++ ) {
   echo "i=
${ }\n";
   /* ... */
}
/** ... */
function abc() {
   return   "abc";
};

abc();
?>
<h1><?= "Some text " . str_repeat("_-x-_ ", 32);;; ?></h1>
EOT;
var_dump(compress_php_src($src));
?>

And the result is:
string(125) "<?php for(=0;<99;++){echo "i=\n";}function abc(){return "abc";};abc(); ?>
<h1><?="Some text ".str_repeat("_-x-_ ",32)?></h1>"
2008-04-10 17:12:53
http://php5.kiev.ua/manual/ru/function.php-strip-whitespace.html
Автор:
I was looking earlier for a way to strip php comments from my source files but didn't come up with much.  I wrote the following function to do the trick using the tokenizer.  I've tested in on an entire phpMyAdmin install and it worked fine afterward... so it should be good to go.  You may also specify any number of tokens to strip such as T_WHITESPACE rather the default of T_COMMENT and T_DOC_COMMENT.

Hopefully someone finds it useful.

<?php

function strip_tokens($code) {

   
$args func_get_args();
   
$arg_count count($args);
   
   
// if no tokens to strip have been specified then strip comments by default
   
if( $arg_count === ) {
       
$args[1] = T_COMMENT;
       
$args[2] = T_DOC_COMMENT;
    }

   
// build a keyed array of tokens to strip
   
for( $i 1$i $arg_count; ++$i )
       
$strip$args[$i] ] = true;

   
// set a keyed array of newline characters used to preserve line numbering
   
$newlines = array("\n" => true"\r" => true);

   
$tokens token_get_all($code);

   
reset($tokens);

   
$return '';

   
$token current($tokens);
   
    while( 
$token ) {

        if( !
is_array($token) )

           
$return.= $token;

        elseif(    !isset(
$strip$token[0] ]) )

           
$return.= $token[1];

        else {
           
           
// return only the token's newline characters to preserve line numbering
           
for( $i 0$token_length strlen($token[1]); $i $token_length; ++$i )
                if( isset(
$newlines$token[1][$i] ]) )
                   
$return.= $token[1][$i];

        }

       
$token next($tokens);

    } 
// while more tokens

   
return $return;

// function

?>
2009-05-22 21:07:43
http://php5.kiev.ua/manual/ru/function.php-strip-whitespace.html
i notice that on 45=75kb php file compressed using php_strip_whitespace i got slowest speed results in my apache benchmark  .bat tests so doing on a normal php file 10 tests and another 10 tests on a compressed one ,calculating the math average value  I got fastest results on  normal php files.

well,seeing that results i think  SO ,NICE,BUT IF WE COMBINE THESE "METHODS" : what if i use a partial minified method using this function ????

here is the code:
(if you run this in xampp and you are beginner you got a blank page in firefox  ,but if you right click it then you click on the option "view source" you'll get the php partial stripped by comments and tabs) :

<?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;
}

?>
2019-05-20 14:48:03
http://php5.kiev.ua/manual/ru/function.php-strip-whitespace.html

    Поддержать сайт на родительском проекте КГБ