2016-08-20 1 views
0

認証処理を行うメインページと、ヘッダーリダイレクトを使用してリダイレクトを完了しました。私は最近、変数のいずれかを含むようにインクルードの1つを更新するまで、すべてうまくいっていました。下記参照。リダイレクトを防止するファイル送信ヘッダーが含まれています

 <?php 
     session_start(); 
     include "globalvariables.php"; 
include "../../includes/databaseconnections/$schoolName/database_connection.php"; 

文字列に$ schoolNameを追加するまで問題はありませんでした。私は私たちの自動化された複製システムのためにこれを必要としました。(異なる顧客のために別の学校名のページとデータベースをコピーできます)

ここには付属のファイルがあります。ものすごく単純。

<?php 
$schoolName = "fakeschoolname"; 
?> 

$ schoolNameが実際に見えない非サーバー側のデータを出力していない限り、ヘッダーがどのように送信されているかは分かりません。誰にどのようにこれを改善するための提案やアイデアがありますか?または、ページを動的にコピーして編集するより良い方法がありますか?

+1

あなたは本当に最初にこれをしたくありません。あなたがファイルをインクルードする前に '$ schoolName'変数を注意深くチェックしない限り、そうではありません。このようにすると、* File inclusion attacks *として知られる何かに脆弱になります。ユーザーが変数を変更した場合、基本的にサーバーには想定されていないファイルを含めることができます。おそらくあなたのサーバーにアップロードされたphpファイルのように。 – icecub

+0

さて、サイトをオンザフライで複製できるようにするにはどうすればよいでしょうか?それは単に手作業であるべきか? –

+2

コードブロックのインデントを修正するために質問を編集しようとしていましたが、それが実際のコードにどのようにあるのかが問題になる可能性があります。 '<?php'の前に実際にスペースがありますか? –

答えて

1

"../../includes/databaseconnections/fakeschoolname/database_connection.php"という名前のファイルがあるかどうかを確認してください。ファイルが存在しない場合、PHPの警告が原因で問題が発生する可能性があります。

+0

私は - ファイルにアクセスし、リダイレクトしない他のページでインクルードが動作します。これは、インクルードされたファイル、または変数が存在するという事実によると思われます。私は変数をハードコードし、インクルードされたファイルglobalvariablesファイルを削除して動作させることができます。 –

+0

実行しているシステムはわかりませんが、$ {schoolName}を試して、 "./" – peter

0

私は問題を見つけ出し、それは私を狂ってしまいました。この問題は、globalVariable.phpファイル内のPHPタグを閉じた後に2つの空白行があるために発生していました。

私の質問に示されているはずだったはずですが、私のIDEには2つ余分な空白がありました。

<?php 
$schoolName = "fakeschoolname"; 
?> 
BLANKLINE 
BLANKLINE 

私はPHPが唯一の空白の1行をクリアすることを説明した別のポストHow to fix "Headers already sent" error in PHPを見つけました。私はファイルをインクルードしていたので、ヘッダーのリダイレクトの前に2つの空白がありました。それが失敗を引き起こしていたのです。

関連する問題