ファイルのアップロード

ファイルを指定のディレクトリにアップロードするモジュール

.htaccessの設定

必要に応じて、以下の設定を変更。
デフォルトの値はphpinfoで要確認。

# スクリプトが確保できる最大メモリ php_value memory_limit 256M # POSTデータに許可される最大サイズ php_value post_max_size 128M # アップロードされるファイルの最大サイズ php_value upload_max_filesize 10M # スクリプトが強制終了されるまでに許容される最大の時間 php_value max_execution_time 120

HTML

<!-- enctype="multipart/form-data"を指定 --> <form action="upload.php" method="post" enctype="multipart/form-data"> <!-- ファイルサイズ上限 --> <input type="hidden" name="MAX_FILE_SIZE" value="10000000"> <input type="file" name="userfile" required> <!-- ファイル複数の場合 --> <input type="file" name="userfiles[]" multiple required> <input type="submit"> </form>

$_FILESの内容

name: ローカルファイル名、 type: MIME型(ブラウザによって内容が異なる)、 tmp_name: テンポラリファイル名、 error: エラーコード(0は成功、1,2はサイズ上限超過、3~8はアップロード失敗)、 size: ファイルサイズ。

Array ( [userfile] => Array ( [name] => foo.jpg [type] => image/jpeg [tmp_name] => C:\WINDOWS\Temp\php37DE.tmp [error] => 0 [size] => 383512 ) )

ファイル複数の場合

Array ( [userfiles] => Array ( [name] => Array ( [0] => foo.jpg [1] => bar.jpg ) [type] => Array ( [0] => image/jpeg [1] => image/jpeg ) [tmp_name] => Array ( [0] => C:\WINDOWS\Temp\php37DE.tmp [1] => C:\WINDOWS\Temp\php37EE.tmp ) [error] => Array ( [0] => 0 [1] => 0 ) [size] => Array ( [0] => 383512 [1] => 360730 ) ) )

エラーの場合

Array ( [userfile] => Array ( [name] => foo.jpg [type] => [tmp_name] => [error] => 2 [size] => 0 ) )

PHP

/** * ファイルのアップロード * * @param array $file_data * @param string $target_path * @param string $upload_name * @return boolean */ function getFileUpload($file_data, $target_path, $upload_name = '') { // ファイルの有無 if (empty($file_data)) { return FALSE; } // 0は成功、それ以外は失敗 if ($file_data['error'] != '0') { return FALSE; } // 存在チェック if (! file_exists($target_path)) { return FALSE; } try { // アップロード後のファイル名が未定義の場合は元ファイルと同じに if (empty($upload_name)) { $upload_name = $file_data['name']; } // アップロード後のファイルの移動先 $destination = $target_path . $upload_name; // テンポラリからファイルを移動 move_uploaded_file($file_data['tmp_name'], $destination); } catch (Exception $e) { return FALSE; } return TRUE; }

使用例

PHP

if (getFileUpload($_FILES['userfile'], '/home/appli/var/', $upload_name = '')) { echo "成功"; } else { echo "失敗"; } // 複数対応 if (! empty($_FILES['userfiles'])) { // $_FILES['userfiles']['name'][0]を$files[0]['name']へ foreach($_FILES['userfiles'] as $filesKey => $filesVal) { foreach($filesVal as $filesKey2 => $filesVal2) { $files[$filesKey2][$filesKey] = $filesVal2; } } } // 1つめ getFileUpload($files[0], '/home/appli/var/', $upload_name = ''); // 2つめ getFileUpload($files[1], '/home/appli/var/', $upload_name = '');

最新の記事

プロフィール

流されるままにウェブ業界で仕事しています。主にLAPP環境でPHPを書いています。最近はjQueryで遊んでいます。
※動作確認について