• ベストアンサー

move_uploaded_fileについて

宜しくお願いいたします。 <input type="file">で一時的にサーバの/tmpフォルダに写真データをアップし、その後、move_uploaded_fileを使って特定のフォルダに移動しました。が、その移動したファイルのパーミッションが600になってしまうのです。移動したら、そこから動かせなくなってしまいます。このパーミッションをmove_uploaded_fileで移動した後で、755や777にする事は出来るのでしょうか?

  • nikuq
  • お礼率75% (477/631)
  • PHP
  • 回答数4
  • ありがとう数4

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

  • ベストアンサー
  • BENGAL
  • ベストアンサー率73% (22/30)
回答No.1

「chmod」という関数があります。 いかがでしょうか?? 参考になれば幸いです。

参考URL:
http://jp2.php.net/manual/ja/function.chmod.php
nikuq
質問者

補足

ありがとうございます。 早速やってみました。教えて頂いた関数でパーミッションの変更は成功しました!ありがとうございます!! しかし、ファイルの移動が出来ませんでした(>_<)。一度アップしてmove_uploaded_fileで移動したファイルをさらに、move_uploaded_fileで別のフォルダに移動する事は出来ないのでしょうか?? すみません。質問の趣旨が変わってしまいましたm(__)m

その他の回答 (3)

回答No.4

ファイルを移動するときは、rename()ね。 rename("/tmp/foo.txt", "/home/user_a/docs/foo.txt"); みたいな感じで。 ちなみに削除したいときは、 unlink("/tmp/foo.txt") で。

nikuq
質問者

お礼

ありがとうございますm(__)m renameでもファイルの移動が出来るんですね(^.^) 削除もできました!アップロードばかりだと、使わないファイルが山積みになってしまいますから、非常に助かる関数です!! 勉強になりましたーm(__)m

  • BENGAL
  • ベストアンサー率73% (22/30)
回答No.3

「move_uploaded_file」は、アップロードされた直後のファイルを操作する関数のために、 一度、コピーしなおしたものには使えません。 その場合は、「copy」を使用してください。 参考になれば幸いです。

nikuq
質問者

お礼

ありがとうございます。 早速copyで試したところ、うまくいきました! ありがとうございましたーm(__)m もっと勉強します・・・

  • re13b
  • ベストアンサー率58% (18/31)
回答No.2

move_uploaded_file は、POST でアップロードされたファイルに対してのみ、有効なのではないでしょうか? コピーしたり移動した後のファイルは、上記のような有効なファイルではないので、move_uploaded_file は動作しないのでは!? php のファイルシステム関数に copy があるので、これでコピー&移動ではダメですか?

nikuq
質問者

お礼

ありがとうございます。 ご返信遅くなりました。 おっしゃる通り、POSTでアップロードしたファイルしかこの関数では移動できないんですね(>_<) 全く勉強不足でした。 ありがとうございましたーm(__)m

関連するQ&A

  • move_uploaded_fileのエラーについ

    画像をアップロードするために move_uploaded_file()の関数を使ったプログラムがうまくいきません。 いろいろ調べたのですが、PHPは初心者なのでアドバイスをお願いします。 --------------------------------------------------------------------------------- Warning: move_uploaded_file(画像アップ先URL) [function.move-uploaded-file]: failed to open stream: HTTP wrapper does not support writeable connections in PHPファイルディレクトリ on line 33 Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpxs7jG1' to '画像アップ先URL' in PHPファイルディレクトリ on line 33 --------------------------------------------------------------------------------- 上記のエラーがでます。 調べて試したのですがうまくいきません。 画像格納用ファルダのパーミッションをいろいろ試して最終的777しましたがだめでした。 $file['tmp_name']こちらにうまく入っていないような感じですが?? サーバーはXサーバーを利用しています。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • PHP 画像のアップロードについて(move_uploaded_file)

    PHP初心者です。画像のアップロード機能を作成中です。 $path="/home/○○○/public_html/admin/w/p/5.jpg" move_uploaded_file($_FILES[MAINPHOTO]['tmp_name'], $path) で画像をアップしようとしたところ、次のエラーが出ます。 Warning: move_uploaded_file(/home/○○○/public_html/admin/w/p/5.jpg) [function.move-uploaded-file]: failed to open stream: Permission denied in /home/○○○/public_html/admin/aaa.php on line 125 Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phptC2x2A' to '/home/○○○/public_html/admin/w/p/5.jpg' in /home/○○○/public_html/admin/aaa.php on line 125 ローカルのadmin以下にw/pフォルダはきちんとあります。そこに5.jpgは存在してません。またアップする画像は別名です。 phpは4.2を使用しています。 サーバーはレンタルのkagoya.netを使用しています。 分かりやすい説明よろしくお願いします。

    • ベストアンサー
    • PHP
  • move_uploaded_fileについて

    move_uploaded_file( $_FILES[ "FILE" ][ "tmp_name" ], $FilePath ); 上記はどういった意味でしょうか。事細かく説明できる方、何卒よろしくお願い致します。 phpを昨日から勉強し始めた、ど素人です。他の言語も経験なしです。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • アップロードファイルのパーミッションについて

    送信フォームから画像ファイルをアップロードさせるページを作成しました。 そのアップロードされた画像ファイルについてですが、 パーミッションは600となっています。 これを604にしたいのですが、毎回1つ1つ手動で変更する以外に便利な方法は無いでしょうか?(スクリプトにパーミッションを指定する関数を組み込むなど) ちなみに、下記が現在のアップロード用phpソースです。 ============================================================== if (is_uploaded_file($pic_tmp)) { move_uploaded_file($pic_tmp, "../pic/" .$pic_name)) } ============================================================== どなたか有識者の方でご教示頂けましたらどうか宜しくお願い致します!

    • ベストアンサー
    • PHP
  • ファイルのアップロードがどうしても出来ません。

    単に画像ファイルをアップロードさせるだけなのですが、何故か出来ません。プログラミングに関しては初心者ですので、どなたかアドバイスをよろしくお願いします。 ■アップロードフォーム用のHTMLファイルです↓ ファイル名=gazou_upload.html <html> <head> <title>ファイルのアップロード</title> </head> <body> <form method="POST" action="gazou_upload.php" enctype="multipart/form-data"> <input type="hidden" name="max_file_size" value="1000000" > <input type="file" name="userfile"><br><br> <input type="submit" value="アップロード"> </body> </html> ■受け取ったファイルをサーバ上のディレクトリに移動するPHPファイルです↓ ファイル名=gazou_upload.php <?php if (move_uploaded_file($_FILES['userfile']['tmp_name'], "/image/")) { print "ファイルアップロード成功"; print_r($_FILES); } else { print "ファイルアップロード失敗"."<br>"; print_r($_FILES); } ?> ■ファイルを保存するディレクトリ 上のファイルと同じ階層で フォルダ名が image パーミッションは3つとも 707 にしました。 パーミッションが拒否されたというメッセージだと思うので、パーミッションを変更したのですがダメでした・・ちなみにサーバはロリポップを使っていて、777と666はエラーになると注意書きがあったので、707にしました。かなりハマっていて困っています。回答もしくはアドバイスをどなたかよろしくお願いします。

    • ベストアンサー
    • PHP
  • アップロードしたファイル名をランダムに書き換え

    <?php move_uploaded_file($_FILES["upload_file"]["tmp_name"], "../mov/" . $_FILES["upload_file"]["name"]); echo 'document.getElementById("mov").value="',$_FILES["upload_file"]["name"],'"'; ?> 以上のようなアップロードされたファイルをmovフォルダに移動し、さらにそのファイル名をエコーするPHPがあるのですが、 途中でファイル名をランダムな「数字10桁.拡張子」に変換してmovフォルダに移動し、そのファイル名を上記の様な形に沿ってエコーしたいのですが、どのようにすればよろしいでしょうか。

    • ベストアンサー
    • PHP
  • ファイルのアップロードが出来ない

    送信フォームを使って画像をアップロードさせたいのですが、うまくいきません。ブラウザ上でエラー表示は出ないのですが、移動させたいディレクトリにファイルが入って来ない状況です。 初心者なので、参考書を片手に例文をカスタマイズしていったので、アルゴリズム自体がどこか間違っているかもしれないです。 特に下記ソースコード中の 『$path = getcwd();~』 の辺りで、スクリプトのあるディレクトリパスを取得して、パスの末尾に"¥"or"/"を追加しているのは理解出来るのですが、 そもそも何のスクリプトのパスを取得しているのかが解らず、 結局テンポラリディレクトリからの移動先ディレクトリを自分で$new_dirと定義してmove_uploaded_file()しています。 どなたか詳しい方いらっしゃいましたらご教示宜しくお願いします! ===========ソースコード=============== <?php if (isset($_POST["submit"])) { //------------------------------------------------------------------------- //■クライアントから取得する元ファイル名を$pic_name、 //■テンポラリディレクトリ名を$pic_tmp //■テンポラリディレクトリからの移動先ディレクトリを$new_dir //------------------------------------------------------------------------- $pic_name = $_FILES["pic"]["name"]; $pic_tmp = $_FILES["pic"]["tmp_name"]; $new_dir = "http://xxx.com/pic/"; //---------------------------------------------------------------------------------- //■エラーメッセージは配列に追加 //---------------------------------------------------------------------------------- $error_message = array(); $path = getcwd(); if (isset($_ENV["OS"]) && preg_match("/window/i", $_ENV["OS"])) { $path .= "\\"; } else { $path .= "/"; } if (strlen($pic_name)>0 && strlen($pic_tmp)>0) { //---------------------------------------------------------------------------------- //■テンポラリディレクトリにファイルがアップされているかチェック //---------------------------------------------------------------------------------- if (is_uploaded_file($pic_tmp)) { //---------------------------------------------------------------------------------- //■ファイルを移動 //---------------------------------------------------------------------------------- if (!move_uploaded_file($pic_tmp, $new_dir .basename($pic_name))) { $error_message[] = "●自画像ファイルのアップロードに失敗しました"; } } } } ?> <html> <form method="post" action="<?=$SERVER["PHP_SELF"]?>" enctype="multipart/form-data" > 画像のアップロードフォーム <input type="hidden" name="MAX_FILE_SIZE" value="100000"> <input type="file" name="pic" size="40"> </html>

    • ベストアンサー
    • PHP
  • ファイルのアップロードが、どうしても どうしても 出来ません・・

    ■アップロードフォーム用のHTMLファイルです↓ ファイル名=gazou_upload.html <html> <head> <title>ファイルのアップロード</title> </head> <body> <form method="POST" action="gazou_upload.php" enctype="multipart/form-data"> <input type="hidden" name="max_file_size" value="1000000" > <input type="file" name="userfile"><br><br> <input type="submit" value="アップロード"> </body> </html> ■受け取ったファイルをサーバ上のディレクトリに移動するPHPファイルです↓ ファイル名=gazou_upload.php <?php // アップロード先ディレクトリ+ファイル名の指定 $uploaddir = '/image/'; $uploadfile = $uploaddir. $_FILES['userfile']['name']; if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) { print "ファイルアップロード成功"; print_r($_FILES); } else { print "ファイルアップロード失敗"."<br>"; print_r($_FILES); } ?> ■結果 Warning: move_uploaded_file(/image/P1010851.jpg): failed to open stream: No such file or directory in /home/sites/lolipop.jp/users/**********/web/gazou_upload.php on line 8 Warning: move_uploaded_file(): Unable to move '/tmp/phpuqa8g2' to '/image/P1010851.jpg' in /home/sites/lolipop.jp/users/***********/web/gazou_upload.php on line 8 ファイルアップロード失敗 Array ( [userfile] => Array ( [name] => P1010851.jpg [type] => image/pjpeg [tmp_name] => /tmp/phpuqa8g2 [error] => 0 [size] => 84509 ) ) 簡単なプログラムなのにちゃんと動作してくれません。色々試行錯誤試したりしているのですが・・初心者で本当に困ってます。どなたかアドバイスよろしくお願いします。

    • ベストアンサー
    • PHP
  • ファイルアップローダーで送信するファイルを保存する際にファイル名に自動でURLパラメーターを入れ込む方法を教えてください。

    phpの超初心者です。 phpでファイルをブラウザ上でアップロードするシステム でかつ、 アップロード用のURLにhttp://www.hogehoge.com/up.php?no=1234などのパラメーターを付けてアップロードするファイルを「1234.jpg」という名前で保存するものが必要になり色々調べました。 以下の方法だとアップロードしたファイル名が「.jpg」になってしまいます。 $count_fileに単純な文字列、'image'などを入れるとちゃんと「image.jpg」としてアップロードできます。 <form action="<?= $_SERVER["PHP_SELF"]; ?>" method="post" enctype="multipart/form-data"> <p><input type="file" name="data" /> <input type="submit" value="アップロード"></p> </form> <?php $updir = "./data"; $tmp_file = @$_FILES['data']['tmp_name']; $count_file = $_GET['no']; @list($file_name,$file_type) = explode(".",@$_FILES['data']['name']); $copy_file = $count_file . "." . $file_type; move_uploaded_file($tmp_file,"$updir/$copy_file"); ?> パラメーターなどの環境変数をファイル名に入れ込むにはどうしたらよいのでしょうか?調べ方が悪いのか、検索しまくってもわからなくて困っています。 どなたかご教授いただけませんでしょうか?

    • ベストアンサー
    • PHP
  • ファイルがdataフォルダにうまくアップできなくて困っています。

    htmlフォームにより、ファイルをアップロードして、 それをphpが受け取ったファイルのファイル名を、 拡張子のみそのまま利用してファイル名は 日付けと時間をdate関数を利用して つけるようにしました。 GetExt関数は、アップされた画像の拡張子のみを取得する自作関数です。 以下のスクリプトを実行しても同一階層にあるdataフォルダに写真がアップされなくて悩んでいます。 アドバイスお願い致します。 <html> <body> <table border=1> <form method="post" action="<?php echo($_SERVER["PHP_SELF"])?>" ENCTYPE="MALTIPART/FORM-DATA"> <tr><TD><INPUT TYPE="FILE" NAME="FILE" SIZE=40></TD></tr> <tr><td><input type=submit value=送信></td></tr> </table> <?php if($_FILES["FILE"]["tmp_name"] != ""){ $FilePath = "./data/" . date("YmdHis") . "." . GetExt($_FILES["FILE"]["name"]); move_uploaded_file($_FILES["FILE"]["tmp_name"],$FilePath); }else{ echo("失敗しました!"); } //GetExt()関数の定義 //ファイル名から拡張子だけを取得する関数 function GetExt($FilePath){ $f = strrev($FilePath); $ext = substr($f,0,strpos($f,".")); return strrev($ext); } ?> </body> </html>

    • ベストアンサー
    • PHP

専門家に質問してみよう