Для удаления многострочных комментариев вида /*...*/ я написал вот такую регулярку:
/\/\*(.|.*\n){0,}/
Тестировал ее на маленьком примере, все работает. Но как только на вход подается большой файл размером более 300 кб, сервер падает. Не могу решить, в чем проблема. Регулярка на нахождение и удаление однострочных комментариев работает исправно. Вот эти самые регулярки для однострочных комментариев:
/\/{2}[a-zA-Z].*/
/\/{2}\s.*/
Ложится как и Денвер, так и Апач на Убунту. В чем моя ошибка?
Вот полный код скрипта:
<?php
function slib_compress_script( $buffer ) {
$buffer = preg_replace("/\/{2}\s.*/", "", $buffer);//однострочные
$buffer = preg_replace("/\/{2}[a-zA-Z].*/", "", $buffer);//однострочные
//$buffer = preg_replace("/\/\*(.|.*\n){0,}/", "", $buffer);//Та самая регулярка на многострочные комментарии
return trim( $buffer );
}
$jsLibsPatch = "libs/";
$jsLibsData = '';
$pattern = '/\/\*[\s\S]*?\*\//';
$folder = scandir($jsLibsPatch);
foreach($folder as $file)
{
if(($file !=".") && ($file !="..")){
$jsFileName = $jsLibsPatch.$file;
$fileHandle = fopen($jsFileName, 'r');
$jsLibsDataNew = fread($fileHandle, filesize($jsFileName));
$jsLibsDataNew = slib_compress_script($jsLibsDataNew);
$jsLibsData .= "\n" . $jsLibsDataNew;
fclose($fileHandle);
}}
$jsPatch = "file/";
$jsData = '';
$folder = scandir($jsPatch);
foreach($folder as $file)
{
if(($file !=".") && ($file !="..")){
$jsFileName = $jsPatch.$file;
$fileHandle = fopen($jsFileName, 'r');
$jsDataNew = fread($fileHandle, filesize($jsFileName));
$jsDataNew = slib_compress_script($jsDataNew);
$jsData .= "\n" . $jsDataNew;
fclose($fileHandle);
}}
header("Content-Type: text/javascript");
if (isset($jsData)) {
//$jsLibsData = preg_replace('/\s+/', ' ', $jsLibsData);
//$jsData = preg_replace('/\s+/', ' ', $jsData);
$newJS = $jsLibsData."\n".$jsData;
echo $newJS;
} else {
echo "// Files not avalable or no files specified.";
}
?>