• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:phpで困ってます)

phpで写真をサーバーにアップロードし、リサイズして保存する方法

このQ&Aのポイント
  • phpで写真をサーバーにアップロードし、リサイズして保存する方法を紹介します。
  • 名前保存のテキストファイルへの保存がエラーとなる原因を特定できません。
  • 写真はリサイズされて保存されますが、ファイル名をテキストで保存する部分でエラーが発生しています。

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

  • ベストアンサー
  • agunuz
  • ベストアンサー率65% (288/438)
回答No.6

>172にシンタックスエラーがあると表示されます。 >172行目がfile_put_contents($name_file,$name_log); 1行前の     //ファイルへ保存 // の左側にマルチバイト文字(いわゆる全角)の空白が入っています。 // も左側はコメントでも文字列リテラルでもないのでマルチバイト文字は厳禁です。 そもそもasciiの空白とマルチバイト文字の空白が見分けられるエディタを使うべき。

dkong
質問者

お礼

ありがとうございました。うまくいきました。

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

その他の回答 (5)

noname#244856
noname#244856
回答No.5

すいません画像貼り忘れました。 連投失礼します

dkong
質問者

お礼

画像までありがとうございます。参考にさせていただきます。

すると、全ての回答が全文表示されます。
noname#244856
noname#244856
回答No.4

MIMEタイプの判定だけではダメな例

すると、全ての回答が全文表示されます。
noname#244856
noname#244856
回答No.3

file_put_contentsのエラーに関してはそちらからの更なる情報の提示が無い限り回答のしようがないので、セキュリティホールについて回答します。以下の質問と回答をご覧ください。To_aru_Userは私です。 PHPPro - 画像アップロード時の脆弱性について http://www.phppro.jp/qa/4347 ご提示のコードだと「任意のPHPスクリプトを設置・実行される脆弱性」が発生してしまいます。サーバーの重要なファイルを盗んだり第三者を攻撃するための踏み台にしたりやりたい放題できます。絶対にこのまま本番用のサーバーで公開しないでください。 それぞれのチェックの意味を述べると… 【MIMEタイプの判定】 ユーザーが誤って画像ファイル以外をアップロードしてしまうことを防ぐ。但しコードインジェクションを防ぎきれるわけではないのでこれだけの対策は危険。そもそも $_FILES 変数に格納されるものは自由に偽装が可能。使うにしても自前で専用のクラスや関数を使ってチェックする必要がある。 【拡張子の判定】 「*.php」「*.phps」など、Apacheで設定している拡張子を除外すれば、外部からアクセスがあったときにPHPとして実行されるのを防ぐことが出来る。大文字と小文字の区別は…されない(と思う) 【アップロードファイルを移動するディレクトリをpublic_htmlより上階層にする】 全てのHTTPアクセスを遮断する。但し、Webページの中にその画像へのパスも記述出来なくなってしまう難点はある。 *おすすめの方法* 1. MIMEタイプを判定し、それから適切な拡張子を取得する。画像ファイル以外をこの段階で弾いておく。 2. 衝突しないランダムなファイル名を生成し、「1.」と併せてファイルを保存する。

dkong
質問者

お礼

セキュリティホールについてご指摘ありがとうございます。phpの初級者レベルの本を読んだだけなので、よくわかってなかったです。勉強になりました。

dkong
質問者

補足

Parse error: syntax error, unexpected T_STRING in /................../upload_image.php on line 172 というエラーメッセージがでます。Dreamweaverで編集しているのですが、172にシンタックスエラーがあると表示されます。 172行目がfile_put_contents($name_file,$name_log); です。どこが間違っているのか分かりません。よろしくお願いします。

すると、全ての回答が全文表示されます。
  • agunuz
  • ベストアンサー率65% (288/438)
回答No.2

>エラーがでます。 エラーメッセージを転記すること。回答者はエスパーではありません。 >ファイル名をテキストで保存する部分file_put_contents($name_file,$name_log); file_put_contentsの第二引数に配列を渡した場合には implode('', $array) として扱われますが、それは大丈夫なんですか(改行コードが付加されません)。 http://www.php.net/manual/ja/function.file-put-contents.php また、 >// ファイル名の取り出し >$file_name = $_FILES['filename']['name'][$i]; >// ファイル(MIME)タイプの取り出し >$file_type = $_FILES['filename']['type'][$i]; クライアントから送られるファイル名をそのまま(日付を付加してはいるようですが)使ってはいけませんし、MIMEタイプもアテにしてはいけません。保存するファイル名は自前で組み立てるべきだし、MIMEタイプもバイナリデータから判断すべきです。getimagesizeしているんですから、その情報を使うべきです。 http://www.php.net/manual/ja/function.getimagesize.php

dkong
質問者

お礼

ありがとうございます。エラーメッセージを転記するのを忘れてました。他のご指摘も勉強になりました。

dkong
質問者

補足

Parse error: syntax error, unexpected T_STRING in /................../upload_image.php on line 172 というエラーメッセージがでます。Dreamweaverで編集しているのですが、172にシンタックスエラーがあると表示されます。 172行目がfile_put_contents($name_file,$name_log); です。どこが間違っているのか分かりません。よろしくお願いします。

すると、全ての回答が全文表示されます。
  • t_ohta
  • ベストアンサー率38% (5320/13881)
回答No.1

エラーメッセージには何て書いてありましたか? ファイル書き出し先のパーミッションは間違っていませんか。

dkong
質問者

補足

Parse error: syntax error, unexpected T_STRING in /................../upload_image.php on line 172 というエラーメッセージがでます。Dreamweaverで編集しているのですが、172にシンタックスエラーがあると表示されます。 172行目がfile_put_contents($name_file,$name_log); です。どこが間違っているのか分かりません。よろしくお願いします。

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

関連するQ&A