「method」は「metod」でも一部は動く罠

自分の為のメモとして。
タイトルは「よく考えたら、当たり前じゃん!」なのだが…
結果ではなくて、見落としとかポカミスはあるんだから、気をつけようってことで。

WEB系の作業をしていて、ありがちな処理の「ファイルのアップロード」。
FTPで作成したファイルをサーバーへ転送することじゃなくて、FORMから画像などをアップするCGIの処理。
何度やっても上手くいかなかったのが、最終的にはポカミスだった件。

ファイルアップロードとして、必要なのはFORM文とその中のINPUTタグのFILEタイプ。

<form>
<input type=”file” name=”hogehoge” />
<input type=”submit” value=”UP” />
</form>

最低限を書くと、こんな感じになるか。
ここまで来て、気付く人は気付く。
エンコードタイプの設定が無く、上手く動作しなかったがすぐに気付いて

<form action=”なんたらかんたら” method=”POST” enctype=”multipart/form-data”>
~以下省略~

に修正。

しかしながらコレが動かない。
アップロード成功時にファイル保存する処理があるのだが、ファイルが生成されていないのだ。
そこで、「$_FILES[‘hogehoge’][‘error’]」を確認すると空っぽ。
へっ?てな感じ。

出し側のFORMと受け側のスクリプトでデータ名(上記「hogehoge」)が食い違っているか?と何度も確認。
しかし間違ってはいないし、少し前に作った動作確認済みの同処理と比べても間違いは見つけられず。
最終的手段で、

ini_set(‘display_errors’, 1);
error_reporting(E_ALL);

をスクリプト(PHP)内に投入。
実行すると、「hogehogeなんて知らねぇ~よ!」とおしかりを受ける。

再度FORMとスクリプトでのデータ名を見比べる。
…!…
ここまでどれほど試行錯誤したことか…「method」が「metod」になってたよ。
「俺、乙」ってとこか。

気付かなかった理由。
なんと、ファイル以外にあるINPUT(例えば、タイトルや本文などの入力ものなど)は正常に動作。
METHOD指定しなくてもデフォルト(=GET?)で動作しちゃうんだな。
でも、ファイルのアップロードはそれじゃ、転送できないから送信されないということだろう。
半端に動いた(いや、論理的に考えりゃ当たり前だが)から、すぐに解らなかったよ。
タイプミスには気をつけよう!>kazz

No comments yet.

コメント投稿

※各記事(エントリー/投稿)の内容は投稿時のものです。閲覧時とは異なることがございますのでご了承ください。