php_strip_whitespace

(PHP 5, PHP 7, PHP 8)

php_strip_whitespaceDevuelve el código fuente sin los comentarios y espacios blancos

Descripción

php_strip_whitespace(string $filename): string

Devuelve el código fuente PHP en nombre_archivo, habiendo removido los comentarios PHP y los espacios blancos. Esto puede ser útil para determinar la cantidad de código real en sus scripts, en comparación con la cantidad de comentarios. Esto es similar al uso de php -w desde la línea de comandos.

Parámetros

filename

Ruta al archivo PHP.

Valores devueltos

El código fuente limpiado será devuelto en caso de éxito, o una cadena vacía si ocurre un error.

Nota:

Esta función respeta el valor de la directiva ini para short_open_tag

Nota:

Esta función trabaja como se describe, a partir de PHP 5.0.1. Antes de esta versión, solo devolvía una cadena vacía. Para más información sobre este fallo y su comportamiento anterior, vea el reporte de fallos » #29606.

Ejemplos

Ejemplo #1 Ejemplo de php_strip_whitespace()

<?php
// Comentario PHP aquí

/*
* Otro comentario PHP
*/

echo php_strip_whitespace(__FILE__);
// Los saltos de línea son considerados espacios blancos, y son eliminados también:
hacer_nada();
?>

El resultado del ejemplo sería:

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

Note que los comentarios PHP han sido eliminados, al igual que los espacios blancos y la nueva línea después de la primera sentencia echo.

add a note

User Contributed Notes 5 notes

up
9
gelamu at gmail dot com
17 years ago
With this function You can compress Your PHP source code.<?phpfunction 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 commentfor ( $i = 0; $i < 99; $i ++ ) {   echo "i=${ 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>"
up
6
Jouni
17 years ago
If you wish to just remove excess whitespace from a string, see the example "Strip whitespace" in the preg_replace documentation (http://www.php.net/manual/en/function.preg-replace.php).
up
1
razvan_bc at yahoo dot com
6 years ago
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 tryecho removecomments('index.php');/*   hi there !!!here are the comments *///another tryfunction 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;}?>
up
1
flconseil at yahoo dot fr
19 years ago
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 !
up
-2
TK
16 years ago
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.<?phpfunction 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 === 1 ) {        $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?>
To Top