- ベストアンサー
アップロードしたファイルの絶対パス
画像がアップロードできる掲示板をつくっています。 内容を記入して投稿する前にプレビューできるようにしたのですが ファイルの絶対パス(c:\なんとかかんとか\gazou.jpgのようなアドレス)が取得でず困っています。 まずフォームからの内容を $file_name= $_FILES['sendfile']['name']; で受け取ってみました。 その後 $_SESSION['sendfile'] = $file_name; という風にセッションに入れて別の確認ページに 飛ばすという形にしてみたのですが、 こうするとファイル名だけが取得できました。 絶対パスを取得するには「realpath()」を使うと書籍などにも書かれていたので $file_name = realpath($_FILES['sendfile']['name']); としたり $_SESSION['sendfile'] = realpath($file_name); としたりしてみたのですが どうもうまく行きませんでした。 根本的に使い方がまちがっているのでしょうか? アドバイスよろしくおねがいします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 http://fol.axisz.jp/php/man/php/features.file-upload.html にある内容しかサーバ側のスクリプトはわかりません。 JavaScriptにてローカル側の選択したファイルパスをサーバ側に送ることも出来ますが、お勧めできません。 (JavaScriptが使えない場合は送られてきませんし、ローカル側のフォルダ構成等を見られるのは(見ないとしても)あまり良い気分ではありません。
その他の回答 (2)
- php504
- ベストアンサー率42% (926/2160)
私も日本語のファイル名をshift jisで受け取るときに”表”などがディレクトリセパレータと認識されるためファイル名をフルパスで取得しようとあれこれやったことがあります。 結局multipart/form-dataの場合は生のpostデータが受け取れないためあきらめました。 *php3なら標準でファイル名がフルパスになっていたと思いますが今更php3には戻れないですし。
- taketan_mydns_jp
- ベストアンサー率58% (450/773)
根本的なところから。 アップロードしたファイルは、テンポラリフォルダにテンポラリ名で保存されます。 テンポラリフォルダはphp.iniで upload_tmp_dir = string で指定されたものです。デフォルトはNULLで、UNIX系の場合は/tmp/になっています。 $_FILES[sendfile][tmp_name] として臨時的に保存されます。そのファイルを自分の指定するファイルにコピー、又は移動させる必要があります。 すなわち、 $uploadfile = "格納するフォルダ".$_FILES['sendfile']['name']; if (move_uploaded_file($_FILES[sendfile][tmp_name], $uploadfile)) { echo "{$uploadfile}のアップロード成功"; } となります。