teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記2

2019/08/08 07:55

投稿

mokemokechicken
mokemokechicken

スコア948

answer CHANGED
@@ -37,4 +37,18 @@
37
37
 
38
38
  という感じです。
39
39
  CGIなので何か出力していると思いますが、
40
- そのエラーメッセージをみるにHeaderをBodyより前に出力しているかをまず確認したほうが良さそうです。
40
+ そのエラーメッセージをみるにHeaderをBodyより前に出力しているかをまず確認したほうが良さそうです。
41
+
42
+ ------------
43
+
44
+ ■ 追記2
45
+
46
+ 更にコメントなんですが、
47
+
48
+ > ・init_dbの定義段階ではエラーせず、呼び出したときにエラーになります。
49
+
50
+ これは、そのCGIを呼び出した時に、 `init_db()` とその後の一連の処理がなければ正常に応答するってことですかね。
51
+ であれば、 Headerはちゃんと出力されているんだと思いますが、
52
+ init_db() を実行したときに、その中の何かが標準出力に文字列を吐き出してしまっていないでしょうか。
53
+
54
+ init_db() を呼ぶ前に 必要な Header をとりあえず出力してみたら、何か変わらないでしょうか?

1

追記1

2019/08/08 07:55

投稿

mokemokechicken
mokemokechicken

スコア948

answer CHANGED
@@ -14,4 +14,27 @@
14
14
  - WebサーバとMySQLは同一ホスト上で実行されているのか、否か。そのとき `host = ホスト名` は実際になんて書いたのか? MySQLはその接続を許可しているのか。
15
15
 
16
16
 
17
- という感じです。
17
+ という感じです。
18
+
19
+ ---------------
20
+
21
+ ■ 追記1(コメント受けて)
22
+
23
+ そのエラーは有名な?やつですね。
24
+
25
+ `End of script output before headers` などでぐぐると結構出てくると思います。
26
+ ※ エラーログのコアっぽい文字列でググるのはとても大事なことです。
27
+
28
+ 例えば以下のような話です。
29
+ https://qiita.com/taro373/items/1a94c6cd8960f6d02509
30
+
31
+ 蛇足感がありますが、少し説明しますと、
32
+
33
+ - 「CGI」というのは、「Header」というのを「Body」の前に出力しないとダメなInterfaceである
34
+ - 特に `Content-Type` Headerは省略できない
35
+ - HeaderとBody は 1つの空行で区切る。だから `print "Content-type:text/html\n\n"` みたいなのを最初に書けって話になったりする。
36
+ - Headerを出力しているが、それより前にBodyが出力されるとエラーになる(これはPHPでよく見かけるミス)
37
+
38
+ という感じです。
39
+ CGIなので何か出力していると思いますが、
40
+ そのエラーメッセージをみるにHeaderをBodyより前に出力しているかをまず確認したほうが良さそうです。