PHP POSTした$_FILESの値が正しくない

このQ&Aのポイント
  • PHPでのファイルのアップロードにおいて、POSTされた$_FILESの['name']の値が正しく格納されていません。
  • 具体的には、必ず1Byte目が消失しており、全角のファイル名は文字化けを起こします。
  • 原因がわからず、解決策が見つかりません。ご教授いただける方がいらっしゃればお願いします。
回答を見る
  • ベストアンサー

PHP POSTした$_FILESの値が正しくない

お世話になっております。 PHPにてファイルのアップロードを行うプログラムを書いています。 しばらく安定動作していたので問題はないと考えていたのですが、ふとPOSTされた$_FILESの['name']の値を見ると、正しく格納されていません。 具体的には、必ず1Byte目が消失しています。 そのため、全角のファイル名は文字化けを起こします。 他の要素は正しく格納されており、['error']の値は0です。 ex) abc.txt → bc.txt ex) 1.txt → .txt 思い当たる節がなく、いったいどこに原因があるのか検討もつきません。 心当たりのある方がいらっしゃいましたら、是非ともご教授ください。 以下に環境を掲載しますが、他に必要な項目があれば追記致します。 ------------------------------------------------- ○サーバ ・Windows Server2008 R2 ・Apache 2.2.21 ・PHP 5.3.8 ○クライアント ・IE8.0、FireFox、Google Chrome,Safariで確認 ○index.php(UTF-8) ※抜粋しています <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <form method="post" enctype="multipart/form-data" action="./upload.php"> <input type="file" name="files" /> <input type="submit" value="送信" /> </form> ○upload.php(UTF-8) <?php mb_language('uni'); mb_internal_encoding('utf-8'); mb_http_input('auto'); mb_http_output('utf-8'); print_r($_FILES); ?> ------------------------------------------------- よろしくお願いいたします。

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

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

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

自信なし。 Bug #55510 $_FILES 'name' missing first character after upload. https://bugs.php.net/bug.php?id=55510

Zanggy
質問者

お礼

ご回答ありがとうございます。 ご指摘の通り、バージョン特有のバグでした。 2012/05/12現在最新である5.4.3にバージョンアップしたところ、正常に動作しました。

関連するQ&A

  • PHPがHTMLのformの値を受け取らない

    状況: ファイルアップロードを作成しようとしたところPHPがHTMLのformのsubmitした物を受け取らない。 しかしHTML側にjavascriptを読み込ませ XMLHttpRequest によってsendすると受け取れる。 環境: apache 2.2.4 php 5.2.3 ------------HTML <html><body> <form action="test.php" enctype="multipart/form-data"> <input type="text" id="name"> <input type="file" id="file"> </form> </body></html> ------------PHP <?php header('Content-type: text/plain; charset=UTF-8'); print "\$_POST:";var_dump($_POST);print "\n"; print "\$_FILES:";var_dump($_FILES);print "\n"; ?> ------------結果 $_POST:array(0) { } $_FILES:array(0) { } ------------ 原因がphp.iniなのか、httpd.confなのか、はたまたそれ以外に原因があるのかがさっぱり判らず質問しました。 どうやったらHTMLのformの値をPHPで受け取れますか?

  • ファイルのアップロード (PHP, $_FILES)

    以下の内容で困っております、ご教授いただけますと幸いです。 ファイルのアップロードで、以下のようなPHPページを作成し 実際ファイルのアップロードを実行した場合、 IEやMozillaではうまくいくのですが、Operaでうまくいきません。。 $_FILES配列に何も入っていない状態です。 なにかブラウザ側の設定が原因なのでしょうか? ちなみにテストしているファイルのサイズは10KB以下でphp.iniでの "upload_max_size"の設定値は2MBです。 --簡易ソースコード-- <HTML> <BODY> <FORM ENCTYPE="MULTIPART/FORM-DATA" NAME="up" ACTION="./" METHOD="POST"> <INPUT TYPE="HIDDEN" NAME="MAX_FILE_SIZE" VALUE="10000000"> <INPUT TYPE="FILE" NAME="userfiles" SIZE="50"> <INPUT TYPE="SUBMIT" VALUE="GO!"> <?PHP print_r ($_FILES); ?> </FORM> </HTML>

    • ベストアンサー
    • PHP
  • PHPをはじめて1日目なので・・・

    参考書を見ながらPHPの勉強を始めていますが、本のサンプルと全く同様にコーディングしているはずなのに、良い結果が得られずバグとなります。 formとpostを使って内容を渡すという項目なのですが。 form.htmlの内容。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <form method="post" action="form1.php"> 好きな食べ物は?<input type="text" name="food1"><br> 好きな飲み物は?<input type="text" name="food2"> <input type="submit" value="送信"> </form> </body> </html> form1.phpの内容 <?php header('Content-type: text/html; charset=UTF-8'); ?> <html> <body> <?php $f1 = $_POST['food1']; $f2 = $_POST['food2']; $f1 = htmlentities( $f1, ENT_QUOTES, 'UTF-8' ); $f2 = htmlentities( $f2, ENT_QUOTES, 'UTF-8' ); echo 'あなたは「', $f1, "」が好きなんですね。<br>\n"; echo '「', $f2, "」も好きなんですね。<br>\n"; ?> </body> </html> おそらくちょっとしたことが原因でエラーが出ているのだと思いますが、まだ始めて1日目なので、どこがいけないのかさっぱりわかりません。 一体どこがおかしいのか、教えていただけますか?

    • ベストアンサー
    • PHP
  • PHPのお問い合わせフォームが動かない

    「ぶっとびねっと」というレンタルサーバーに以下の2つのファイルをアップしました。 ・contacts.html ・contacts.php しかしフォームに入力後、送信を押してもメールが指定したアドレスに届きません。 なぜでしょうか。。。 ソースを下に貼りますので、ご教授願います。 -----  contacts.html  -------------------------------- <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>メールフォーム</title> </head> <body> <form method="post" action="contacts.php"> お名前:<input type="text" name="namae" /><br /> メールアドレス:<input type="text" name="meado" /><br /> 件名:<input type="text" name="subject" /><br /> お問い合わせ内容:<textarea name="content" cols="50" rows="5"></textarea><br /> <input type="submit" name="submit" value="メール送信" /> </form> </body> </html> ------------------------------------------------------ -----  contacts.php  -------------------------------- <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"    /> <title>メールフォーム</title> </head> <body> <?php if ($_POST["submit"] == "メール送信") { mb_language("Ja") ; mb_internal_encoding("UTF-8") ; $mailto="○○○○@hotmail.co.jp"; $subject = $_POST["subject"]; $content = $_POST["content"]; $namae = $_POST["namae"]; $meado = $_POST["meado"]; $mailfrom="From:" .mb_encode_mimeheader($namae) ."<".$meado.">"; mb_send_mail($mailto,$subject,$content,$mailfrom); } ?> <form method="post" action=""> お名前:<input type="text" name="namae" /><br /> メールアドレス:<input type="text" name="meado" /><br /> 件名:<input type="text" name="subject" /><br /> お問い合わせ内容:<textarea name="content" cols="50" rows="5"></textarea><br /> <input type="submit" name="submit" value="メール送信" /> </form> </body> </html> ------------------------------------------------------

    • ベストアンサー
    • PHP
  • POSTされない

    xamppにてローカル環境でやっているのですがなぜか type="file"だけPOSTされません。 ie6とfairefox3で試しましたが取得できませんでした。 調べてみたのですが同様の事例が見つからずわからかったのですが これは何が原因なのでしょうか? ---html--- <form action="index.php" method="post" enctype="multipart/form-data"> <input type="text" name="name" /> <input type="file" name="img" /> <input type="submit" name="send" value="送信する" /> </form> ---php--- if (isset($_POST['send'])) { echo '<pre>'; print_r($_POST); echo '</pre>'; } print_r($_FILES);を試すと正常に値が表示されます。全く意味不明 なのですが何かセキュリティ上の問題などが原因なのでしょうか?

    • 締切済み
    • PHP
  • phpのプログラミング

    phpの事について質問があります。 画像をアップロードしてデーターベースに画像のパスを入れるプログラミングに挑戦中なのですが、 うまくいかないので詳しい方アドバイスお願い致します 作っているプログラミングの流れは 1の画面で画像選択とコメントの入力 2の画面で画像の確認とコメントの確認 3の画面で『登録しました』の文言の表示とサーバへの書き込み (今回は3の画面では確認の為echo文で飛んでいるかどうかの確認のみ行っております) ちなみにアップロードはうまくいっており、uploadsというディレクトリーを作ってそこに画像をUPしております を考えているのですが、 2画面でinput typeのhiddenを使ってコメントと画像のパスを3の画面に飛ばそうと思っているのですが、 コメントは3の画面に飛んでいるのに、画像のパスが3の画面に飛んでないみたいです、画像のパスはinput typeのhidden で飛ばす事は出来ないのでしょうか? プログラミング以下のような感じです 2の画面 confirm.php <!DOCTYPE html> <html> <head> <meta charset=UTF-8" /> <title>確認画面</title> </head> <body> <h3>以下の内容で登録しますか?</h3> <?php $message=$_POST['message']; ?> <form action="entry.php" method="POST" enctype="multipart/form-data"> <input type="hidden" name="message" value="<?php echo $message; ?>"> <input type="hidden" name="upload_name" value="<?php echo $upload_name; ?>"> メッセージ <?php echo $message;?><br /> 画像 <?php $file_name = $_FILES['filename']['name']; $file_type = $_FILES['filename']['type']; $temp_name = $_FILES['filename']['tmp_name']; $dir ='uploads/'; $upload_name = $dir.$file_name; $result = move_uploaded_file($temp_name,$upload_name); ?> <br /> <?php if($result){ echo'■アップロード成功'; $image_size =getimagesize($upload_name); } else{ echo'■アップロード失敗'; } ?> <?php echo $upload_name;?> <input type="submit" value="登録する"> </form> </body> </html> 3の画面 entry.php <!DOCTYPE html"> <html> <head> <meta charset=UTF-8> <title>登録画面</title> </head> <body> <?php echo $_POST['message']; ?> <?php echo $_POST['upload_name']; ?> </body> </html>

    • ベストアンサー
    • PHP
  • $_Filesのnameについて

    環境:Windows2008R2 + PHP5.4 次のようなHTMLより日本語ファイル(い.pdf)を読み込みPHPの$_FILES変数で確認をすると 文字化けしていたので、バイナリエディタで確認すると「c3a3c281c284.pdf」となっていました。 これを「い.pdf」へ戻すにはどうすれば良いでしょうか? HTMLファイルのエンコードは、「UTF-8」です。 よろしくお願いします。 htmlファイル <form id="aupload" action="upload.php" method="POST" enctype="multipart/form-data"> <input type="file" name="aupname" multiple="multiple"/> </form>

    • ベストアンサー
    • PHP
  • php内のformのvalueに変数の値をいれたい

    どうぞよろしくお願いします。 php内のformのvalueに変数の値をいれたいのですが、下記の様に書くと<?=$a?> がそのままソースに出てしまいます。 どの様に書けば変数の値をvalueに格納できるでしょうか? <?php $a='abcd'; print'<form method="post" action="abc.php">'; print'<input type="hidden" name="a" value="<?=$a?>">'; print'</form>'; ?>

  • PHPからファイルアップロードの実現

    ブラウザからファイルをアップロードするように、PHP内で同じことを実現させたいと考えています。 fsockopenを使用してGETやPOSTをすることは実現できていますが、ファイルのアップロードとなると少々勝手が違い、うまいことできません。 現状では下記のようなものを送信させているのですが、受け取り側のPHPで認識できません。 POST /upload.php HTTP/1.0 host: 127.0.0.1 Content-Type: multipart/form-data; boundary=---test Connection: close Content-Length: 120 ---test Content-Disposition: form-data; name="test"; filename="test.txt" Content-Type: text/plain testtest ---test 現状、テスト用に upload.php というので受け取っているのですが、$_FILES 変数は空の状態です。 基本的なところを理解していないので、根本的に間違っていたり、足りないところがあるような気がするのですが…。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 【PHP】文字をPOSTで飛ばすと「'」「"」「\」に「\」がつく

    <form>で文字列を送信して「$_POST」で受信する場合、 「'」「"」「\」の前にのみ自動で「\」がついてしまいます。 (「'」「"」「\」→「\'」「\"」「\\」) これはなぜでしょうか? できれば\を付けないようにしたいのですが… お詳しい方、よろしくお願いいたします。 <環境> EUC-JP PHP4.4.4 <プログラム> <?php header('Content-Type: text/html; charset=EUC-JP'); header('Content-Language: ja'); mb_internal_encoding("EUC-JP"); $step = $_GET["step"]; $tx = $_POST["tx"]; if($step==''){ // ---- 初期画面 print "<form action='hoge.php?step=end' method='POST'>"; print " <input type='text' name='tx'>"; print " <input type='submit' value='ENTER'>"; print "</form>\n"; } if($step=='end'){ // ---- 受信画面 print "{$tx}"; } ?>

    • ベストアンサー
    • PHP