DDNSが動かなくなった
つい先日リモートサイトにアクセスしていて、そこのルーターの設定を変更していました。そして変更結果を反映させるためにルーターが再起動を始めたと同時に接続が切れました。そこは動的IPアドレスなサイトなのでIPアドレスが変わったためです。それですぐにDDNSがIPアドレスをアップデートしてくれてまたつながるはずなのにつながらないのです。で、調べてみるとDDNSサーバー側でPHPがエラーを吐いていました。そういえば今まで延ばしに延ばしていたPHP5からPHP7へのアップグレードを先月に行ったのをやっと思い出しました。そしてPHP7からはMySQL関数がサポートされなくなっていたのに今まで気が付いていなかったというお粗末な顛末でした。最近はルーターを再起動させるとかしないとIPアドレスは全然変わってくれないので全くぬかっていました。とほほ。
そこで対策なのですが、MySQL関数の代わりにMySQLi関数を使ってコードを書き直すことにしました。調べてみるとPDOという方法もあるそうですが、これも全面書き換えになるので、今回は多少は元と似ているMySQLi関数の方が手っ取り早いと思い選びました。
MySQLi関数に書き直したコード達
以下のリストが書き直したコードになります。
- IPアドレスの更新(POST) (./ddnsupdate.php)
- IPアドレスの更新(GET) (./nic/update)
- Hostnameの情報表示 (./ddnsshowhostname.php)
- Hostnameの登録 (./ddnsaddhostname.php)
- Hostnameの削除 (./ddnsdeletehostname.php)
- ドメイン名の登録追加 (./ddnsadddomain.php)
- ドメイン名の登録削除 (./ddnsdeletedomain.php)
- ユーザーIDの登録 (./ddnsadduser.php)
- ユーザーIDの削除 (./ddnsdeleteuser.php)
- サイト共通設定情報 (./ddnscommon.php)
- HTMLヘッダ生成 (./ddnsheader.php)
- DDNSメイン登録画面 (./ddnsadmin.php )
- 古いデーター削除 (./del_nday_file.php) (これの代わりです。)★
- ランダム文字列生成 (./rand_str.php) (これと同じものです。)★
- DDNSクライアント用IPアドレスチェック (./check_ip.php)★
- apache24-2.4.41
- php73-7.3.9
- php73-mysqli-7.3.9
- mysql56-server-5.6.45
- bind914-9.14.5
(注:★印は前回から変更なし)
今回の変更ではインターフェース仕様などは前回から一切変更していません。ひたすらMySQL関数をMySQLi関数に置き換えることと、変数の扱いが変わって動かなくなってる部分を修正し、あとは前回のエントリーのコメントで頂いたアドバイスを元にfilter_varを使ったIPアドレスのチェックなどを入れました。
それから、zip化の要望もありましたので、tar.gzで固めたもの (ddns-1.1.tar.gz)も作成しました。このまま解凍するとddnsディレクトリが出来ます。その中のddnscommon.phpとnic/.htaccessを適切に設定すればそのまま動くはずです。もちろんMySQLのDB作成やDNSの設定などは必要です。
設定方法は前回と変わりませんので、こちら(DDNSサービスを作ってみる)を参照してください。
動作環境
以上