ファイルアップロードができない

このQ&Aのポイント
  • CentOS+PHP 5.1.6+Apache2を利用しています。http://www.stackasterisk.jp/tech/php/php02_07.jspをコピーしてi18n_http_output('SJIS');を削除し、改行コードLFで配置したのですが、何度ファイル送信をしようとしてもフォーム画面が出直すだけで、実際ファイルの保存もされていません。
  • 一度フォーム画面を出したままにしてifとelseを消してファイル送信するとファイル名 = ファイルサイズ = バイトファイルタイプ = テンポラリファイルパス = アップロードできません。と表示されます。tempnam('/dat','upload_');のパスも作ってあるのですが、もし無かったとしてもファイル名とかは出るはずなので、やはり不思議としか言い様がありません。
  • safeモードとかでもなく、一部のphpではファイルアップロードできているような事も聞いていますが、これも含め数種アップローダを設置してみたのですができるものとできないものがあるようです。動いたもの:http://www.k-php.com/script/uploda/index.html理由とか対処方法わかる方いらっしゃいましたら、ご教授願います
回答を見る
  • ベストアンサー

ファイルのアップロードができない

CentOS+PHP 5.1.6+Apache2を利用しています。 http://www.stackasterisk.jp/tech/php/php02_07.jsp をコピーしてi18n_http_output("SJIS");を削除し、 改行コードLFで配置したのですが、何度ファイル送信をしようとしてもフォーム画面が出直すだけで、実際ファイルの保存もされていません。 一度フォーム画面を出したままにしてifとelseを消してファイル送信すると ファイル名 = ファイルサイズ = バイト ファイルタイプ = テンポラリファイルパス = アップロードできません。 と表示されます。tempnam("/dat","upload_");のパスも作ってあるのですが、もし無かったとしてもファイル名とかは出るはずなので、やはり不思議としか言い様がありません。 safeモードとかでもなく、一部のphpではファイルアップロードできているような事も聞いていますが、これも含め数種アップローダを設置してみたのですができるものとできないものがあるようです。 動いたもの:http://www.k-php.com/script/uploda/index.html 理由とか対処方法わかる方いらっしゃいましたら、ご教授願います

  • PHP
  • 回答数1
  • ありがとう数0

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

  • ベストアンサー
noname#49664
noname#49664
回答No.1

見たところ、けっこう古い書き方をしたソースコードですね。送信されたフォームのデータを直接グローバル変数名として指定し値を取得しているようです。例えば、 <input type="file" name="UserFile">  ↓ $UserFile というようにです。これは、以前はデフォルトで設定されていましたが、今は問題が大きいため初期状態では使われないようになっているはずです。$UserFile_name、$UserFile_sizeなども同様です。 従って値の取得は、$UserFileではなく、$_POST['UserFile']のようにする必要があります。また$UserFile_nameなどのアップロードファイルの情報も、$_FILES['UserFile']['name']など$FILESから取得する必要があります。すべてのグローバル変数をこのような形で書き換えてみてください。

関連するQ&A

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

    単に画像ファイルをアップロードさせるだけなのですが、何故か出来ません。プログラミングに関しては初心者ですので、どなたかアドバイスをよろしくお願いします。 ■アップロードフォーム用の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
  • ファイルのアップロードが、どうしても どうしても 出来ません・・

    ■アップロードフォーム用の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
  • ファイルのアップロードについて

    phpのmove_uploaded_fileを使用してアップロードをしようと思うのですがアップロードが出来ません。 状況は ローカル環境のwindowsでのアップロードは行えるがlinuxでは失敗してしまいます。 move_uploaded_fileからはエラーは出力されていません そもそもmove_uploaded_fileが成功しているのになんでアップロードされていないのか分かりません。 //■HTML <form name="form1" method="post" action="upload.php" ENCTYPE="multipart/form-data"> <input type="hidden" name="MAX_FILE_SIZE" value="10485760" /> <table class="frm" id="tbl"> <tr><th>ファイル1<div id="image"></div></th> <td> 画像<input id="img_1" type="file" name="image[]" class="fname" onChange=imageChange(this); /><br /> </td></tr> <tr> <th>ファイル2<div id="image"></div></th> <td> 画像<input id="img_2" type="file" name="image[]" class="fname" onChange=imageChange(this); /><br /> </td> </tr> </table> </form> //■phpで以下のコードを実行すると oreach ($_FILES["image"]["error"] as $key => $error) { //複数のファイルをアプロード if ($error == UPLOAD_ERR_OK) { $tmp_name = $_FILES["image"]["tmp_name"][$key]; //テンポラリファイルパス $name = $_FILES["image"]["name"][$key]; //アップロードファイル名 $size = $_FILES["image"]["size"][$key]; //アップロードファイルサイズ $ermsg = $_FILES['image']['error'][$key]; //エラーメッセージ echo "アップロードファイル名".$name."\n" ; echo "アップロードファイルsize" .$size ."\n" ; echo "errmsg= .$ermsg."\n" ; // ファイルアップロード $cnt++; if ( move_uploaded_file($tmp_name, "../1/33/.$cnt."2upload.jpg ")){ //ファイルアップロード echo "アップロード成功 .$ermsg."\n" ; echo "  テンポラリファイル="$tmp_name."\n"; echo "  アップロードファイル="$dir_img."/".$cnt.UPLOAD_FILE_NAME."\n"; } else { echo 1; error_log("upload error! \n", 3, MATCHING_ERROR_LOG); exit; } } } exit; ■結果 アップロードファイル名thum6.jpg アップロードファイルsize=10104 errmsg= 0 アップロード成功   テンポラリファイル=/tmp/phpMvCzgo   アップロードファイル=../1/33/1upload.jpg アップロードファイル名 thum3.jpg アップロードファイルsize=11528 errmsg= 0 アップロード成功   テンポラリファイル=/tmp/php5Q4kIL   アップロードファイル=../1/33/2upload.jpg テンポラリの/tmpは777のため権限に問題ないです php.iniの設定 upload_max_filesize=2m post_max_size=8m memory_limit=128m 今回のアップロードファイルのサイズから問題なし file_uploads=onなので問題ありませんでした これでなにかわかる方いらっしゃいましたら教えてください。

    • ベストアンサー
    • PHP
  • phpでのファイルアップロード

    ファイルのアップロードについてご質問があります。 宜しくお願いします。 基礎phpという本でファイルをアップロードするサンプルがあり、このスクリプトでアップロードされたファイルを格納する『upload』というディレクトリをサーバに作成し、スクリプトを実行して、実際にファイルがアップロードできているかffftpにて『upload』ディレクトリの中を見てみると、なにも表示されませんでした。しかしブラウザから http://myドメイン/upload/ファイル名 にアクセスすると表示されます。 ですのでアップロードはできているがファイルが見えないという状態になっております。また『upload』ディレクトリの削除などもできなくなってしまいます。 サーバの設定が関係しているのかとも思ったのですが、サーバの設定を変更することはできないので、プログラムがわで何とかできないでしょうか? 大変申し訳ありませんが宜しくお願いいたします。 以下がそのコードです。 【up.html】 <html> <head><title>File Uploader</title></head> <body> <form method="post" enctype="multipart/form-data" action="up.php"> <input type="file" name="upfile"> <input type="submit" value="upload"> </form> </body> </html> 【up.php】 <html> <head><title>File Uploader</title></head> <body> <p> file uploader </p> <?php $updir = "./upload/"; $filename = $_FILES['upfile']['name']; if (move_uploaded_file($_FILES['upfile']['tmp_name'], $updir.$filename) == FALSE){ print("Upload failed..."); print($_FILES['upfile']['error']); }else { print("<b>" . $filename . "</b> uploaded!"); } ?> </body> </html>

    • ベストアンサー
    • PHP
  • 同じファイル内で、アップロードとアップロードされたファイルの処理をすることについて

    OS:Window XP Pro 開発環境:Xampp(Apache + PHP + Mysql) 現在ファイルをアップロードする処理を書いているのですが、 この処理を 1)a.phpでファイルをアップロードする処理 2)b.phpでアップロードされたファイルの処理 と分けて、コーディングするのではなく 1)a.php内にファイルをアップロードする処理とアップロードされたファイルの処理を一緒に記述する という風にできないかと思いましたので、 以下のようなコードを書いたのですが $_FILES['upload_file']['tmp_name']) の値を調べてみたところ、なんの値も 入っていなかったことから このコードでは、二つの処理を一つのファイル内に書くことが でいないようでした。 どうにかしてひとつのファイル内に この二つの処理を同居させることはできないのでしょうか? a.php --------------------------------------- switch($action) { case "update": if(is_uploaded_file($_FILES['upload_file']['tmp_name'])) { $upload_file = $_FILES['upload_file']['tmp_name']); if(file_exists(dirname(__FILE__)."/profile_phote/") == TRUE) { $phote_name = dirname(__FILE__)."/profile_phote/".$upload_file; } else { mkdir(dirname(__FILE__)."/profile_phote/"); $phote_name = dirname(__FILE__)."/profile_phote/".$upload_file; } move_uploaded_file($_FILES['upload_file']['tmp_name'],$phote_name); "リダイレクト処理・・・" case ... case ... default: <form name="profile" action="" method="post"> <input type="file" name="upfile"> <input type="hidden" name="action" value="update"> </form> }

    • ベストアンサー
    • PHP
  • jQueryでファイルアップロード

    お世話になります。 jQueryでファイルアップロードの処理をしたいのですがやり方を教えて下さい。 Googleで検索すると色んなプラグインが出てくるのですが全体像がわからない為上手く動作してくれません。 やりたいのは、入力画面-->確認画面-->結果確認画面と遷移させてファイルをアップロードする処理です。 <画面仕様> (1)入力画面 ・氏名等の入力とアップロードするファイルの選択 ・アップロードファイルサイズのチェック (2)確認画面 ・入力画面で入力した内容の確認 ・アップロードするファイルの確認(個数、合計サイズ) (3)結果確認画面 ・アップロード処理結果の確認 ※実際のアップロードが入力画面でファイルを選択した直後に行われても構わない 嵌っているのは、入力画面でFORMのonsubmitと<input type="file">の両方を同時に設定できない事です。 FORMのonsubmitでは入力内容のチェックを、<input type="file">ではファイルのアップロードを行い、アップロードしたファイル名を隠しフィールドで確認画面に送りたいのですが、個々に指定するとそれなりに動くのに両方指定するとsubmitが優先されてしまい、<input type="file">のchengeイベントが動きません。 どうしたら良いかご教示下さい。 中途半端なソースですが、入力画面で私がやりたいことをコードにしてみました。 よろしくお願いします。 $(function() { $('#fileId').change(function() { $(this).upload('upload.php', function(res) { $(res).insertAfter(this); }, 'html'); }); }); <form id="form1" name="form1" action="confirm.php" method="post" enctype="multipart/form-data" onsubmit="return error_check();"> <input type="file" name="upload_file1" id="fileId" />

  • ファイルのアップロード先

    環境:PHP5&Apache2(&MySQL5)&XP ファイルをアップロードする場合、 http:///****/test/test01.php でtest01.phpがアップロードを行うファイルだった場合、 testフォルダに直接アップロードする方法はあるのでしょうか。 php.iniのupload_tmp_dirの記述で、アップロードフォルダを設定したあと、ファイルを移動するしかないのでしょうか。 アドバイスいただけると幸いです。

    • ベストアンサー
    • 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
  • バイナリファイルのアップロード

    とあるサイトのマルチパートリクエストの使用事例をそのまま使って153KB程度のGIFファイルをアップロード実験してみましたら、処理後ブラウザで「cgi-lib.pl: Request to receive too much data: 153345 bytes 」と表示されアップロードされません。表示の意味と、どうすればアップロードできるかを教えてください。 ● サンプルHTML <html> <head><title>ファイルアップロード</title></head> <body> <form method="POST" action="upload.cgi" enctype="multipart/form-data"> <input type="file" name="upload"> <input type="submit" value="送信"> </form> </body></html> ● サンプルCGI require "cgi-lib.pl"; &ReadParse; $upload = $in{"upload"}; # ファイル内容を取得 $name = $incfn{"upload"}; # ファイル名を取得 $name =~ s/\\/\//g; # パス区切り文字を/に変換 $name = substr($name,rindex($name,"/")+1); # ファイル名のみを取得 if($upload ne "" && $name ne ""){ open(FILE,">$name"); binmode(FILE); print FILE $upload; close(FILE); }

    • ベストアンサー
    • Perl
  • PHPにてファイルがアップロードできません。

    PHPにてファイルがアップロードできません。 今回PlugSheevaの亜種である玄柴(ubuntu)にてapache2+PHP5でAjaXplorerという phpで動作する物を設置しようと試みているのですが AjaXplorerにブラウザでアクセスしアップロードしようとすると there has been an IO Error:Error #2038 There has been an HTTP Error:412 というエラーが発生します。 色々試みたのですが諦めてaxlope20というphpでブラウザからアップロードを試みたのですが 転送を試みると転送画面が自動で閉じ、何の変化もなしに前のディレクトリ画面に戻されます。 このことからphpの設定でアップロードの設定ができていないと考えたのですが 解決方法がわかりません。 php.iniの設定を以下のものにしました。 safe_mode = Off (デフォルトのまま) max_execution_time = 300 max_input_time = 600 memory_limit = 32M register_globals = On post_max_size = 3500M file_uploads = On upload_tmp_dir = /tmp upload_max_filesize = 3500M と、したのですが結果は変りませんでした。 chmod 777 tmpでtmpフォルダにパーミッション777を渡してあります。 容量の小さなファイルもアップロードできません。 しかし設置当初一度だけAjaXplorerで500Kbのexeファイルがアップロードすることができたのですが それもなぜできたのか不明です。 後に同じファイルを何度も転送しようと試みましたが駄目でした。 ext3でフォーマットしたUSBを差込み、それをmount /dev/sda /mnt/usb/としてマウント /mnt/usb/www/htmlがapache2の公開ディレクトリにしております 今は実験段階ですのでAjaXplorerもaxlope2も chmod 777 -Rでフォルダ全体にパーミッション777を与えてあります 上記の事以外は初期設定のままであると思います。 phpでファイルをアップロードできるようにするにはどうすればいいのでしょうか? 回答よろしくお願いします。

    • ベストアンサー
    • PHP