【PHP】Header Location できない

php にて、header(‘location: xxx’);
を行い、他のページへ遷移しようとした所、以下のようなメッセージが表示されて
遷移ができないということがあった。

Warning: Cannot modify header information – headers already sent by (output started at C:\xxxxxxx.php:1)
in yyyyyyyy.php on line 28

yyyyyyyy.php の 28 行目で header() をしようとしているのに、
xxxxxxxx.php の 1 行目で既に何かが出力されているので
header() できませんよ、というワーニング。

原因はxxxxxxxx.php の 1 行目にあるはずなので、見てみた所、
<?php とあるだけ。 スペースなども特にない。 思いがけずはまってしまったのだが、本当の原因はxxxxxxxx.php のファイルの文字コードが utf-8 の BOM あり で保存されていること。 なのでサクラなどのテキストエディタで開いて、 utf-8 の BOM なしで保存し直せば解決。 BOM というのは Byte Order Mark の略で、 そのファイルが Unicode であることが識別できるように 先頭につけられるデータのことだそうだ。

カテゴリー: php

ログでデバッグ

php で、簡単にログを出力する関数があったのでメモ。

error_log()

という関数です。

第1引数はmessageで、ログに出力する内容。
自動で改行はされませんので、必要に応じてここに含めます。

第2引数はmessage_typeで、0~4の整数。

この内、よく使うと思われるのは1と3でしょう。

第3引数はdestinationで、第2引数に関連します。

第2引数で1を指定した場合、destinationにはメールアドレスを指定します。

ここで指定したアドレスにメールを送信してくれるわけですが、
phpが動いているサーバーにsmtpなどのメールに必要な設定がされている必要があります。

第2引数で3を指定した場合、destinationにはファイル名を指定します。

ここで指定したファイルにログを出力してくれます。

ログファイルでデバッグ、これは今後使うかもしれないです。

カテゴリー: php

js エラー 「識別子、文字列または数がありません」

ボタンをクリックされたら ajax を使用してデータを取得し、

php 側でテーブル等のタグを全部生成して返し

javascript では返ってきたデータを jquery の html メソッドで

表示する、というプログラムを作っていた。

 

掲題のエラーは jquery.js 内の

elem.innerHTML = value;

の箇所で発生していた。

 

調べた所、掲題のエラーは IE6 や IE7 で

var hoge = { arg1, arg2, };

のようにarg2 の後ろに余分なカンマが

ある場合に起きるエラー、とのことだった。

 

今回のエラーとの関連は余りなさそうだ。

 

PG を調べた所、php でテーブルタグを生成するのに

ヒアドキュメントを使用していた。

$data = <<<DATA

<table>

<tr><td></td></tr>

</table>

DATA;

のような感じ。

ループの中でタグにid を振るときに

ヒアドキュメントの中で

for($i = 0; $i < count($data); $i++){

$ret_data = <<<DATA

~~ 中略 ~~

<input type=”text” id=”hoge_{($i + 1)}”>

のように括弧を駆使していたが、

どうやらこれがエラーの素だったようだ。

ここの所を

<input type=”text” id=”hoge_%u”>

として

$data = sprintf($data, ($i + 1));

のようにsprintf() で置換するように修正することでエラーが発生しなくなった。

へぇ~。

 

Apacheが起動しなくなった

久々に投稿します。

 

開発用のPCにはXAMPP が入っていて、

いつも快適に動いてくれていました。

 

このPCにSkype をインストールした所、

Apacheが起動しなくなりました。

MySQL はいつものように起動します。

 

色々調べてみると、どうやら Apache と Skype とで

使用するポートが競合してしまっているために起こる現象とのこと。

 

下図のように Skype の詳細設定でポート 80 を使用しない設定にしたら

これまで通り Apache が起動するようになりました。

 

では、ごきげんよう。

IE7 でテーブルのレイアウトが崩れる件

お疲れ様です。

初めて書き込みします。

縦スクロールするテーブルを作っていた所、
IE7 だけ、どうにもレイアウトが崩れてしまう現象が起こった。

属性を調べてみると、table タグと tbody タグの間に
隙間が空いていた。
イメージとしては、table タグに padding が設定してあるか、
tbody タグに margin が設定してあるような感じ。

もちろん、どちらの設定もしていない。

更に調べてみたところ、table タグの cellpadding 属性が
悪さをしていることが分かった。
なのでこの子を 0 に設定してあげることでこの隙間は
解消された。

IE7 といえば、現在のように css だけでどうにかしようという
風潮がまだまだ浸透していない時代の遺物。
こういうこともあるのですね。