
PHP スクリプトを修正していて、コメント行を1行入れただけで、
Warning: Cannot modify header information - headers already sent by (output started at mylist.php:96) in mylist.php on line 125
というエラーが出るようになり、困っています。
既出の問題だとは思いますが、ヒントでも頂ければと思い投稿しました。
直接の関係は無いと思いますが、コメント行は、先頭に以下のように入れています。
<!--
##################################################
ID : mylist.php
Update : (中略)
Update : 2016/07/05 ***********
Upda → これ以上の文字を入れると、Warningになる。
##################################################
-->
既出の質問やネット上の記事で調べてみると、HTTP ヘッダーを変更する関数の呼び出しより前に、すでに何かがアウトプットされているために発生するという情報があるのですが、該当する部分がどうしても見当たりません。
ちなみに、
(output started at mylist.php:96) にある96行目には、
94: </head>
95: <body oncontextmenu='return false'>
96: <?php
in mylist.php on line 125 にある125行目には、
124:// 呼び出し元をCookieに保存
125:setcookie('THISFORM',basename(__FILE__),0,'/');
126:(改行)
<body>タグから、125行目までsetcookieまで、printとかechoとかの命令はありません。
余分な空白行を削ってみましたが、結果は同じでした。
php5.4 Windows2008R2上で動作しています。
また、あまりよろしくないと思いつつ、ソースコードはsjisで書いています。
<?php ob_start(); ?> を先頭に入れて、取りあえずは解決したのですが、原因がはっきりしないので気色悪いです。
No.3ベストアンサー
- 回答日時:
HTML のコメント形式なので、コメント部も HTML の一部として出力されるためです。
PHP のコメント形式にしましょう
https://secure.php.net/manual/ja/language.basic- …
コメント有難うございました。
冒頭のコメント部分はhtml部分なので、htmlのコメントの書き方をしているのですが、これも、<?php ..... ?>で括って書くのが正しい書き方なんでしょうか?
ちなみに、phpで括った部分は 全て 1行単位で // を冒頭に書くようにしています。
No.4
- 回答日時:
まぁコメントなんで<html>タグより後に書いたほうが良いですね。
ソースの視認性のために、先頭に近い部分に載せておきたいなら
<?PHP
ob_start();
?>
// コメント文
<?PHP
・・・
途中でhttp header出力OK
・・・
$comment=ob_get_contents();
ob_end_clean();
?>
<html>
<?php
print $comment;
?>
のようなことをしないと、コメントをhtmlに出力することができません。
htmlで出力する必要がなければ(申し伝え文書っぽいのでこちらのケースだと思いますが)
#3さんの言うようにphpのコメントとして書けばいいでしょう
<?PHP
/*
コメント
*/
?>
有難うございました。
コメントが問題になるとは思いませんでした。
全く意識してませんでしたが、今後はこうした書き方に直していこうと思います。
No.2
- 回答日時:
あ、でもバッファリングで回避できているなら違うかもしれない・・・
先頭あたりでob_start()を発行して、エラーのでる行の直前で
$debug=ob_get_contents();
ob_end_clean();
としてその後、var_dump($debug);で内容を確認してみるとよいです。
コメント有難うございます。
ob_start(); だけだとワーニングは出ないのですが、
エラー発生行に
$debug=ob_get_contents();
ob_end_clean();
var_dump($debug);
を追加すると、
string(4111) " "
と出て、その後に同じワーニングが出るようになります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
処理を止める関数
-
GDで生成したはずの画像が文字...
-
セッション管理に関する質問
-
phpのheader("Location:#pos")...
-
*.php、*.php3、*.phtmlの違い
-
phpのextension_dirを複数指定...
-
PHP PDOライブラリが読み込まれ...
-
phpでメール送信できません 原...
-
header(Location:~)で$_SESS...
-
<A href ~ と一緒に値を渡すには
-
さくらインターネットでメール...
-
【PHP】tmp_nameの命名規約につ...
-
php4とphp5での数値の取り扱い...
-
テレメールとは?
-
PHPでメールを受信するには?
-
データ送信をボタンを押さずに...
-
PEAR(Image_QRCode)のエラー
-
Apache 2.4でphp-5.3を使いたい...
-
セッションについての設定なの...
-
require_once()でファイルが読...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ob_end_clean と ob_clean の違...
-
CSV出力にHTMLが入ってしまう
-
GDで生成したはずの画像が文字...
-
Wordpress、カスタム投稿の管理...
-
mPDFでのPDF出力がうまくいかな...
-
phpにcssを適応させたい...
-
PHPで`headers already sent`と...
-
PHP/phpMyAdmin/データベースな...
-
TCPDFについて
-
PHPで取得したHTML内のdiv要素...
-
リダイレクト元のURLの取得方法...
-
ImageStringで日本語表示させたい
-
PHPにおける時間計算、時間足し...
-
PHPで五角形、または多角形のグ...
-
JavaScriptからPHP呼び出しHTML...
-
warningを画面に表示させない設...
-
CGIからPHPへの書き換え
-
FeedPHPでfeedをHTML表示を11個...
-
【smarty】<A href="">内でのみ...
-
PHPをSJISでやるのは不可能
おすすめ情報
コメントを <?php /* */ ?> という書き方にしたら出なくなりました。
いままで間違った書き方をしていたんですね。
どうも有難うございました。