- 締切済み
PHPがブラウザで何も表示されない
PHPをブラウザに表示させようとしていたところ、画面に何も表示されなくなりました。 ターミナルでエラーログを確認しても何も記録されていないので、PHPのメモリも増やしてみましたが解決できないため、原因を教えていただきたいです。 コードはgoogle driveにあげたので、確認していただけたら幸いです。 https://drive.google.com/folderview?id=0B6Y58WNgP2V2T2U1OXE4U1JubDA&usp=sharing どうぞよろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
画面に何も表示されない場合、多くのケースではParseErrorが発生しています。これはerror_reporting関数での後付けの設定では表示させることが出来ないため、直接php.iniを編集する必要があります。 全体的にPHPに関する理解が不足しているように思うので、丁寧に学習してください。 【1】 session_start()はセッション開始と同時にクッキーヘッダも送信するので、文字列の出力を開始する前に書かなければコールに失敗します。また、PHPが使える場合はHTMLしか使えない場合向けの手段となるmetaタグでのエンコード指定よりもheader関数を使ってブラウザに直接指示を送る方が望ましいです。よって頭の部分は <?php session_start(); header('Content-Type: text/html; charset=utf-8'); このようになるでしょう。ところでindex.phpって何をしているんでしょうか。テンプレートの読み込みは普通ロジック部分を書いた後に最後に行いますが…しかもindex.phpという名前をテンプレートファイルに用いるべきではないと思います。(直接実行するファイルととても紛らわしい) 【2】 '$user_name' のようにしてしまうと変数が展開されず、その文字を表すようになってしまいます。展開したい場合はダブルクオーテーションを使って "$user_name" のようにします。しかしこれが用いられるのは文字列を結合したい場合などに限り、今回のようなケースでは単に $user_name とするだけで構いません。シングルクオートもダブルクオートも「関数の引数をくくるためのもの」ではありません。役割を勘違いして覚えないようにしてください。 また、ユーザーからPOSTされた情報が格納される変数は $_POST であり、いきなり $user_name が使えるようになる訳ではなく、 $_POST['user_name'] から代入しなおす必要があります。これを使う場合もいきなり値を参照してしまうとフォームが送信されずに直接アクセスされた場合などの未定義のケースで E_NOTICE レベルのエラーを発生してしまうので、isset構文を使って未定義でないか調べる必要があります。それに加え、可能であれば必要に応じて「文字列」であるか「配列」であるかを判別して型のチェックも行っておくべきです。 【3】 画像アップロードの例外処理が甘すぎます。ファイルのMIMEタイプを判定するのに $_FILES['image']['mime'] から得た「偽装可能な」情報を使ってはいけませんし、今回はそれ以下の酷い実装となっていて $ext = substr($uploadfile_name, -3); のようにしてしまうと拡張子が無い場合や「*.JPG」「*.jpeg」などの場合も弾いてしまいます。しかもメジャーなPNGファイルを受け付けない仕様もいかがなものかと思います。一番おすすめの方法は、PHPのGD関数で処理できるあらゆる画像を受け取り、画像劣化を起こさずにある程度ファイルサイズを小さく出来る優れたフォーマットであるPNGファイルとして変換して保存することです。 これらを踏まえたサンプルです。 http://pastebin.com/nWEvnu6P 【参考リンク】 $_GET, $_POSTなどを受け取る際の処理 http://qiita.com/mpyw/items/2f9955db1c02eeef43ea ファイルアップロードの例外処理はこれぐらいしないと気が済まない http://qiita.com/mpyw/items/939964377766a54d4682 画像アップロード処理サンプル集 http://qiita.com/mpyw/items/73ee77a9535cc65eff1e まとめて例外をスローする小技 http://qiita.com/mpyw/items/6bd99ff62571c02feaa1