slateclub
Постоялец
- Регистрация
- 5 Ноя 2008
- Сообщения
- 71
- Реакции
- 4
- Автор темы
- #1
Возникла необходимость поиска устаревших функций во всех файлах скрипта. В связи с этим набросал такую программку (может кому-то это тоже пригодится как и мне)
PS Вопрос к знатокам регулярных выражений: как можно найти в строке наличие переменной (например "$_POST['user']", или просто "$var=")
PHP:
<?php
//error_reporting(E_ALL & !~E_NOTICE);
header('Content-Type: text/html; charset=utf-8');
//--- устаревшие функции
$patterns=array('call_user_method', 'call_user_method_array', 'define_syslog_variables', 'dl', 'ereg', 'ereg_replace', 'eregi', 'eregi_replace', 'set_magic_quotes_runtime', 'session_register', 'session_unregister', 'session_is_registered', 'set_socket_blocking', 'split', 'spliti', 'sql_regcase', 'mysql_db_query', 'mysql_escape_string', 'setlocale', 'is_dst');
//--- поиск строки
function searchStr($pattern, $string){
if (preg_match('/\b'.$pattern.'\b/u', $string)){ return 1; }
return 0;
}
//--- проверка на картинку
function searchImages($string){
if (preg_match('/\.(?:jp(?:e?g|e|2)|gif|png|tiff?|bmp|ico)$/i', $string)){ return 1; }
return 0;
}
//--- рекурсивное сканирование
function getArrayFiles($path_dir) {
$array_path = array();
$dir = new RecursiveDirectoryIterator($path_dir);
foreach(new RecursiveIteratorIterator($dir) as $val) {
if($val->isFile()) {
$array_path[] = $val->getPathname();
}
}
return $array_path;
}
//--- список текущих папок в директории
function getArrayDir() {
$array_dir = array();
if ($handle = opendir('.')) {
while (false !== ($entry = readdir($handle))) {
if ($entry != "." && $entry != ".." && is_dir($entry)) {
$array_dir[]=$entry;
}
}
closedir($handle);
}
return $array_dir;
}
$dirArr=getArrayDir();
?>
<h3>Поиск упоминания в файлах директории</h3>
<form method="POST" action="<?php echo $_SERVER['PHP_SELF']?>">
<p>Папка поиска:
<select size="1" name="D1">
<option selected <?php if ($_POST['D1']){echo 'value="'.$_POST['D1'].'">'.$_POST['D1']; } else {echo 'value=".">Выбрать папку';} ?></option>
<?php
foreach ($dirArr as $d){
echo '<option value="'.$d.'">'.$d.'</option>';
}
?>
</select>
<p>Поиск устаревших функций? <input type="checkbox" name="C1" value="ON"></p>
<p>Или строка поиска: <input type="text" name="T1" size="20" value="<?php echo @$_POST['T1']; ?>"></p>
<p><input type="submit" value="Найти" name="B1"></p>
</form>
<?php
if ($_SERVER['REQUEST_METHOD']=='POST'){
//$pattern=preg_quote($_POST['T1']);
$pattern=$_POST['T1'];
if ($pattern=='' && $_POST['C1']!='ON') {
echo '<b>Нужно указать строку для поиска или отметить "Поиск устаревших функций"!</b>'; exit;
}
if ($_POST['D1']==''){ $dir='.'; } else { $dir=$_POST['D1']; }
//---
$arr=getArrayFiles($dir);
$c=count($arr);
//---
for($i=0;$i<$c;$i++){
if(searchImages($v)){
continue;
} else {
$fileArr=file($arr[$i]);
if($_POST['C1']=='ON'){
foreach($fileArr as $numLine=>$line){
foreach ($patterns as $pat){
if (searchStr($pat, $line)){
echo 'Функция <font color="#0000FF"><b>'.$pat.'</b></font> в файле: <font color="#008000"><b>'.$arr[$i].'</b></font> в строке <b>('.($numLine+1).')</b><br/>';
}
}
}
} else {
foreach($fileArr as $numLine=>$line){
if (searchStr($pattern, $line)){
echo 'Запись <font color="#0000FF"><b>'.$pattern.'</b></font> встретилась в файле: <font color="#008000"><b>'.$arr[$i].'</b></font> в строке <b>('.($numLine+1).')</b><br/>';
}
}
}
}
}
}
PS Вопрос к знатокам регулярных выражений: как можно найти в строке наличие переменной (например "$_POST['user']", или просто "$var=")