エラーが出るのは分かっているんだけど、別に無視できるエラーだったり。
でも、PHPの仕様で絶対発生するエラー。
こんなときには、「@」を使います。
エラーが出る箇所の先頭に@をつけてあげるだけで、エラーを無視できます。
ちなみにこの「@」はエラー制御演算子と言います。
エラー制御できないのは、関数の定義、クラスの定義、条件構造などです。
エラーが発生しないのが、一番いいですけどね。
書いたスクリプトが@だらけにならないよーに注意しましょう。
PHPで初期のころに悩まされたエラーの話です。
とあるシステムを開発していて「Warning:Cannot modify header information-headers already sent by ・・・・・」エラーが発生しました。
今となってはエラーを見れば原因はすぐに分かるのですが、(今さらエラーを出すスクリプトを書く時点でおかしい話ですが)ググッてみれば結構検索にはひっかります。
みなさん同じような悩みを抱えているようで。
さて、原因はheader()の前に何かしらの文字を出力してるのが原因です。
例えば、デバッグ中のダンプする処理がそのまま残っていたり、全角のスペースが入力されていたり。
このエラー自体を無視する方法は、
php.iniで[output_buffering = ON]とするか、スクリプトの最初にob_start()を呼び出す。
いろいろと悩んで成長していくんですよね。
まさに失敗は成功の母と言ったところでしょうか。
私がPHPを使いはじめて間もないころ、仕事でMySQLを使うことになりました。
そのときはSQL文については知識が多少あったので、順調にシステムを構築していました。
ところがっ!!
あるとき、どーしてもエラーになってしまうSQL文が出てしまい、原因が分からずかなり悩んだ記憶があります。
当時、私はPHPのソースをとりあえずがむしゃらに書くことに専念していて、後で見ることに対してはまったく気にせず、ただ打ち込むことだけをしていました。
そのエラーが発生するSQL文を見ると・・・
$sql = "SELECT ・・・・・・・・・・・・・・・・・・・・・・・・・・・";
改行をいれることなくただ、横に長~く書き込んでいました。
あるとき、何を思ったか改行コード(\n)を入れて見やすくしたころ、エラーもなく問題なくSQL文は実行されました。
私の知る限り、私が見てきた書籍にはSQL文中に改行がなく長いSQL文の場合はエラーとなるなんて書いてなかったです。(←常識なのかもしれません)
こんな、トラブルに見舞われるのは私ぐらいかもしれませんけど、みなさんソースは見やすくかきましょうね。
PHPを使っている人で<?php~?>のタグを短縮型の<?~?>で書く方って結構いませんか?
本来は、<?php~?>の型で書くのが推奨されているみたいですが、HTML文中に変数だけを表示したい場合に<?=$hensuu?>で書くことがたまにあります。
開発用サーバAでは使用できたのですが、運用サーバBでは使用できなかったことがありました。
結構単純な確認ミスではあるのですが、原因はphp.iniの設定です。
php.ini内の[short_open_tag]の設定がOFFになっていると使えません。
ここをONにして、Apacheを再起動することで<?~?>の短縮型タグが使えるようになります。
PHPでメールを送信するときは、mb_send_mail関数を使うことが多いですが、指定できる宛先は1つのみですよね。
CCやBCCで宛先を指定してメールを送信したい場合はどうすればいいのでしょうか?
・・・・・・・・
特に難しくはないんですが、header句を指定するときに、
「
From:送信元\nCc;宛先B,宛先C\nBcc:宛先D,宛先E
」
といった感じでヘッダ部に送信元に続けて登録して送信すると送れます。