Aug 31, 2019

sedでphpのmysql関数名を一気に変更

phpの mysql モジュールが、 mysqli モジュールに変更となり、いよいよサーバーで動作しないことになったので、関数名を一気に変更することにした。

grep で、ソースファイルの当たりをつける

> grep mysql_ *.php >mysql_grep.txt

sed のスクリプトを用意

> cat ../test/sed.txt
s/mysql_close/mysqli_close/g
s/mysql_connect/mysqli_connect/g
s/mysql_error()/$GLOBALS['DB']->error/g
s/mysql_fetch_assoc/mysqliX_fetch_assoc/g
s/mysql_num_rows/mysqli_num_rows/g
s/mysql_query/mysqliX_query/g
s/mysql_real_escape_string/$GLOBALS['DB']->escape_string/g
s/mysql_select_db/mysqliX_select_db/g
s/mysql_insert_id/mysqli_insert_id($GLOBALS['DB'])/g
s/mysql_affected_rows(db_init())/mysqli_affected_rows(db_init())/g
s/mysql_affected_rows()/mysqli_affected_rows(db_init())/g
s/mysql_data_seek/mysqli_data_seek/g

大体、こんな感じ

(あらかじめ別ディレクトリoldへソースファイルをバックアップコピーもしておく)
(あらかじめ別ディレクトリnewへソースファイルをコピーしておきそこで作業)
sedで一気に変更

> sed -i -f ../test/sed.txt *.php

php の構文チェックをディレクトリの全ファイルまとめて行う

> find ./ -name "*.php" -exec php -l {} \;

後は、実行ディレクトリへ*phpをコピーして確認。
以下、互換性のための自作関数3個

function mysqliX_fetch_assoc($result)
{
$ret = mysqli_fetch_assoc($result);
if($ret == NULL){
$ret = false;
}
return $ret;
}
function mysqliX_query($query, $link)
{
return mysqli_query($link, $query);
}
function mysqliX_select_db($database_name, $link_identifier)
{
return mysqli_select_db($link_identifier, $database_name);
}

No comments:

Post a Comment