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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

3回答

2480閲覧

【PHP】画像アップロード時のファイル名に関してです。

WEB_SECTION

総合スコア13

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2017/09/10 02:39

今までPHPを触った事もない超初心者です。
失礼ながら、それをご理解の上で聞いて頂ければ幸いです。

◆常に任意のファイル名で画像をアップロードしたい◆

現在、よそ様のページから引用して、下記のHTMLページを準備しました。

<form action="upload.php" method="post" enctype="multipart/form-data"><BR> <FONT color="#0000ff">[ファイルを選択]</FONT>ボタンから写真を選択してください↓<BR> <BR> <input type="file" name="upfile" size="30" /><BR> <BR> <BR> <FONT color="#0000ff">[アップロード]</FONT>を押して操作を完了してください↓<BR> <BR> <input type="submit" value="アップロード" /></form>

そして、これまた丸コピなのですが、下記のPHPコードが手元にあります。

<?php if (is_uploaded_file($_FILES["upfile"]["tmp_name"])) { if (move_uploaded_file($_FILES["upfile"]["tmp_name"], "files/" . $_FILES["upfile"]["name"])) { chmod("files/" . $_FILES["upfile"]["name"] , 0644); echo $_FILES["upfile"]["name"] . "をアップロードしました。"; } else { echo "ファイルをアップロードできません。"; } } else { echo "ファイルが選択されていません。"; } ?>

これでサーバーに設置した「files」というフォルダに画像がアップロードされるのですが、このコードでは親切に元々のファイル名で保存が行われます。

そうではなく、どのようなファイル名でアップロードを行ったとしても、例えば「photo」というような固定のファイル名で上書き保存が行われるような方法はありませんでしょうか?

ご指導の程、宜しくお願い致します。

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

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

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

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

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

guest

回答3

0

ベストアンサー

通常move_uploaded_file()は同じファイルが存在する場合は上書きされます。
ファイル名を固定でphoto.拡張子で、下記コードはFileinfoのContent-Typeから拡張子を自動補完します。

■エラーチェック
本番環境の場合はきちんと行ってください。

エラー処理を下記のようにIF文の中にechoしてしまうと量産性に欠けます。できるだけ、エラー処理を共有化するクラスや例外クラスなどを作成するようにしてください。

php

1if (is_uploaded_file($_FILES["upfile"]["tmp_name"])) { 2 //拡張子判別 3 $mimetype = mime_content_type($_FILES['upfile']['tmp_name']); 4 $extension = array_search($mimetype, [ 5 'jpg' => 'image/jpeg', 'png' => 'image/png', 'gif' => 'image/gif', 6 ]); 7 8 if (false !== $extension) { 9 $upfile = 'photo.'.$extension; //固定アップロードファイル名(拡張子自動補完) 10 $uppath = 'files/'.$upfile; 11 12 //アップロードファイル移動、上書き 13 if (move_uploaded_file($_FILES["upfile"]["tmp_name"], $uppath)) { 14 chmod($uppath, 0644); 15 echo $upfile . "をアップロードしました。"; 16 } else { 17 echo "ファイルをアップロードできません。"; 18 } 19 } else { 20 echo $mimetype.'のファイル形式はアップロードできません。JPEG・PNG・GIFの画像のみアップロードできます。'; 21 } 22} else { 23 echo "ファイルが選択されていません。"; 24}

セキュリティについて

te2ji様の回答を見ていただければわかるように、上記のコードは全くセキュリティを考慮していません。実際のサービスなどの本番環境では絶対にそのまま使用しないでください。勉強のためや動作確認のためなら問題ないです。

本サイトのような質問で、セキュリティを考慮したい場合は、まず必要最低限の実現方法を理解してからセキュリティを考慮したコードの書き方やロジックを理解するようにすると良いと思います。上記のコードは質問に対する「最低限の実現方法」です。

セキュリティを考慮してこれで正解!というものはありません。日々セキュリティについての情報をチェックしておかないと、今まで安全と言われていたコードが突然安全でなくなることもありえます。セキュリティを考慮するソースコードすべてが対症療法ですので根本的にすべてを解決する方法はありません。

投稿2017/09/10 04:59

Tomak

総合スコア1652

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

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

WEB_SECTION

2017/09/10 05:16

ありがとうございます。 欲しかった物が出来ました。 詳しく説明すると長くなるのですが、あくまでも自分専用の物なので、これで十分です。 もし今後、公開する機会があればセキュリティ関連も色々と勉強してみたいと思います。 早々のアドバイス助かりました。
maisumakun

2017/09/10 07:02

「自分専用」のものであっても、「ローカルやVPN上にあって、第三者しかアクセスできない」あるいは「何かしらのログイン認証を通らないとアクセスできない環境下にある」というのでなければ、世界中の誰もがサーバにアクセスできます。 インターネットに置いておくとすれば、(最低限第三者の不正アクセスを用意にさせない程度には)一定の責務はあります。
guest

0

がると申します。
些か、本題から脱線いたしますが。

引用テキストこのコードでは親切に元々のファイル名で保存が行われます。

との事ですが、こちらは端的に「セキュリティ上、危険である可能性」が、十分に存在します。
どちらのPageから拝見したのかは不明ではあるのですが、気を付けられることを強くお勧めいたします。

投稿2017/09/10 04:52

gallu

総合スコア506

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

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

WEB_SECTION

2017/09/10 05:18

早々のアドバイスありがとうございます。 詳しく説明すると長くなるのですが、あくまでも自分専用の物なので、今回はTomak様のコードで事足りました。 もし今後、公開する機会があればセキュリティ関連も色々と勉強してみたいと思います。
guest

0

マニュアルを読んで、何をやっているか理解する必要があります。
POST メソッドによるアップロード
move_uploaded_file

ただ、ファイルアップロードは、セキュリティ的な観点での注意点が多数出てくるため、超初心者がコピペで動かすには不安すぎます。

少なくとも、下記のリンク先ぐらいは理解できるようになってから実装しなければ、利用者に迷惑をかけます。
ファイルアップロードの例外処理はこれぐらいしないと気が済まない

あわせてこちらも確認しておくと良いです。
$_GET, $_POSTなどを受け取る際の処理

投稿2017/09/10 02:58

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

WEB_SECTION

2017/09/10 05:19

早々のアドバイスありがとうございます。 詳しく説明すると長くなるのですが、あくまでも自分専用の物なので、今回はTomak様のコードで事足りました。 もし今後、公開する機会があればセキュリティ関連も色々と勉強してみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問