2012-01-11 9 views
1

自分のコンピュータで開発したCMSを最初のドメインサーバーにデプロイしています。関数:PHPリダイレクトで空白のページが表示される(サーバーにデプロイされている場合のみ)

header("Location: {$location}"); 

すべてが私の家のマシンでWAMPを通して正しく動作します。しかし、私はそれを空のページにリダイレクトしているサーバーに展開した後。私は別のファイルに問題をテストし、それが限りだけ含まれているredirect_to機能を含むファイルをWORKSことがわかったので、それはこのようになりますしている:

<?php //require_once("includes/session.php");?> 
    <?php require_once("includes/functions.php");?> 
    <?php //require_once("includes/constants.php"); ?> 
    <?php //require_once("includes/connection.php"); ?> 
    <?php 
     define("DB_SERVER", "mysite.ipagemysql.com"); 
     define("DB_USER", "root"); 
     define("DB_PASS", "notreal"); 
     define("DB_NAME", "myCMS"); 

     redirect_to("login.php"); 
     phpinfo(); 
    ?> 

これは私がで定義されているリダイレクト機能でありますfunctions.php:

私はリダイレクトはもはや機能し、他が含まれている場合、単に空白のページに行き、のfunctions.phpファイルを含めることができるだけで
 // redirects the user to the page/path specified by $location 
    function redirect_to($location){ 
     if($location != NULL){ 
      header("Location: {$location}"); 
      exit(); 
      } 
    } 

お知らせが...私がいたコードをコピーすることができます上記のようなインクルードファイルの中のconstants.phpファイルは、

 <?php 

      // Database constants 
     define("DB_SERVER", "mysite.ipagemysql.com"); 
     define("DB_USER", "root"); 
     define("DB_PASS", "notreal"); 
     define("DB_NAME", "myCMS"); 
    ?> 

ドメインサーバーからすべてのCMSページを定期的に読み込み、DBにアクセスして保存することができます。 DBに保存することができるので、DBにアクセスするために必要なファイルが含まれているため、テストするファイルを含めても問題はないと仮定しています。問題は純粋にリダイレクトです。すべてがうまく動作し、ローカルホストとしてcompで実行されるように設定されています。

私はこの問題を探していて、終日ソリューションを試しています。私はそれを他のファイルを含めることができないという問題に絞り込んだのですが、私はなぜそれがドメインサーバで起こっているのか分かりません...

ご協力いただきありがとうございますこれを読む時間を割いて。

+0

空白のページがある場合は、 'error_reporting'(php.iniまたはindexスクリプト)をオンにし、そして/またはウェブサーバー' error.log'を調べます。そして、本当に失敗したリダイレクトの場合は、[ヘッダがすでに送信されている]を参照してください(http://stackoverflow.com/questions/8028957/headers-already-sent-by-php) – mario

答えて

1

当面はエラー報告をE_ALLにすると役立つかもしれません。別のインクルードファイルからブラウザに送信される出力があるようです。終了後に出力が余分なキャリッジリターンのように見逃しやすいのはなぜですか? >タグ。インクルードされたファイルの終了タグは不要なので省略することをお勧めします。偶発的な出力を防止します。

出力が見えない場合は、Locationヘッダーが送信されるまでにヘッダーが送信されているため、動作しません。

+0

あなたはエラーの報告について正しいです私はちょうどphp.iniファイルがこのホストにどこにあるか把握する必要があります。私は昨日、サードパーティのサーバーでホスティングするのは初めてです。私は学校のサーバーから離れています。インクルードファイルの中括弧の後ろに改行があるかどうか確認します。閉じるタグを省略すると、すべてのインクルードを個別のブロックではなく1つのブロックに入れるだけですか?私はちょうどそれが私のローカルホスト上で完璧に動作するか分かりませんが、この1つのことは、サーバにアップロードされたときには動作しません... –

+0

インクルードコマンドはそのままでも構いませんが、インクルードファイル自体は出力。したがって、インクルードされたファイルがすべてのphoコードであると仮定すると、ファイルの終わりで終了タグを削除するだけです。 – davidethell

0

あなたはLynda Exercise Filesを使用していますか?ヘッダーは、空白を含むPHPの他のものよりも前に記述する必要があります。ヘッダーのPHPルールに違反している他のインクルードファイルのいずれかに何かがあります。あなたのデータベース定数はconstants.phpに記述する必要があります。

Lynda ex。ファイル、私は次のレベルに移動することをお勧めします(私はそれがPHP/MySQLは基本を超えていると思う)、そこに便利なコードスニペットがたくさんあります。

この問題を解決するには、ユーザーがすぐにログインページにリダイレクトされるようにするには、機能ファイルとredirect_toだけを含めます。他のインクルードを "initialize.php"というファイルに移動し、そのファイルをログインページにロードします。

+0

私はLyndaチュートリアルを行っていましたが、エクササイズファイルはありませんでした。それから、自分のAJAXサイトをよりダイナミックにするためのCMSバックエンドとして統合するための手段を変更しました。訪問者がフォームを通じて自分の経験をカスタマイズできるようにする。 htmlがレンダリングされる前にヘッダーが発生しなければならないことが何度か読まれましたが、ヘッダ呼び出しがスペースの前でもPHPの最初のものでなければならないということはありません。意味が分からないのはなぜそれがローカルホスト上で動作するのですが、サーバではありません... –

+0

私の最高の推測では、あなたのコードをまとめる過程で、あなたの 'require_once'sの順序が変更されました。リモートサーバーとの既存のセッションがないため、出力を生成するコードが実行されています。ローカルサーバーで作業している間、セッションが確立されている可能性があるため、問題のコードは出力を生成しません。これは私の最高の推測ですが、私は間違いなくあなたの他の初期化ファイルを1つの "initialize.php"に移動し、すべてのヘッダを処理した後にのみ呼び出すことをお勧めします。 – dyelawn

0

require_oncesのいずれかのコメントを外すと、ページが空白になり、必要なファイルに致命的なエラーが発生するか、必要なファイルが見つからないという致命的なエラーが発生します。あなたがredirect_to関数に到達することさえないように思えます。

error_reporting(E_ALL); 
ini_set('display_errors', 1); 

は、だからあなたのコードは次のようになります:あなたのファイルの先頭にエラーの詳細情報を提供するこれらの行を追加します

また
<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

require_once("includes/session.php"); 
require_once("includes/functions.php"); 
require_once("includes/constants.php"); 
require_once("includes/connection.php"); 

define("DB_SERVER", "mysite.ipagemysql.com"); 
define("DB_USER", "root"); 
define("DB_PASS", "notreal"); 
define("DB_NAME", "myCMS"); 

redirect_to("login.php"); 

あなたがDB_SERVER、DB_USERを定義していないことを確認し、 DB_PASS、DB_NAMEは定義しているファイル(constants.phpなど)には一度だけ定義し、ヘッダーを送信する前に何も出力されていないことを確認する必要があります。

これがライブサイトの場合は、問題を修正した後でdisplay_errorsを0に設定してください。

ini_set('display_errors', 0); 
+0

Paulを無視してください。大括弧はphp変数の周りで許可されています。実際には、変数に{$ ADDRESS-STATE}のような不正な文字が含まれている場合、 –

0

があるため、あなたの入力で、私は問題を把握することができた、助けと洞察力のためにありがとうございました。

:愚かなミスdavidethellは、PHPのどれもがファイルにスペースを持っているか、

before the <?php or after the closing ?> 

を返しそれから私は私がすべてのページにこのエラーに遭遇した問題に遭遇した含まれていないことを確認することが指摘されているようにまずそれがでした

Warning: Cannot modify header information - headers already sent by... 

しかし、実際のファイルの最後の行の3行後のインクルードファイルの行番号について不平を言っていました。私は入れて非常に終わり、その後

<? ob_start(); ?> 

ファイル(前含みます)の非常に開始時:

<? ob_flush(); ?> 

がかかったことを私の周りを検索し、すべての表示されたページに、私は置けばことがわかりましたエラーメッセージが表示され、すべてが正常に実行されます。私はその機能が何をするかを調べる時間をとらなかった、今私はそれを見上げるつもりだ。私はそれがバッファリングと何か関係があると確信しています。これは、ページの相互作用を遅くするように見える理由を説明します。主にページリダイレクトです。しかし、それはちょうどサーバーからの遅れかもしれません。

私は慣れ親しんでいないサーバー上でphpとデプロイするのが初めてです。うまくいけば、同様の問題があった場合、これが役立つことがわかりました。

関連する問題