Цитата(nerezus @ 28.11.2009, 19:51 ) | | 1) Рефакторинг автоматическими средствами не пойдет - все слишком сложно. |
Тут всего лишь замена, поэтому как раз несложно.
Необходимо составить регулярное выражение, выцепляющее имена таблиц в SQL-запросах. Поэтому тут важен код. Мне лично его искать лень.
| Код | <?php
function rec_preg_replace($pattern, $rep, $dir, $exception = array()) { if( @preg_match($pattern, '') === false ) return;
$dir = chop($dir, '/\\');
$dh = opendir($dir);
while( ( $file = readdir($dh) ) !== false ) { if( $file == '.' || $file == '..' || in_array($file, $exception) ) continue;
if( is_file($dir . '/' . $file) ) { $contents = file_get_contents($dir . '/' . $file); $contents = preg_replace($pattern, $rep, $contents); file_put_contents($dir . '/' . $file, $contents); } else { rec_preg_replace($pattern, $rep, $dir . '/' . $file, $exception); } }
closedir($dh); }
rec_preg_replace('/(?<=\\s|`)(таблица1|таблица2|таблица3)(?=\\s|`|.)/', '{$tbl_prefix}_\\0', './dir'); ?>
|
Произойдёт замена "таблица1" на "{$tbl_prefix}_таблица1" во всех файлах директории dir. Конкретный пример расчитан на то, что SQL-запрос взят в двойные кавычки.
Потом остаётся написать в конфигурационном файле
| Код | <?php
$tbl_prefix = 'my_prefix';
?>
|
Но для таких вещей надо перед вызовом этой функции обязательно делать копию скрипта, потому что эта функция может его попросту испортить при неправильном рег. выражении. |