質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

1184閲覧

PHP ファイルアップロードについて

SONIK

総合スコア14

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2016/12/07 06:42

お世話になります。

PHPでファイルをアップロードする処理を行いたいのですが、

PHP

1<FORM method="POST" action="update.php" enctype="multipart/form-data"> 2 <INPUT type="file" name="upfile" size="50" MAXLENGTH="256" /> 3 <INPUT type="submit" name="sousin" value="登録" /> 4</FORM>

上記のやり方でデータを取得し、

PHP

1echo $_FILES["upfile"]["name"];

で取得内容(ファイル名)を確認したところ、
大方のファイルは問題無く正しいファイル名を取得できたのですが、
一部ファイルではファイル名が変わってしまいました。

ex1:営業1課11月度活動報告書.xlsx → 告書.xlsx

ex2:番号管理表.xlsm → .xlsm

どうしても原因がつかめません。
皆様の知恵をお借りできませんでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

実行している PHP が Shift-JIS 環境で動いていませんか?

投稿2016/12/07 06:56

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SONIK

2016/12/07 07:04

ご指摘の通り、Shift-JISでした。 Shift-JISでは上記の方法は実現出来ないのでしょうか?
tacsheaven

2016/12/07 07:25

Shift-JIS の場合、いわゆる'\' (0x5c)問題というのが発生するのです。 きちんとマルチバイトを考慮していない作りの場合に、文字列中に '\' が入りこむと予期せぬ挙動をします。で、「表」という字を Shift-JIS であらわすと、「0x95 0x5c」となり、これに該当します。 今回の場合、これが「パスの区切り文字」として扱われてしまい、番号管理表.xlsx が番号管理{0x95}\.xlsx となって、.xlsx だけがファイル名になってしまっているのです。 バックエンドのDBは Shift-JIS にならざるを得ないとしても、Web のインタフェースは UTF-8 にしてしまう(php の出力をすべて UTF-8 にコンバートして出す、php からの読み取りも全て UTF-8 にして、読み取った後でShift-JIS にコンバートする)とうまくいきそうな気はしますが、できれば Shift-JIS の環境を捨てた方がすっきりすると思います。 ※まあ、UTF-8 にしたところで、Shift-JIS との変換問題(いわゆる波ダッシュ問題)があるわけですが…
SONIK

2016/12/07 08:53

ご返答ありがとうございます。とても勉強になりました! '\' (0x5c)問題ですか…今回の原因は、ご解説頂いた内容で間違いないかと思います。 ご返答内容の終盤のような対応で上手く動作するか試してみます!
guest

0

以前のQAを参照してください
PHP $FILESで受け取った文字が文字化け

投稿2016/12/07 06:54

katsuya141

総合スコア367

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問