#気まぐれ & 気まま & 天邪鬼な老いぼれ技術屋の日々の記録のうち、パソコン技術やインターネット技術、プリンタやPCアプリからプログラム言語などに関連した記事です。
右端上端の同一カテゴリージャンプボタンで同じカテゴリーの他の記事を順番にご覧いただけます。
Access Counter:  総アクセス数

楽 天 の 商 品

-2093- Perlメモ
= 今日は画像なし m(_ _)m =
自分のメモとして。
HTMLページでは<form>~</form>タグでテキスト(<input type='text' >)やラジオボタン、チェックボックスなどの入力がサーバーに対して送信できるが、それをサーバー側で受信して処理する cgiプログラムがある。perlと言うスクリプト言語もそのうちの一つなんだが、今回これでハマった。
xampp/Apatchのperlのバージョンをアップさせたと何回か前に書いたが、半年くらいは localhostでこのプログラムを実行させたことがなかったのでそれが直接的な原因かどうかは分からないが、このe日記をアップするプログラムを localhostで実行すると動作がおかしくなった。このプログラムを最後にいじったのは今年初めで、実際のレンタルサーバーの同じプログラムは問題なく動作しているから、どうしても perlのバージョンアップが疑われる。
現象としては、前記の<form>~</form>タグで必要な入力値を送信しているが、それが localhost側で受け取れなくなってしまった。
最初は perlのバージョンが新しくなったので、jcode.plとか cgi-lib.plなどのモジュールとの相性かと思って Web検索したりいろいろいじってみたが、どうも違う。
Web情報では、最近(と言うより10年位前から)は FORMデータの受信には cgi-lib.plよりも CGI.pmと言うより高機能な入出力モジュールが主流だというので、思い切って cgi-lib.plを CGI.pmに入れ替えたりしてみたが、受信部分だけを取り出したプログラムでは問題がないのに、元のプログラム中で FORMデータの受信処理を行うと inputの値が取得できない。
数日あれこれ悩んだ末、今日気づいたのは cgiプログラム側ではなくて html側の <imput >タグの属性の問題。
具体的には、FORMの 'post'メソッドでファイルアップロードなどの関係で enctype='multipart/form-data'を使用すると通常 <input type='hidden' name='mode' id='mode' value='admin'>などと記述するが、この属性のうち id='' 属性が記述してないと、CGI.pmや cgi-lib.plで name値とvalue値が取り出せない場合があるようだ(取り出せる場合もあるがその差が??)。 enctype='multipart/form-data'ではなく単なる urlエンコードだったり、getメソッドだったりすれば id='' 属性はなくても問題はない。
イマイチ釈然としないが、とりあえず今回の問題は上記 FORMタグ中の inputタグの id属性を付けることで問題が解決した・・・と言うか現象が出なくなった。核心を突いた対応ではないので、いつかまた問題が噴出しそうだ。
2019/09/19