質問: smartyにてやりたいこと 1html側 フォルダを選択して確認ボタンを押したら2に遷移 1php側 とくになし 2 html側 ファイル名前を表示し これを送信するか、しないかの確認 はい を押下で3に いいえ を押下で1へ または ファイルが選択されてなかった場合 ファイルが選択されていません を表示 アップロード失敗した場合 アップロードが失敗しました を 表示 2php側 empty("file_name")でファイルが選択されてない場合はファイルが選択されていない旨を表示するようhtml側にメッセージを渡す。 仮ディレクトリ(var/www/data(絶対パス))にファイルをアップロードする アップロードに失敗した場合 アップロードに失敗したメッセージをhtml側に渡す 3html側 ファイルの送信を完了しました。 移動に失敗した場合 エラーが起きましたと表示する。 3php側 仮フォルダから本フォルダ(var/www/truedatas(絶対パス)) にファイル名をaaaにリネームして移動させる。 移動に失敗した場合html側にメッセージを渡す。 ということをやりたいのですが 今回わからないことが ・ディレクトリにファイルのアップロードのやり方がわかりません。 条件として1にて確認を押されたら 2の処理のテンプレートとphpにてファイルアップロードが走るようにしなくてはいけません。 次に 格納されたそのファイルをリネームをして 別のディレクトリに移動させるやりかたがわかりません。 この判断としては格納したファイルの名前を取得して 仮ディレクトリからそのファイルを探しaaaにリネーム、本フォルダに移動移動するという流れになるのでしょうか 長くなりましたが ディレクトリにファイルをアップロードするやり方と ディレクトリからディレクトリにファイルをリネームして移動する やり方を教えてください。
回答: サンプルコード ======= 要件に合わせて、改変してください。 ``` 0) { $smarty->assign('error', uploadError($upload['error'])); } // アップロード成功時 else { // 書き込みディレクトリ存在チェック if (!file_exists(UPDIR) && !mkdir(UPDIR, 0660, TRUE)) { $smarty->assign('error', '保存先ディレクトリの作成に失敗しました。'); } // 書き込み権限 else if (!is_writable(UPDIR)) { $smarty->assign('error', '保存先ディレクトリに書き込み権限がありません。'); } // バリデーション $filename = $upload['tmp_name']; // 拡張子取得 $ext = checkFileType($filename); // ファイルタイプのチェック if (!$ext) { $smarty->assign('error', '許可されていないファイルタイプです。'); } // バリデーション通過時 if (null == $smarty->getTemplateVars('error')) { $basename = sprintf('%s.%s', uniqid(), $ext); $destination = sprintf('./%s/%s', UPDIR, $basename); move_uploaded_file($filename, $destination); } } } $smarty->display('index.tpl'); ``` ``` 'image/jpeg' , 'png' => 'image/png' , 'gif' => 'image/gif' ]; return array_search($filetype, $allowed); } ``` ``` {* * index.tpl *} ファイルアップロード {if $error|default:null != null} {$error} {/if} ファイル SUBMIT ```