|
|
php_strip_whitespace (PHP 5) php_strip_whitespace --
Return source with stripped comments and whitespace
Описаниеstring php_strip_whitespace ( string filename )
Returns the PHP source code in filename with
PHP comments and whitespace removed. This may be useful for determining the
amount of actual code in your scripts compared with the amount of comments.
This is similar to using php -w from the
commandline.
Замечание:
This function works as described as of PHP 5.0.1. Before this it would
only return an empty string. For more information on this bug and its
prior behavior, see bug report
#29606.
Возвращаемые значения
The stripped source code will be returned on success, or an empty string
on failure.
Примеры
Пример 1. php_strip_whitespace() example |
<?php
echo php_strip_whitespace(__FILE__);
do_nothing();
?>
|
Результат выполнения данного примера: <?php
echo php_strip_whitespace(__FILE__); do_nothing(); ?> |
Notice the PHP comments are gone, as are the whitespace and newline
after the first echo statement.
|
add a note
User Contributed Notes
php_strip_whitespace
Zvjezdan Patz
13-Sep-2007 08:14
I was given a report that was separated by spaces and asked to make graphs from it. I needed to turn the report data into a csv in memory so I could manipulate it further.
First needed to see the report, then need to strip out the whitespace, but leave one space between each item that I could convert to a column.
There were lots of complicated ways to do this. I stumbled on something simple.
Say the report looks like this:
Monday Tuesday Wednesday Thursday Friday Saturday Sunday
1 5 7 8 10 7 8
7 15 4 0 21 4 12
9 5 7 9 0 9 43
The report is using spaces and not tabs to separate everything. Assume it's a file called data.txt you can use the following to strip out the spaces and make it comma delimited:
<?php
$handle = @fopen("data.txt", "r");
if ($handle)
{
while (!feof($handle))
{
$buffer = fgets($handle, 4096);
print nl2br(str_replace(" ", ",",ereg_replace( ' ', ' ',ereg_replace( ' ', ' ', ereg_replace( ' ', ' ', ereg_replace( ' ',' ',$buffer ))))));
}
}
fclose($handle);
?>
Hope that helps someone else.
natio at phpfox dot com
05-Sep-2007 11:21
Notice: In my last comment for this function I failed to add some important parts of the function. So I have re-added it here. Feel free to delete my earlier comment. Thanks!
---
To use php_strip_whitespace in (PHP 4 >= 4.2.0) you could try the function below. This function also helps solve the issues with php_strip_whitespace not fully removing new lines and extra whitespace's in HTML when embedded with PHP.
<?php
if (!defined ('T_ML_COMMENT'))
{
define ('T_ML_COMMENT', T_COMMENT);
}
if (!defined ('T_DOC_COMMENT'))
{
define ('T_DOC_COMMENT', T_ML_COMMENT);
}
function StripWhitespace($sFileName)
{
if ( !is_file($sFileName) )
{
return false;
}
$sContent = implode('', file($sFileName));
$aTokens = token_get_all($sContent);
$bLast = false;
$sStr = '';
for ( $i = 0, $j = count($aTokens); $i < $j; $i++ )
{
if ( is_string($aTokens[$i]) )
{
$bLast = false;
$sStr .= $aTokens[$i];
}
else
{
switch ( $aTokens[$i][0] )
{
case T_COMMENT:
case T_ML_COMMENT:
case T_DOC_COMMENT:
break;
case T_WHITESPACE:
if (!$bLast)
{
$sStr .= ' ';
$bLast = true;
}
break;
default:
$bLast = false;
$sStr .= $aTokens[$i][1];
break;
}
}
}
$sStr = trim($sStr);
$sStr = str_replace("\n", "", $sStr);
$sStr = str_replace("\r", "", $sStr);
return $sStr;
}
?>
nyctimus at yahoo dot com
03-May-2007 02:01
Here's one for CSS:
<?php
function css_strip_whitespace($css)
{
$replace = array(
"#/\*.*?\*/#s" => "", "#\s\s+#" => " ", );
$search = array_keys($replace);
$css = preg_replace($search, $replace, $css);
$replace = array(
": " => ":",
"; " => ";",
" {" => "{",
" }" => "}",
", " => ",",
"{ " => "{",
";}" => "}", ",\n" => ",", "\n}" => "}", "} " => "}\n", );
$search = array_keys($replace);
$css = str_replace($search, $replace, $css);
return trim($css);
}
?>
A word on the first regular expression, since it took me a while.
It strips C style comments. /* Like this. */
#/\*.*?\*/#s
^ ^
The pound signs at either end quote the regex. They don't match anything.
#/\*.*?\*/#s
^
The s at the very end sets the PCRE_DOTALL modifier. More info here:
http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php
# /\* .*? \*/ #s
1 2 3
The expression itself consists of 3 parts:
1. the opening comment sequence, represented by /\*
2. everything in the middle, represented by .*?
3. and the closing comment sequence, represented by \*/
#/\*.*?\*/#s
^ ^
The comment asterisks are escaped. If I had used the more common / for PCRE quoting I would've had to escape those too.
#/\*.*?\*/#s
^
The ? prevents the regex from being greedy. See halfway down this page:
http://www.php.net/manual/en/reference.pcre.pattern.syntax.php
flconseil at yahoo dot fr
08-Jul-2006 08:57
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 !
mwwaygoo AT hotmail DOT com
27-Apr-2006 09:17
I thought this was a nice function until I realised it wouldnt strip down html. As i'd been reading an article on compressing output to speed up delivery.
So I wrote a little one to do that for me. Here its is, incase people were looking for a html version. It may need tweaking, like with existing 's.
<?php
function strip_html($data)
{
$data=preg_replace_callback("/>[^<]*<\\/textarea/i", "harden_characters", $data);
$data=preg_replace_callback("/\\"[^"<>]+\\"/", "harden_characters", $data);
$data=preg_replace("/(//.*n)/","",$data); // remove single line comments, like this, from // to \\n
$data=preg_replace("/(t|r|n)/","",$data); // remove new lines \\n, tabs and \\r
$data=preg_replace("/(/*.**/)/","",$data); // remove multi-line comments /* */
$data=preg_replace("/(<![^>]*>)/","",$data); // remove multi-line comments <!-- -->
$data=preg_replace('/(\\s+)/', ' ',$data); // replace multi spaces with singles
$data=preg_replace('/>\\s</', '><',$data);
$data=preg_replace_callback("/"[^\\"<>]+"/", "unharden_characters", $data);
$data=preg_replace_callback("/>[^<]*<\\/textarea/", "unharden_characters", $data);
return $data;
}
function harden_characters($array)
{
$safe=$array[0];
$safe=preg_replace('/\\n/', "%0A", $safe);
$safe=preg_replace('/\\t/', "%09", $safe);
$safe=preg_replace('/\\s/', " ", $safe);
return $safe;
}
function unharden_characters($array)
{
$safe=$array[0];
$safe=preg_replace('/%0A/', "\\n", $safe);
$safe=preg_replace('/%09/', "\\t", $safe);
$safe=preg_replace('/ /', " ", $safe);
return $safe;
}
?>
The article code was similar to this, which shouldn't work as php_strip_whitespace takes a filename as input:-
<?php
$data=ob_get_contents();
ob_end_clean();
if(strstr($_SERVER['HTTP_ACCEPT_ENCODING'],'gzip'))
{
$data=gzencode(php_strip_whitespace($data),9);
header('Content-Encoding: gzip');
}
echo $data;
?>
dnc at seznam dot cz
21-Oct-2005 03:01
This function can not be used to strip comments outside <?php ... ?>
// this comment will not be removed
<?php
?>
amedee at amedee dot be
09-Jul-2005 05:29
Not only can this be used for JavaScript files, but also for:
* Java source code
* CSS (Style Sheets)
* Any file with C-style comments.
|