Tipsカテゴリ
プログラムTips ※Tips一覧はこちら
 
■ PHPでのファイルのアップロード (2007/04/05)

環境はFedoraCore5と、FedoraCoreに付属のPHPを使用しています。

PHPスクリプトには、
<form enctype="multipart/form-data" action="アップロード処理を行なうPHPスクリプトを含んだファイル" method="post">
    <input type="file" name="userfile">
    <input type="submit" value="upload">
</form>
を含めます。上記のuserfileは任意に変更可能。

「アップロード処理を行なうPHPスクリプトを含んだファイル」には、
<?php
if(is_uploaded_file($_FILES['userfile']['tmp_name'])) {
  move_uploaded_file($_FILES['userfile']['tmp_name'], $file);
}
?>
などを含めます。そして、$fileには、アップロードしたファイルを保存しておくためのファイルパスを記述します。こうやって移動したりコピーしたりしておかないと、アップロードスクリプトが終了した時点でアップロードされた仮ファイルは削除されてしまいます。

ちなみに、$_FILES[]には、
$_FILES['userfile']['name'] アップロード元のファイル名
$_FILES['userfile']['size'] ファイルサイズ
$_FILES['userfile']['type'] ファイルタイプ
$_FILES['userfile']['tmp_name'] アップロード時の仮ファイルパス
が入ります。

さらに、php.iniを変更しておく必要があります。
変更箇所は下記のとおり。
 memory_limit 使用するメモリ上限。アップロードしたいファイルサイズの上限以上に指定
 post_max_size POSTで送信する最大サイズ。同上
 upload_max_filesize アップロードするファイルの最大サイズ。同上
 file_uploads = On
 upload_tmp_dir アップロードされた仮ファイルの置き場。指定するかどうかは任意。

upload_tmp_dirを指定しないと、/tmpになるらしいです。

さらに、upload_tmp_dirで指定したディレクトリと、アップロードしたファイルを保存するディレクトリのパーミッションを変更して、PHPを実行するユーザーが書き込めるようにしておく必要があります。

また、もしphp.iniのopen_basedirを指定しているなら、そのディレクトリ以下にupload_tmp_dirで指定するディレクトリを作成しなければ書込み・読み込みができない(と思う)。

カテゴリ:PHP

Google
 
在宅、SOHO、求人
 
Copyright(c) 2009 ISCS All rights reserved.