冬言響 / 日記

アメコミとか映画とか音楽とか猫とか単車とか自転車とか革とか銀とかジーンズとかブーツとか今日喰ったものとか。

RSS2.0

画像ファイルアップロード機能を

[JPEG画像]

付けたので過去にどっかで拾った謎の画像を貼り付けてみるテスト。$_FILES とするところをずっと $_FILE にしててファイル情報が一向に見られずにハマってたというのは恥ずかしいので秘密だ。

サムネイル画像もその都度生成してたりする。どれぐらいの負荷になるもんなんだろうか。とりあえず外から直接表示は出来ないようにはしてみた。なってると思う。どうだろう。追記。これじゃあフィードリーダとかで表示出来ないじゃないかたぶん。それは気分的に宜しくないのでやっぱり外からも表示してよし。

以下追記。この記事「PHP 画像アップロード」とかで辿り着くひと居るだろうから具体的な手順を一応書いといた方が良いか。

フォームはこんなカンジ。

<form action="foo.php" method="post" enctype="multipart/form-data">
<p><input type="file" name="img" /> <input type="submit" /></p>
</form>

submit されてきたデータは $_FILES["img"] 配列に格納されてる。「img」は input に付けた name 属性値。

// 元のファイル名。
$strName = $_FILES["img"]["name"];
// ファイルの MIME 型。
$strType = $_FILES["img"]["type"];
// ファイルのサイズ。
$intSize = $_FILES["img"]["size"];
// テンポラリファイルの名前。
$strTmp = $_FILES["img"]["tmp_name"];
// エラーコード。
$intError = $_FILES["img"]["error"];

デカ過ぎるファイルは駄目なのー、とか変な拡張子のファイルは不許可なのー、って場合はここら辺の情報をチェックして処理停止とかメッセージ出すとかする。

この時点ではテンポラリファイル名でサーバーに仮保存(?)されてる状態なので、程なく(セッションが終了したら?)消える。保存する場合は move_uploaded_file() 関数で。保存先を予め

$strPath = $_SERVER["DOCUMENT_ROOT"] . "/img/" . $strName;

みたいな具合で決めておいたとして、

move_uploaded_file($strTmp, $strPath);

で保存される。いじょ。