Qest

Qest
Рейтинг
40
Регистрация
21.10.2010
Должность
Coder
Интересы
Unix, Jquery

Не нашел подходящего варианта, сделал сам. Кому-то возможно пригодится

<?
function listdir($start_dir='.') {

$files = array();
if (is_dir($start_dir)) {
$fh = opendir($start_dir);
while (($file = readdir($fh)) !== false) {
if (strcmp($file, '.')==0 || strcmp($file, '..')==0) continue;
$filepath = $start_dir . '/' . $file;
if ( is_dir($filepath) )
$files = array_merge($files, listdir($filepath));
else
array_push($files, $filepath);
}
closedir($fh);
} else {
$files = false;
}

return $files;

}

$files = listdir('.');

for($i=0;$i<count($files);$i++) {
$file=$files[$i];
if(substr($file, -3) == "php" && $file != "./compressor.php") {
$file_cleared = php_strip_whitespace($file);

$file_cleared = preg_replace('#\s*/\*.*?\*/\s*#i', "", $file_cleared);

$patterns[] = '/: /';
$patterns[] = '/\n/';
$patterns[] = '/ == /';
$patterns[] = '/ = /';
$patterns[] = "/\+ /";
$patterns[] = "/ \+/";
$patterns[] = '/ === /';
$patterns[] = '/ /';
$patterns[] = '/ /';
$patterns[] = '/ /';
$patterns[] = '/ /';
$patterns[] = '/ /';
$patterns[] = "/\t/";
$patterns[] = "/\<\?php/";
$patterns[] = "/\} /";
$patterns[] = "/ \}/";
$patterns[] = "/ \{/";
$patterns[] = "/\{ /";
$patterns[] = "/\) /";
$patterns[] = "/ \)/";
$patterns[] = "/ \(/";
$patterns[] = "/\( /";
$patterns[] = "/\> /";
$patterns[] = "/\; /";
$patterns[] = "/\, /";

$replacements[] = ':';
$replacements[] = '';
$replacements[] = '==';
$replacements[] = '=';
$replacements[] = '+';
$replacements[] = '+';
$replacements[] = '===';
$replacements[] = ' ';
$replacements[] = ' ';
$replacements[] = ' ';
$replacements[] = ' ';
$replacements[] = ' ';
$replacements[] = '';
$replacements[] = '<?';
$replacements[] = '}';
$replacements[] = '}';
$replacements[] = '{';
$replacements[] = '{';
$replacements[] = ')';
$replacements[] = ')';
$replacements[] = '(';
$replacements[] = '(';
$replacements[] = '>';
$replacements[] = ';';
$replacements[] = ',';
$finish = preg_replace($patterns, $replacements, $file_cleared);
file_put_contents($file,$finish);
echo $file,"<br>";
}
}
?>

Файл сканирует все файлы в том числе подпапки начиная с той где он находиться, изменяет их и перезаписывает(в данном примере только файлы с расширением php).

Удаляет комментарии в php,js. В JS комментарии должны быть так /* ... */, а не так //

Удалает пробелы и табуляцию и делать все в одну строку.

Так же изменяет(удаляет пробелы) код по заданным условиям.

Код может быть смешанным (php,js,html,css) все работает ок.

---

Условия писал какие в голову только пришли, поэтому список требует корректировки и добавления.

Так же не решена проблема c удалением комментариев в html, и комментариев вида // (мне этого было достаточно)

---

Буду признателен за корректировку кода, для достижения лучшего результата.

DiAksID, господи, да откуда ж вас столько берется псевдогениев которые все знают. minify работает с JS и CSS файлами только, а речь идет по крайней мере о html,css,js,php как одно целое, следовательно не решает проблемы описанной выше (если код смешанный)

DiAksID:
всё можно сделать, хотя и не одним, а последовательность 3-х/4-х preg_replace. аккуратно и так как нужно кодеру: и форматированные участки можно защитить от изменения, а уж комменты всех видов вырезаются вообще без проблем (вопрос о них, мягко говоря, выглядит смешно).

ЗЫ: времени на то что бы включить мозг и отладить этот простенький алгоритм нужно значительно меньше чем дождаться здесь "подарка". хотя каждому своё...

Ну конечно, как у вас все просто. Раз два и все. Тут куча разных мелочей и факторов, к примеру код может быть смешанным, в одном файле и php и js и html. В Js к примеру в конце строки не обязательно ставить ;, а если в одну строку то должно быть. Не говоря уже о единичных пробелах. И если у тебя 100 файлов, я неделю буду их вручную делать так.

Конечно можно написать код который это будет делать, но зачем изобретать велосипед если возможно кто-то его уже написал.

Например как здесь.

DiAksID:

а делается все одной preg_replace буфера вывода...

Ну это грубо. Как в таком случае определить единичные пробелы которые лишние. Может у меня в тексте на странице есть единичные пробелы и я их всех удалю. Где >=2 впринципе можн и так.

К тому же что делать с комментариям.

UPD:

Ищется похожее на такое:

webtoolhub

veterinar:
так пишу вам используйте сессии

Прочитайте тему полностью, сессии уже обсуждались!

siv1987:
В смысле модератора, и таким образом, каким вы определяете пользователя в других местах. Посмотрите у любой кмс как там устроено где есть распределения прав, без никаких "скрытых" путей и файлов. Если файл может быть выполнен напрямую, или он отработает при прямом обращений без его включения в других файлах, должна быть проверка на право выполнением этим пользователем (юзером/гостем/модератором).

Не понял, опишите процедуру такой проверки. Если вы имеете в виду например если пользователь незалогинен то просто даже и не показывать ему этот инпут, то в этом и дело что если я могу напрямую обратиться к исполняющему файлу то как этот исполняющий файл проверит что я незалогинен. Он может проверить только посредством каких то параметров которые я ему передам (GET, POST). А эти параметры я могу отправить вручную

siv1987:
Что мешает на файл обработчик поставить проверку на выполнения только определенным лицам? У вас не совсем правильно построена логика работы. Обработка обязательно должны быть и на стороне сервера.

Это вы не совсем вникли в суть вопроса. Всмысле поставить проверку на выполнение только определенным лицам, каким образом? Если вы имеете в виду chmod то даже если я поставлю все только для рута, то запрос к этому файлу идет от браузера через аякс, а значит он просто не сработает в таком случае вообще.

Sigmo#ID:
А что мешает удалять всё что угодно через инпут? Значит у вас фильтр в аяксе, то есть на стороне клиента. Переносите основной фильтр на сторону сервера. На клиенте фильтр должен быть только для удобства пользователя, доверять ему нельзя.

Если этот скрипт можно будет выполнить только с определенного места, то я смогу контролировать человека который это делает. К примеру можно сделать чтобы доступ к странице где аякс на удаление был только у модератора. А это значит что удалять сможет только модератор

Опасаюсь: у меня есть несколько аякс выполнений. Где например человек чтото вводит в инпут, аякс забирает это значение и переправляет в файл который записывает это в базу или например удаляет это с базы. Тоесть если ктото может получить доступ к этому исполняющему файлу то он может вносить и удалять из базы все что угодно.

Прошу извинить, при аяксе я форм не использую просто инпуты, селекты. Я про форму написал для примера.

Всего: 186