(1)自分のWebサイトをリモートWebサーバーにアップロードしているところです。
(2)サイトのテンプレートシステムは、URLエンコードされたgetリクエストを_index.php
_に送信することによってすべてのページが形成されるように設定されています
(3)初期ページの読み込みは動作します。このページは、フォームの値を評価することにより、次のページの場所を決定します。
(4)次のページへのリダイレクトは、次のように実行されます:header('location: next_page')
(5)何らかの理由で、リダイレクトが実行されない。コードは次のようになります。
_$error = "";
if(isset($_POST['index_choice'])){
$path_choice = isset($_POST['path']) ? $_POST['path'] : NULL;
//echo $path_choice;
//echo $page_inc;
//nothing after this
if($path_choice != null){
if($form->is_connected()){
//if($path_choice != "" || $path_choice != NULL){
if($path_choice == "new"){
//header('location: /login.php');
//header('location: page/login');
header('location: /index.php?page=login');
exit();
}
else{
//header('location: /amend.php');
//header('location: page/amend');
header('location: /index.php?page=amend');
exit();
}
//}
/**
else{
//destroy_session();
$error = "You haven't selected a path. Please choose a path";
}
*
*/
}
else{
//destroy_session();
$error = "Problems with connecting to the database";
}
}else{
//destroy_session();
$error = "You have not indicated your choice";
}
}
_
[〜#〜]解決済み[〜#〜]
これは、コードのどこかで_?>
_の後に空白を入れるという問題でした。これは、次のコマンドをコードの先頭に配置した後で明らかになりました。
_ error_reporting(E_ALL); ini_set('display_errors', 'On');
_
手伝ってくれたすべての人々に感謝したいと思います。
Header( 'location')を送信する前に、ブラウザにテキストをエコーしているようです。エコーによってヘッダーが強制的に送信されるため、header()を実行する前にブラウザーにコンテンツを送信することはできません。これらの行をコメントアウトして、機能するかどうかを確認します。
// echo $path_choice;
// echo $page_inc;
これでヘッダーが送信され、リダイレクトされます。
add to this code to first of code:
<?php
ob_start();
?>
あなたはページをリダイレクトするJavaScriptの方法を試すことができます:
echo '<script>window.location = "'.$url.'";</script>';
単純なPHPスクリプトは次のように動作しますか?
_<?php header('Location: /index.php?page=login'); ?>
_
エラー状態でHTTPヘッダーがまったく設定されていないため、_$path_choice != null
_および$form->is_connected() === true
を含むコードパスが実際に使用されることも確認する必要があります。
「destroy_session()」が表示されますが、どこかでsession_start()を使用していますか?コンテンツ((セッション)Cookieを含む)が送信されていないことを確認してください。
デバッグのヒント:error_reporting(E_ALL)を設定します(E_NOTICEを含む)。ヘッダーが送信される行が表示されます。
その他のトラブルの原因:- [〜#〜] bom [〜#〜] -インクルードファイルの前の余分な行
これを試してみてください。それが動作します
_echo "<script type='text/javascript'> window.location='index.php'; </script>";
_
代わりにheader("location: index.php");
私はあなたがあなたのif-stackをチェックし、あなたがあなたのループのそれぞれに入っていることを確認する必要があると信じています。各ifステートメントの後にエコーを配置して、header()が評価されていることを確認します。ループが予想よりも早くカットされます。
私の容疑者はnullと$ path_choice!= nullの使用に関係しています。 is_null()またはisset()は、変数がnullかどうかを確認するように特別に設計されているため、試してみましたか?また、この場合も!==オペランドが機能する可能性がありますが、PHPにそれがあるかどうかはわかりません。
Phpファイルの_<?php
_の前にスペースがないことを確認してください。 _<?php
_の直前にBOMとバックスペースなしでファイルエンコードタイプをUTS_8に変更し、ファイル内にsession start()
がないことを確認すると役立つ場合があります。それは直後でなければなりません
これは重要なので、phpコードの前にスペースがないことを確認してください。
例えば
<?php
some code this is the correct way
?>
--------------
<?php
some code this is the incorrect way the space above matters
?>
さて、すべてを試した場合、この例は役立ちます(HTML/PHP):
<?php
header("HTTP/1.0 404 Not Found");
echo '<html>
<head>
<meta http-equiv="Refresh" content="0;url=http://www.url.com/index.php?code=404" />
</head><body></body>
</html>';
?>
コードの先頭に空白がないことを確認してください
例えば:
------whitespace----
<?php
.
.
.
. ?>
最初の行からスペースを削除して、<?php
は最初の行になければなりません。