- - PR -
PHPでのエラー画面のリダイレクト
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-12-16 09:02
いつもおせわになっております。
tuchidaです。 ここにスレッドをたてていいかどうかわかりませんが まちがっていたら御指摘ください。 今、PHPでエラー処理の所でなやんんでいるのですが、 フォームで指定したPHPのプログラムでエラーチェックを行い、 エラーが発生したときに、元の画面にリダイレクトしたいのですが、 1.header()関数でリダイレクトしたいと考えているのですが すでにチェック用のモジュールでヘッダ出力されていると出て 実行してくれません。 エラーは以下の通りです。 Warning: Cannot modify header information - headers already sent by (output started at /home/xxxxx.jp/public_html/trialkit/TrialkitChk.php:1) in /home/XXXXX.jp/public_html/trialkit/TrialkitGet.php on line 132 実際のコーディングは以下の通りです。 header("Location: http://XXXXX.jp/trialkit" . $wURL ); 2.このエラーのときにGETで取得するデータを引数として渡したいのですが Heder()関数では引数も渡せるのでしょうか? どなたかご存知の方がいらっしゃればご教授お願いします。 [ メッセージ編集済み 編集者: tuchida 編集日時 2008-12-16 10:28 ] | ||||||||
|
投稿日時: 2008-12-16 16:13
TrialkitChk.phpの1行目を処理している時点でhttpヘッダを返している・・ということですかねぇ。とりあえずはTrialkitChk.phpの先頭行がどうなっているかを見ないとわかりません。「改行のみ」でもhttpヘッダは送られてしまいますから。 そのあたりの修正が面倒なら、出力をバッファリングしてhttpヘッダの送出を待たせるという手もあります。 http://www.php.net/manual/ja/book.outcontrol.php
header()で指定するURL(第一引数)にquery_stringを自前で付加すればいいのでは? | ||||||||
|
投稿日時: 2008-12-16 19:57
ちなみにheder()関数を呼んでいる所は以下のとおりで、 a = TrialkitChk(); <--TrialkitChk.php内のfunction if (a == ""){ 正常処理 }else{ header("Location: http://v55.jp/trialkit" . $wURL ); } チェックした結果にエラーがあった場合、即、header()関数を呼んでいます。 また、Trialkit.phpの1行目は <?php であり、何もありませんし、このファイル(プログラム)内ではprint()関数は1行もありません。 この部分の処理は前段の画面で<FORM>タグのアクションで呼ばれており TrialkitChk.php内でも1行print()関数Echoともに記載されていません。
header()で指定するURL(第一引数)にquery_stringを自前で付加すればいいのでは? [/quote] 了解しました。やってみます。 phpではリダイレクト方法としてこれしかないのでしょうか? わからないところで出力されているとすると私には難しく 最悪javascriptで書くのが正解かもしれないとも考えています。 | ||||||||
|
投稿日時: 2008-12-16 23:07
チェック用のモジュールのコードが、
という感じで?>で終わるときに、 その後に空白や改行が含まれてたりしていませんか? PHPで表示を伴わない(クラス定義だけなども)、 インクルードされるのが前提のファイルは、 <?phpで始まっていても、?>を最後に付けてはいけません。 別に付けなくても動きますし、むしろインクルードによって、 最後の空白や改行も出力されますので注意が必要です。 今回のケースに当てはまっていなかったらごめんなさい。 | ||||||||
|
投稿日時: 2008-12-17 18:18
最初の投稿ではTrialKitGet.phpとTrialKitChk.phpしか読み取れませんでしたが「TrialKit.php」というファイルもあるのですか。「output started at /home/xxxxx.jp/public_html/trialkit/TrialkitChk.php:1」ということなので、TrialKitChk.phpの1行目が知りたかったのですが・・ 当然ですが「<?php」の前に空白でも改行でも存在していれば「printやecho」はなくてもhttpレスポンスとして出力されhttpヘッダが送信済みの状態になります。headerを使わなければそういうミスには気付きにくいです。TrialKitChk.phpをBOM付きのutf-8で保存していると確実にハマります(いわゆるutf-8nでないとマズイです)。 #もちろんかつのりさんが書かれたように「?>」で閉じた後ろも同様です。 | ||||||||
|
投稿日時: 2008-12-17 19:29
みなさんありがとうございました。
私の場合、御指摘の通り最後に?>がついており、これをとることによって 解決しました。 色々わからないこと勉強になりありがとうございました。 |
1