• ベストアンサー

アップロードの際にファイルパス

いつもお世話になります。 ファイルアップロードするとき対象ファイルの 取得先(ローカルでのパス)も一緒に表示したいです。 例:abc.txtがc:\a\ab\abcの配下に あるとした場合abc.txtをアップロードしたら アップロード完了後名前、サイズ、タイプ、 ローカルでのパスc:\a\ab\abcを表示させたいです。 名前、サイズ、タイプは取得できますが なかなか元ファイルのパス(c:\a\ab\abc)が取得できません!もしかしてPHPでは取得できないでしょうか? そうであればほかの方法がございましたら ご教授いただけないですか?

  • PHP
  • 回答数3
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • arcsin
  • ベストアンサー率70% (28/40)
回答No.2

#1です。 にわか仕込みのjavascriptでローカルなパスを取得できましたので、参考までに。 <form name="form1" enctype="multipart/form-data" action="a.php" method="POST"> <!--↓こいつをファイルパス用に--> <input type="hidden" name="filepath" value=""> <!--↓ファイル名がかわったら↑のvalueにファイルのパスを代入 onChange部分 --> file: <input name="userfile" type="file" onChange="document.form1.filepath.value =this.value;"> <input type="submit" value="Send File"> </form> <?php echo $_POST["filepath"]; ?>

roba1234
質問者

お礼

よいアドバイスありがとうございます。 結局JAVASCRIPTで取得することになりました。 上記のコードが非常にいいヒントになりました。どうも ありがとうございます。PHP5上では さすがむりでした。サイズ、属性などは とれましたがパスに限ってはできませんでした。 お勉強させていただきました。

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

パスを渡しても、再利用することはできないので 意味がありません。 逆にPCの設定を盗み見ようとしてるというあらぬ 非難をうける可能性もあるので、やるメリットは なにもないと思いますがいかがでしょうか?

roba1234
質問者

お礼

ご返答ありがとうございました。 やはりPHP上では無理でした。 いろいろ探してみましたが 駄目でした。結局JAVASCRIPTで実現する ことになりました。ありがとうございます。

  • arcsin
  • ベストアンサー率70% (28/40)
回答No.1

http://ns1.php.gr.jp/pipermail/php-users/2003-April/014972.html にあるように、javascriptで無理やり渡す方法があるようですが、私はjavascriptに詳しくないので詳しい方法はアドバイスできません。 PHPで無理やりするとなれば、$HTTP_RAW_POST_DATA を使う方法があるかと思います。POSTの生データが入っているので、これを無理やり解析するわけです。ただこの変数を使うには、php.ini で、 always_populate_raw_post_data = On となっていなければいけませんし、PHP 4.3.0 以上ではデフォルトでOffになっているっぽいので、レンタルサーバなどをお使いの場合はjavascriptを使ったほうがよいかもしれませんね。 PHPで他の方法があるかもしれませんが、一応アドバイスということで・・・。

関連するQ&A

  • ブラウザからファイルパスを取得するには

    現在Webブラウザからローカルにあるファイルのパスを取得したいと 考えています。 イメージとしては、アップロードのときのように、参照ボタンを押すと ダイアログが開き、そこからファイルを選択すればそのファイルのパスが 取得できるようなことを考えています。 ファイルアップロード時にファイルのパスを取得できることは知っているのですが、アップロード出来るサイズの制限を越えるものもあり、 できるだけアップロード処理を行わずに、ファイルのパスだけを取得できる 方法がないか探しております。 ご存知の方がいらっしゃいましたら、教えていただければ幸いです。 よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • アップロード先

    ホームページ制作でファイルをFTPソフトでサーバにアップロードする時に一番初めのディレクトリ(public_htmlフォルダなどがおいてある所のディレクトリ名は何なのでしょうか?  もし何も名前がない場合、例えばpublic_html内のabc.txtにフルパスで結ぶ場合、/public_html/abc.txtだけでいいのでしょうか? それとも/何か名前/public_html/abc.txtとなるのでしょうか? 説明わかりにくいかもしれませんが、よろしくお願いします。

    • ベストアンサー
    • HTML
  • クライアントPCからファイルのアップロード

    ASPでファイルをアップロードするシステムを作っています。 クライントPCにあるファイル(<Input type=file>タグを使ってファイルのパスを取得)を、サーバーPCの指定したフォルダへコピーしたいです。 FileSystemObjectを使って、このような処理は可能でしょうか? Set objFileSys = CreateObject("Scripting.FileSystemObject") objFileSys.CopyFile "C:TEST\ABC.txt","D:TEST\" 現在、このような記述をしたところサーバーPCの"C:TEST\ABC.txt"をサーバーPCの"D:TEST\"へコピーするだけになってしまいます。 やりたいことはクライアントPCの"C:TEST\ABC.txt"をサーバーPCの"D:TEST\"へコピーです。 なにか良い方法がありましたら教えてください。

  • アップロードの方法

    ファイルの保存方法を教えてください。 アップロードファイル名は取得できましたが、ファイルの保存法が分からないので教えてください。 PHPは知っています。 PHPのようにテンポラリファイルに保存されるからテンポラリのパスを取得するのでしょうか? ASPの場合だと方法がさっぱり分かりませんでした。 <form enctype="multipart/form-data" action="a.asp" method="POST"> <input name="my_file" type="file" size="20"></td> <input type="Submit"> </form>

  • 新規作成ファイルパスが有効か無効か判定したい

    こんにちは。 VC++を使用してWindows上で動作するプログラムを作成しているのですが、ユーザに絶対パスをテキストで入力させ、そのパスが存在しなければ、フォルダとファイルを新規作成するかどうか問い合わせるという処理を行いたいと考えています。  そこで質問なのですが、 ・有効なパス設定で存在しないフォルダ ・無効なパス 上記を判定したいのですが、現状区別が付けられないでいます。実際には、以下のように処理しています。 OutputFilename:CString型、絶対パス(ファイル名含む)が入っている。 OutputPath:CString型、絶対パス(上記から「\ファイル名」を除いたもの) // 出力ファイルのパス存在チェック pathlen = OutputFilename.ReverseFind('\x5c'); // 最後の\記号までの文字数を取得 if(pathlen == -1) return -1; // エラー OutputPath = OutputFilename.GetBufferSetLength(pathlen); nRcd = _chdir(OutputPath); if(nRcd){ if(errno == ENOENT) return -1; ※ } ※無効なパス(例えばabc\bcd\efgなど)であっても、存在しないパス(例えばC:\tempは存在し、その配下には存在しないフォルダ名を指定-C:\temp\abc\def)であっても、同様に_chdir関数が失敗し、errnoにENOENTが入るようです。 どなたかご存知の方がおられましたら、どうかご教授お願いいたします。

  • アップロードしたのに。。

    お世話になります。ウィンドウズXP使用。ヤフーのジオシティ使用、HPビルダー6を使っています。FFFTPを使っています。 きちんとローカルで表示を確認したHTMLファイルをたしかにアップロードしているのに、ヤフーのファイルマネージャーでもきちんと表示できることを確認しているのに、実際の画面で表示されない(ページを表示できません)となることがときどきあります。 これはどういったことでしょうか? 具体的には、 最初まちがって、「日本語.html」というファイル名でアップロードしようとしてしまって、FFFTPソフトで、アップロードできません。という表示がでてしまいまして、気づいて、「abc.html」というファイル名に直してアップロードできました。ファイルマネージャーでも、きちんと「abc.html」のファイルは確認できますし、表示できるのですが、実際のページをひらくと、以前の「日本語.html」というアドレスがアドレスバーに表示されてしまうのです。「更新」ボタンを押しても、キャッシュのクリアをしても何度かアップロードをしても同じです。これはヤフーのサーバーがわるいんでしょうか?それとも私のPCが悪いんでしょうか? それに、やっぱりときどき、ヤフーのそのレンタルしているサーバーの画面が真っ白になってしまったり(ステータスは表示しましたになっているのに)します。やっぱり無料レンタルサーバーって信用ならないでしょうか?

  • 画像のアップロードができない

    PHPで携帯サイトを制作中なのですが、メールで画像をアップロードする ことができずに困っております。 具体的にはサーバーにファイル自体はアップロードされるのですが img配下を見ると「ev4rVY(エンコードされたファイル名)」がサーバーにアップされているものの、拡張子がついていないのです。 ▼画像アップロードプログラムPHPソース // ユーザー&認証コードチェック if ($user&&$auth_code==getAuthCode($user['id'], $user['auth_string'])) { // 認証OK // マルチパートの場合のみメールを解析して画像を取得 if (strtolower($structure->ctype_primary) == "multipart") { $images = getImage($structure->parts); } $image_save_path = null; // 画像リストの中から1つだけ画像を取得する foreach ($images as $image) { // コンテンツタイプのチェック if ($image['type'] == 'image/jpeg' || $image['type'] == 'image/gif' || $image['type'] == 'image/png') { // ファイルとして保存 // 一時ファイルパス $temp_path = tempnam('/tmp', 'img_'); if ($temp_path == false) { // error break; } $fp = fopen($temp_path, 'w'); if ($fp == false) { // error break; } fwrite($fp, $image['body']); fclose($fp); // 画像の形式と縦横サイズを取得 list($width, $height, $type) = getimagesize($temp_path); // 認識できる形式であれば、所定のメソッドで開く $imageSource = null; if ($type == IMAGETYPE_GIF) { $imageSource = imagecreatefromgif($temp_path); } else if ($type == IMAGETYPE_JPEG) { $imageSource = imagecreatefromjpeg($temp_path); } else if ($type == IMAGETYPE_PNG) { $imageSource = imagecreatefrompng($temp_path); } // 一時ファイルを消す unlink($temp_path); if ($imageSource) { // ファイル名決定 $path = tempnam($image_dir, ''); //unlink($path); $image_save_path = $path; // 画像をケータイディレクトリへファイル保存 imagejpeg($imageSource, $image_save_path); imagedestroy($imageSource); break; } } } ▲以上ここまで━━━━━━━━━━━━━━━━━━━━━━━━━ 開発環境:CentOS5 PHP Version 5.2.11 ※本を参考に制作しているのですが  本にはGD Graphics をダウンロードした方がよいと  記載がありました。関係ありますでしょうか。 どなたかお分かりになる方がいらっしゃいましたらどうか ご教授いただけませんでしょうか。 お願いいたします。

    • ベストアンサー
    • PHP
  • 複数ファイルのアップロードの際の拡張子

    複数のファイルを一度にアップロードするプログラムを作成しています。 同じ拡張子のファイルは、問題なくアップロードすることができましたが 異なる拡張子のファイルをアップロードすると 全てのファイルが最後にアップロードしたファイルと同じ拡張子になってしまいます。 拡張子を$kakuに入れる位置が間違っているような気もするのですが 移動させてみましたが結果は同じでした。 アドバイス頂けると助かります。 よろしくお願い致します。 //拡張子チェック if(strlen($_FILES["att"]["name"])>0){ foreach($_FILES["att"]["error"] as $key => $error_a){ if($error_a == UPLOAD_ERR_OK){ $att_na = $_FILES['att']['name'][$key]; //ローカルファイル名 $att_tmp = $_FILES["att"]["tmp_name"][$key]; //テンポラリファイルの名前 $att_size = $_FILES["att"]["size"][$key]; //ファイルサイズ $att_type = $_FILES["att"]["type"][$key]; //ファイルタイプ if(strlen($att_na)>0) { if(is_uploaded_file($att_tmp)) { if(strlen($att_size)==0) {$error = "ファイルが不正です";} if($att_size>10000000) {$error = "ファイルのサイズが大きすぎます({$att_size}バイト)";} //ファイルタイプのチェック if($att_type=="application/msword") {$kaku="doc";} if($att_type=="application/vnd.ms-excel") {$kaku="xls";} if($att_type=="application/vnd.ms-powerpoint") {$kaku="ppt";} if($att_type=="application/pdf") {$kaku="pdf";} if($att_type=="text/plain") {$kaku="txt";} if($att_type=="application/zip") {$kaku="zip";} if($att_type=="image/gif") {$kaku="gif";} if($att_type=="image/jpeg") {$kaku="jpg";} if($kaku==""){$error="添付できないファイル形式です";} } } } } } (略) //登録 foreach($_FILES["att"]["error"] as $key => $error_a){ if($error_a == UPLOAD_ERR_OK){ $att_na = $_FILES["att"]["name"][$key]; $att_tmp = $_FILES["att"]["tmp_name"][$key]; $att_type = $_FILES["att"]["type"][$key]; if(strlen($att_na)>0) { list($att_nam,$k) = explode(".",$att_na); $ymdhis = date("YmdHis"); $att_no++; $att_name = "{$my_no}-{$log_no}-{$att_no}-{$ymdhis}.{$kaku}"; $att_name_a = "{$att_nam}-{$my_no}-{$log_no}-{$att_no}-{$ymdhis}.{$kaku}"; move_uploaded_file($att_tmp, "$att_path/$att_name"); $att_name_ar[] = $att_name; $att_name_im = implode(",",$att_name_ar); $att_name_aar[] = $att_name_a; $att_name_aim = implode(",",$att_name_aar); } } }

    • 締切済み
    • PHP
  • ファイルパスの二回目の読み込み(API・C言語)

    ウィンドウから右クリックでファイルダイアログを開き、 ファイルパスを取得、ある操作をさせて ウィンドウ上に表示させると言うプログラムを、 C言語、コンパイラはBorland C++、Windows APIにて 作成しております。 そこで、一回目、右クリックしてパスを読み込み、 表示させる事には成功したのですが、 二回目、同じようにウィンドウ上で右クリックして、 パスを読み込むと、おかしな表示となってしまいます。 二回目も一回目と同じような表示にさせるにはどうしたら いいでしょうか。 アドバイス宜しくお願い致します。 ソースはこちらです。 http://onegaisimasune.web.fc2.com/main3.txt

  • FLASH8でimgタグ+アップロード??

    Flash8のトライアル中です。 ダイナミックテキストに外部txtファイルを読み込み、imgタグでjpgファイルを読み込みました。ローカルで見たときはちゃんと表示できてたのですが、アップロードすると画像が見えません。(ローカルで見れたということは前の質問であったimgタグを使うときの注意は満たしているはず??)階層は全部同じ階層にあり、そのままアップロードしてます。なぜだか知っていらっしゃる方がいましたらおしえてください。 よろしくお願いします。

専門家に質問してみよう