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

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

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

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

Q&A

解決済

3回答

6163閲覧

PHP5.5から5.6への変更したらsessionやheaderでエラーが出る

IWGP

総合スコア13

PHP

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

0グッド

3クリップ

投稿2017/02/22 04:48

###前提・実現したいこと
PHP5.5(CGI)からPHP5.6(モジュール及びCGI)に変更後sessionやheaderでエラーが出るようになり機能しなくなった問題を解決したいのでよろしくお願いします。

###発生している問題・エラーメッセージ
PHP5.5(CGI)では動作していましたが、PHP5.6(モジュール及びCGI)やPHP7.1(CGI)に変更したらwarningが出て機能しなくなった。

エラーメッセージ 1つ目:37行目 Warning: session_regenerate_id(): Cannot regenerate session id - headers already sent 2つ目:41行目 Warning: Cannot modify header information - headers already sent

###該当のソースコード

PHP

1<?php 2session_start(); 3//error_reporting(E_ALL); 4//ini_set('display_errors', 1); 5 6require_once('../models/DBlogin.php'); 7$dblogin = new DBlogin(); 8 9 10 11 12 $errorMessage = ""; 13//ログインボタンが押されたら 14if(isset($_POST["login"])) { 15 // 1.ユーザIDの入力チェック 16 if (empty($_POST["email"])) { 17 $errorMessage = "E-mailが未入力です。"; 18 } else if (empty($_POST["password"])) { 19 $errorMessage = "パスワードが未入力です。"; 20 } 21 22 if (!empty($_POST["email"]) && !empty($_POST["password"])) { 23 //エンティティ 24 $email = $dblogin->h($_POST["email"]); 25 $password = $dblogin->h($_POST["password"]); 26 //ハッシュ 27 $password = $dblogin->hashPassword($password); 28 //loginチェック 29 $result = $dblogin->isUserCheck($email, $password); 30 if ($result === true) { 31 //user_name categoryの取得 32 $user_name = $dblogin->getUserName($email); 33 $category = $dblogin->getCategory($email); 34 $user_id = $dblogin->getUserId($email); 35 //sessionの設定 36 **session_regenerate_id(true);** 37 $_SESSION["NAME"] = $user_name; 38 $_SESSION["CATEGORY"] = $category; 39 $_SESSION['USER_ID'] = $user_id; 40 **header("Location: main.php");** 41 } else { 42 $errorMessage = "E-mailまたはパスワードが違います"; 43 } 44 } 45} 46 47?> 48<!DOCTYPE html> 49<html lang="ja"> 50続く~

###試したこと
・session及びheaderより上でのhtml、print、echoが有るか確認
・requireしているファイルはPHPの記述のみで1行目の<?phpより前には何も記述は無しで最後の?>は記述していません。

###補足情報(言語/FW/ツール等のバージョンなど)
レンタルサーバー:lolipop
PHP バージョン5.6(モジュール)

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

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

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

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

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

guest

回答3

0

ベストアンサー

意外と見落としがちなものとして、「<?phpの前にBOMが混入している」ということがあります。ファイルをWindowsで編集していると、たまに紛れ込むことがあります(バイナリエディタで確認するのが確実です)。

投稿2017/02/22 04:51

maisumakun

総合スコア145121

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

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

IWGP

2017/02/22 05:11

maisumakun様 ご指摘のとおりBOMが原因でした。 エディターの設定で新規保存にUTF-8 BOM無しで設定するようにしていたのでBOMは無い物と思っていましたが、念のため再度BOM無しを確認しファイルを保存しなおししたら機能しました。 皆様、迅速は回答をしていただきありがとうございました。 なぜ5.5まではBOM有りで機能していたのかこれから調べてみたいと思います。
guest

0

既に回答が出ていますがBOMではないかと。

【HTML、PHPファイルで文字コードUTF-8使用時の注意点(BOM有り、無し)|PHP工房】
http://www.php-factory.net/trivia/03.php

【PHPの文字コードUTF-8 BOM付ではまった話 | 日々成長】
https://everyday-growth.com/?p=1706

投稿2017/02/22 04:54

kei344

総合スコア69364

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

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

IWGP

2017/02/22 05:11

kei344様 迅速な回答をしていただきありがとうございました。 ご指摘のとおりBOMが入っておりました。
guest

0

BOMがはいっていませんか?

投稿2017/02/22 04:51

yambejp

総合スコア114583

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

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

IWGP

2017/02/22 05:11

yambejp様 迅速な回答をしていただきありがとうございました。 ご指摘のとおりBOMが入っておりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問