PHPヴァージョンアップ備忘録

旧の掲示板は,「画像掲示板plus」というPHPで書かれたものを使ってました。このプログラム(スクリプト)は,「LEMON-S PHP」というHPに掲載されていたものです。あまり需要がないのか,更新が途絶えているようで,サポート掲示板も,2016年の作者の書き込みを最後に,更新されてないようです。2016年は,PHP7になった頃でしょうか,サポートにもPHP7で「画像掲示板plus」を動かすにはどうすればいいか,ちょっとだけ記述がありました。
この旧掲示板は,私にとってもいろいろな情報が残ってるので,表示だけは残したかったので,PHPの初心者の私が,ネットサーフィンをたよりに,V5⇒V7にアップデートしても動くように,無謀な挑戦をしたところです。
「LEMON-S PH」には,まだ,PHPのスクリプトが残ってますので,2015年に更新されたv2.36をDLしました。このファイルは,このままだと文字化けを起こしますので,

    SHIFT-JIS⇒⇒UTF-8

のように変換して,保存しました。また,サーバー上に残ってる,「imglog.log」というCSV形式のデータもUTF-8で保存しなおしました。
一方,最低限必要なPHPとアパッチをどうするか迷いましたが,それぞれにインストールすると細かい設定が面倒そうで,デバック環境を作るだけでも時間がかかりそうなので,諸兄のHPを見ながら,「XAMPP」という,PHPプログラム作成の環境を一括インストールで作成できるものを導入しました。

導入後早速その環境で,該当するプログラムを動作させ,あれこれ始めました。また,公開しているHPのようにまっしろかなと思いましたが,

    Warning: Use of undefined constant

という警告が20以上でてきました。

意味がわからなかったのですが,ネットくぐってみると,該当の行の該当の項目に「’ ‘」の記述がないことが原因であることがわかりました。そこで,

    修正前・・・・・・define(LOGFILE, ‘imglog.log’);
    修正後・・・・・・define(‘LOGFILE’, ‘imglog.log‘);

のように変更しました。defineの括弧の後半(赤字部分)が数字の場合,シングルクーテーションがあるところとないところがあり,その違いが分かりませんでしたが,下記のように統一しました。

    修正後・・・・・・define(‘MAX_KB’, 500)

これで,「Warning」はほとんどなくなりました。PHP5では,このシングルクオーテーションがなくても,きちんと動いてた様で,PHP7では,そのチェックが一層厳しくなったそうで,この結果になってるようです。

まだ消えないエラー表示を見てみると

    Fatal error: Uncaught Error: Call to undefined function eregi()

というのがあり,これも調べてみると,PHP5で使われていた備え付けの関数がPHP7では,廃止になったとのことで,代替えの関数として,

    preg_match

が使えるとのことなので,

    修正前・・・・・・eregi($value,$ref)
    修正後・・・・・・preg_match(‘/$value/i’,$ref)

のように変更。このFatal error:があるとプログラムはそこで,止まってしまうようで,もう一カ所修正箇所がありました。

修正前・・・ereg_replace(“(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)”,”<a href=\”\\1\\2\” target=\”_blank\”>\\1\\2</a>”,$proto);
修正後・・・preg_replace(“/(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)/“,”<a href=\”\\1\\2\” target=\”_blank\”>\\1\\2</a>”,$proto);
再修正・・・preg_replace(“/(https?|ftp|news)(:\/\/[[:alnum:]\+\$\;\?\.%,!#~*\/:@&=_-]+)/”,”<a href=\”\\1\\2\” target=\”_blank\”>\\1\\2</a>”,$proto);

 

修正後,懐かしい画面の片割れがでてきましたので,ここでも少し「やった。」になりました。懐かしい画面と一緒にでてきたのは,書き込みの表題だけでした。

修正したものを見ると,再修正が必要で,最終的に,青で示したエスケープシーケンスを挿入すると,コメントまで表示できました。

PHP側で,正規表現のはじめ「/」と,終わのりを意味する「/」の他にあるスラッシュを区別する必要があり,区切りでないスラッシュは,「¥/」とする必要がありました。

表題・コメントが表示できたのはいいのですが,それと同時に大量のNOTICEがでてきました。

   Notice: Undefined variable: r_com

調べてみると,定義してない(NULL)状態の変数に操作をしているために起きるようで,それぞれの変数の直前に

    r_com=””

という記述で,変数は空(何も入ってないですよということらしい)ということを代入して,このNotice:を消しました。

その後,どうしても画像を表示できず,画像を操作していると思われるところを一つ一つ確認していきました。結局,WINDOWSの環境でデバックをしていましたので,ドライブの指定が間違っていて,小文字を大文字に変えたら,あっけなく表示できました。思わず,そばにいた妻に「やっった。」と叫んで,そのわけを説明しました。という訳で長い道のりでしたが表示だけできました。

でも,どうしても消せないNotice:があるので,あれこれこも調べましたが,プログラムで表示させなくできるということで,PHPのファイルの冒頭に,

error_reporting(E_ALL & ~E_NOTICE);

を記入することで,消すことにしました。しかし,消してみると新たに,

Deprecated: Function get_magic_quotes_gpc()

というエラー出てきました。これも調べてみると,PHP7では,実装されてなくて,常にFALSEを返すということで,該当の部分には,

 if(get_magic_quotes_gpc()) $gazoubbs = stripslashes($gazoubbs);

のような記述で,get_magic_quotes_gpc()が有効なら$gazoubbs = stripslashes($gazoubbs)を実行するということでした。常にFALSEを返すことから,$gazoubbs = stripslashes($gazoubbs)は実行されないので,ここは,削除することにしました。

これで,やっと,エラーも表示されなくなり,閲覧だけできるようになりました。

{追記}PHPのプログラムを追っていくなかでいくつか分からない表現にであいました。
      .$value.
    のような表現で,これも調べてみると,文字の結合を表す表現でした。分かったのもありますが,
        $dat.=’     のような表現が所々に,あり,このシングルクオ-テンションの意味が未だに不明です。単に$datに    「`」を結合するものなんでしょうか。

モグラ君久しぶりにつかまりました。

今年は,比較的モグラの被害が少なかったのですが,一時,ボコボコにされましたが,ある時期から,めっきり被害がすっくなくなりました。

草取りのついでに,庭のフェンス沿いにしかけてあった,モグラ取りをみてみました。写真のものを写真のように土中にセットしてあります。

矢印の蓋をあけて,中をみてみました。

写真では,なかはみえないのですが,土が中にたまっていたので,中の土を何回かにわけて,てでつまみだしました。何回か目に土を握ると,明らかに土とは違う感触にちょっとびっくり。つかんでつまみ出してみると,なんと,モグラ君でした。

作業用にゴム手袋をしていたので,手は汚れませんでしたが,ちょっと,気持ち悪かったです。腐敗が始まったのか,ちょっと匂いましたが,まだほとんど原型をとどめていました。モグラ捕獲器で一番成績がよかったのは,筒状のもので,今までに3匹ほどつかまえました。

次に成績がよかったのは,バネで,モグラを挟む罠で,一匹捕まえました。

今日のモグラは,5匹めです。今日のモグラ君も,埋葬いたしました。

どのモグラ捕獲器でも一緒だと思うのですが,いかにモグラの通り道を特定するかに,捕獲の可否がかかってるのだと思います。うまく通り道にセットできれば,成功の確率がたかくなります。

経年劣化ーー電動ポット

何でもそうだけど,長年使ってると,経年劣化によって,いろんなところがいたんでくる。経年劣化で故障やら不具合が出てくる時期は,かさなるようで,一つだめになると他の物もだめになるような気がする。

実家で使ってる電動ポット(5L)もご多分に漏れず,不具合がでてきた。何年か前に,蓋のゴムパッキンは取り替えたが,蓋の内側の金属部分を支えているプラステックのネジ受けの部分が折れてしまって,金属部分がとれてしまった。金属のカバー?は4本のビスで止まってるが,ものの見事にそのネジを受けている部分の根本が折れてしまった。蓋を開けると,その部分がお湯の注ぎ口を塞ぐように残ってしまうことになった。(写真は撮り忘れ)

いよいよ買い換えるようかなと思い,蓋の内側の部品だけでも販売してないかしらべたが,上蓋全部は部品ででているようなので,型番で調べて,似ている型番のものをポチってみました。

下記の品番のもので,

【純正品・新品】タイガー魔法瓶VE浄水電気まほうびん用のふた【TIGER PVG1029】

ダメ元での注文でしたが,

ぴったりでした。買い換えよりは安くすみましたが,野口英世約4枚どうでしょうか割高なのでしょうかね。