• ベストアンサー

ファイルのアップロードで、ファイル名が文字化けして困っています

いつもお世話になります。 いろいろ調べましたが解決しませんでした。 今社内で、情報共有掲示板を作成しているのですが、 ファイルをアップロードすると、ファイル名がぐちゃぐちゃになっています。(英数字は問題ありません) たとえば、自己申告0936.xls をアップロードすると、シォクハソスケ・936.xls となってしまいます。 PHPで作成し、サーバはApache2で、OSはWindows2000です。プログラムはEUC,MySQLはEUCの設定です。 ファイル名をデータベースにも登録するようにしていますが、そこでは文字化けは起こりません。 if($_FILES['file1']['name'] != ""){ mkdir("$uploaddir"); $ufile1 = $_FILES['file1']['name']; $uploadfile = $uploaddir.$ufile1; move_uploaded_file($_FILES['file1']['tmp_name'],$uploadfile); } 一部ですが、最大10個ファイルを送れるようにしています。 どうかよろしくお願いいたします!!

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

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

$uploadfile = $uploaddir.$ufile1; move_uploaded_file($_FILES['file1']['tmp_name'],$uploadfile); 以下に変更して下さい。 $uploadfile = $uploaddir.$ufile1; move_uploaded_file($_FILES['file1']['tmp_name'], mb_convert_encoding($uploadfile, "SJIS", "EUC-JP")); mb_convert_encoding()は、php.iniでマルチバイト関数を 有効にしておく必要があります。 変更する点は以下等を参考にして下さい。 http://aki.adam.ne.jp/scripts/question/write.php?mode=res&id=1463

tomofriend
質問者

お礼

ありがとうございました!おっしゃるとおりにすると文字化けせずに解決できました。 本当にありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.2

多分ファイル名がSjisとかになっているのでは? WINの内部文字コードはS-JISなので・・・ PHP内で受け取ったファイルネームをエンコードすればできると思います。(多分) というか、ファイルをアップロードすると文字化けして、Mysql上では文字化けしない・・・? というのはどういうことでしょうか? アップロードしてMysqlで記録したときには文字化けしないで、読み出したときに文字化けしているということでしょうか?

全文を見る
すると、全ての回答が全文表示されます。
  • asahina02
  • ベストアンサー率47% (95/202)
回答No.1

アップロードするフォームのHTMLの文字コードは何になってますか? ちゃんとEUCになってますか? 現象的には文字コードの問題だと思うので、各箇所のコードを確認してみてだくさい。

tomofriend
質問者

補足

回答ありがとうございます。 ヘッダーは以下のようになっていますので、EUCで問題ないと思います。 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="content-type" content="text/html;charset=euc-jp"> <title>XXXX -登録-</title>

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ファイル名を変更してアップロードする方法

    お世話になります。 PHPでファイルをアップロードして管理するプログラムを作成していますが、日本語名がどうしても文字化けし、あまり日本語名を使わない方がいいという意見もあることから、どのようなファイル名でも指定できるようにして、保存するとき、プログラム側で、ファイル名を自動でYYYYMMDDHHII(例:200504160033.doc)みたいにしたいのですが、どこをいじったらよいのでしょうか。 (もし、日本語のファイル名が使えたとしても、同名のファイルだと、上書きされる問題もあるので。これだと、そういう問題もないと思います)何かアドバイスをいただけたらと思い、投稿しました。よろしくお願いいたします。 受け取る側のファイル.php $uploaddir = "./images/"; $uploadfile = $uploaddir. $_FILES['userfile']['name']; move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile);

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

    phpとApacheを利用して、ファイルのアップロードしたいのですが以下のようなエラーが出て上手くいきません。 エラー文 Warning: move_uploaded_file(C:\Program File\Apache Group\Apache2\htdocs\image\200708090925000.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory in C:\Program Files\Apache Group\Apache2\htdocs\view.php on line 12 Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\WINDOWS\Temp\php11.tmp' to 'C:\Program File\Apache Group\Apache2\htdocs\image\200708090925000.jpg' in C:\Program Files\Apache Group\Apache2\htdocs\view.php on line 12 正常にアップロード処理されませんでした。 php.iniの設定はfile_upload=On upload_tmp_dir=NULL upload_max_size=2M です。 phpinfo()で確認したところ、upload_tmp_dirがno valueになっているのですが、設定が反映されていないのでしょうか? 参考までに作成したプログラムを載せておきます。 <HTML> <HEAD> <TITLE>PHPのテキスト</TITLE> </HEAD> <BODY> <?php $file_dir = 'C:\Program File\Apache Group\Apache2\htdocs\image\\'; $file_path = $file_dir.$_FILES["uploadfile"]["name"]; if(move_uploaded_file($_FILES["uploadfile"]["tmp_name"], $file_path)){ $img_dir ="/image/"; $img_path = $img_dir.$_FILES["uploadfile"]["name"]; $size = getimagesize($file_path); ?> ファイルアップロードを完了しました。<BR> <IMG src="<?=$img_path?>"<?=$size[3]?>><BR> <B><?=mb_convert_encoding($_POST["comment"], "EUC-JP","SJIS")?></B><BR> <?php }else{ ?> 正常にアップロード処理されませんでした。<BR> <?php } ?> </BODY> </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
  • unlinkでどうしてもファイルが削除できない!!

    お世話になります。 いろいろとネットで情報を探しているのですが、どうしても解決しません。 ローカルなapacheのサーバにファイルをアップロードし、指定のファイルを削除するプログラムを作成しています。 プログラムファイルのあるディレクトリの下に"files"というディレクトリがあり、その下に、アップロードした日付でディレクトリ(例:"200511171010")をプログラム側で作成し、その下にファイルをアップロードするものです。 編集するプログラムで、選択したファイルを削除するというものです。 サーバは、Windows2000,MySQL,Apacheです。プログラムはEUCで書かれています。 ・フォルダを作成するプログラム $uniq = $dir_y.$dir_m.$dir_d.$dir_h.$dir_i; $uploaddir = "./files/$uniq/"; //ファイルのアップロード処理 if($_FILES['file1']['name'] != ""){ mkdir("$uploaddir"); $ufile[1] = $_FILES['file1']['name']; $ufile[1] = str_replace("'","’","$ufile[1]"); $uploadfile = $uploaddir.$ufile[1]; move_uploaded_file($_FILES['file1']['tmp_name'],mb_convert_encoding($uploadfile, "SJIS", "EUC-JP")); } ・ファイルを削除する部分 $rslt = unlink("./files/$uniq/$t[$i]"); です。 エラーは、 Warning: unlink(./files/20051115195407/購入書籍.xls) [function.unlink]: No such file or directory in C:\Program Files\Apache Group\Apache2\htdocs\shuchi\edit_ok.php on line 103 です。ファイル自体はあるのですが、削除されていません。 パーミッションとかも、フォルダを作成するときとか、いろいろいじってみたのですが解決しませんでした。 何かわかれば是非、教えてください。すみませんがよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • レンタル共用サーバーでのファイルのアップロードについて

    レンタル共用サーバーでのファイルのアップロードについて、 教えてください。 PHPが、セーフモードで動いているレンタルサーバーで、 ファイルのアップロードを行いたいのですが、 具体的には、どうやればよいのでしょうか。 ローカル環境でファイルアップロードを行っている書籍を、 参考にしているのですが、 ローカル環境から、レンタルサーバー環境への読み替えを どのように行えばよいのかが分かりません。 恐らく、ファイルの移動先($file_dir)を書き換えるのではないか、 と検討をつけたのですが、 ファイルのアップロード自体をやったことがないため、 どう書き換えればよいか分かりません。(絶対パス? 相対パス?) <参考にした書籍のコード抜粋> $file_dir = 'C:\Program Files\Apache Group\Apache2\htdocs\image\\'; $file_path = $file_dir . $_FILES["uploadfile"]["name"]; if (move_uploaded_file($_FILES["uploadfile"]["tmp_name"], $file_path)) { <参考にしたサイト> http://z49.org/2009/04/03/199/

    • ベストアンサー
    • PHP
  • アップロードファイル名の文字化け

    いつもお世話になっております。 アップロードしたファイルから $_FILES['userfile']['name'];で、アップしたファイル名を取得しようとするときにファイル名に 特定(後半1バイトが'5C')の漢字を含むとPHPが、'\'と誤認して該当の文字から前を消して表示してきます。 例えば、「内部構造.txt」は、「造.txt」に化けます。move_uploaded_file関数で、アップしたファイルをどこかに保存しようにも、ファイル名が正しく指定できません。 どなたか、対策方法をご教授頂けませんでしょうか? よろしくお願いいたします。 <? mb_internal_encoding("EUC"); echo "userfile_name is ".$_FILES['userfile']['name']; echo "<br>"; echo "userfile_type is ".$_FILES['userfile']['type']; echo "<br>"; echo "MAX_FILE_SIZE is ".$_POST["MAX_FILE_SIZE"]; echo "<br>"; echo "userfile_tmp_name is ".$_FILES['userfile']['tmp_name']; echo "<br>"; echo "userfile_error is ".$_FILES['userfile']['error']; echo "<br>"; echo "userfile_size is ".$_FILES['userfile']['size']; echo "<br>"; $dir="c:/work/"; if (move_uploaded_file($_FILES['userfile']['tmp_name'], $dir.$_FILES['userfile']['name'])) { print "File is valid, and was successfully uploaded. "; } else print("UPLOAD ERROR!!"); ?>

    • ベストアンサー
    • PHP
  • 全角ファイル名をアップロードすると文字化け

    複数のファイルをアップロードできるスクリプトを作成しています。 サーバはWindows、PHPのバージョンは5です。 利用者の要望で日本語のファイル名もアップロードできるようにしたいのですが、文字化けします。 http://okwave.jp/qa1724442.html を参考にし、下記のスクリプトを move_uploaded_file($att_tmp, mb_convert_encoding($att_name,"UTF-8")); と、変更もしてみましたが、うまくいきません。 $valueは文字化けせずに表示されていますが、サーバ上ではファイル名が「逋コ陦ィ謇ソ隱阪す…」という風に化けてしまいます。 対策を教えて頂けませんでしょうか。 よろしくお願いします。 if (isset($_POST["submit"])){ //添付ファイル用変数 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]; $att_size = $_FILES["att"]["size"][$key]; if (strlen($att_na)>0){ //ファイル移動 list($att_nam,$k) = explode(".",$att_na); $ymdhis = date("YmdHis"); $att_name = "{$att_nam}-{$ymdhis}.{$k}"; move_uploaded_file($att_tmp, "file/$att_name"); $att_name_ar[] = $att_name; foreach($att_name_ar as $value){ echo $value."<br>"; } } } }

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

    ファイルをHTMLのINPUTでファイルを選択し、 アップロード後、メールに添付して送信を行おうとしているのですが、 音楽ファイル(weve,mp3等)がアップロードできません。 画像ファイルはアップロード・添付してメール送信できるのですが、音楽ファイルは使用する関数等が 異なるのでしょうか? $uploadfile1_size = $_FILES['uploadfile1']['size']; $uploadfile1_name = $_FILES['uploadfile1']['name']; $uploadfile1_tmp = $_FILES['uploadfile1']['tmp_name']; $uploadfile1_tmpを出力しても何も表示されないため、アップロードからできていないと思いますが分かりません。 どうか教えて下さい。よろしくお願いします。

    • 締切済み
    • 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技術書籍で掲載のPHPファイル・アップロードの例を試したところ、アップロードするファイル・サイズは、小さいな(数KB)場合が成功、より大きな場合(例えば40KB~)が失敗!何故失敗なのかよく分かりません。ファイル種類には関係なさそうです。 詳しい方に教えて頂ければ助かります。 ※ ご参考 - 1. 具体的なHTML&PHPコードは、次の通りです。 2. 利用環境: 最新版XAMPP、Windows 7、XAMPPデフォルト・ルートをD:のある フォルダーに変更。D:に十分空き領域があると確認済み(数十GB)。 =====HTML===================== <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>fupload</title> </head> <body> <h3>ファイルアップロード</h3> <form method="POST" action="fupload.php" enctype="multipart/form-data"> <!-- MAX_FILE_SIZE は、必ず "file" input フィールドより前になければなりません --> <input type="hidden" name="MAX_FILE_SIZE" value="100000" /> <!-- input 要素の名前が $_FILES 配列での名前となります --> <input name="userfile" type="file" size="70"/> <input type="submit" value="アップロード" /> </form> </body> </html> =====PHP--===================== <?php $uploaddir = './up/file/'; $uploadfile = basename($_FILES['userfile']['name']); echo '<pre>'; //if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) { if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir.$uploadfile)) { echo "ファイルアップロードに成功しました。\n"; } else { echo "ファイルアップロードは不成功です。\n"; } echo '<pre>'; ?> =====PHP関連設定(php.ini)========-== ;;;;;;;;;;;;;;;; ; File Uploads ; ;;;;;;;;;;;;;;;; ; Whether to allow HTTP file uploads. ; http://php.net/file-uploads file_uploads=On ; Temporary directory for HTTP uploaded files (will use system default if not ; specified). ; http://php.net/upload-tmp-dir upload_tmp_dir="C:\xampp\tmp" ; Maximum allowed size for uploaded files. ; http://php.net/upload-max-filesize upload_max_filesize=2M ; Maximum number of files that can be uploaded via a single request max_file_uploads=20

    • ベストアンサー
    • PHP