ファイルのアップロードは、クライアント側からサーバー側にファイルをアップロードできる機能です。 SyLフレームワークでは、セッション同様インターフェイスを統一するためにPHPの標準機能をラップしたクラスを用意しています。
ファイルアップロード処理をセットしたり、取得する簡易インターフェイスの使用例です。
// コンテキストからリクエストオブジェクトを取得 $request =& $context->getRequest(); // アップロードされたファイル情報を取得する。 // <input type="file" name="uploadfile" >とした場合、 // この例では、$_FILES['uploadfile']と同じ値が取得できる $uploadfile = $request->getFile('uploadfile');
ただし、上記例ではアップロードされたファイルは一時ディレクトリにある状態で、そこから コピーや移動しない限り、リクエスト終了時に削除されてしまします。
アップロードされたファイルを任意のディレクトリに移動するには、 下記のようにします。
// コンテキストからリクエストオブジェクトを取得 $request =& $context->getRequest(); // ファイルオブジェクトを取得する $file =& $request->getFileObject(); if ($file->isError()) { // アップロード初期エラー echo $file->getErrorMessage('uploadfile'); exit; } // アップロードファイルを保存するディレクトリ // ※デフォルトで、SYL_UPLOAD_DIR 定数以下となる $file->setUploadDir('upload_dir'); // アップロードファイル保存処理 if (!$file->upload('uploadfile')) { // アップロードファイル保存時エラー echo $file->getErrorMessage('uploadfile'); exit; } // ---------- // アップロードされたファイル情報を取得する(上の処理と同様) $uploadfile = $file->get('uploadfile'); print_r($uploadfile);
アップロードファイルを保存するディレクトリは、setUploadDirメソッドで設定しますが、 デフォルトでSYL_UPLOAD_DIR 定数以下となります。
例えば、SYL_UPLOAD_DIR = /home/hoge/data の場合、
$file->setUploadDir('upload_dir');
を行うと、保存するディレクトリは、
/home/hoge/data/upload_dir
となります。
setUploadDirメソッドを実行しなければ、SYL_UPLOAD_DIR ディレクトリに保存されます。
このように、デフォルトではSYL_UPLOAD_DIR ディレクトリ以下にしか保存できませんが、
引数を変更することにより、絶対パスで指定した任意のディレクトリに保存できます。
$file->setUploadDir('/path/to/savedir', true);