2016-08-20 110 views
0

我有一个主页做了一些验证处理,然后在使用头重定向完成重定向时。所有工作都很好,直到我最近更新了其中一个包含变量的变量。见下文。包括文件发送标头,防止重定向

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

我没有问题,直到我将$ schoolName添加到字符串。我需要这为我们的自动复制系统(允许用户使用不同的schoolName针对不同客户复制的页面和数据库)

这里是所包含的文件。很简单。

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

我不理解标题是如何被发送的,除非$ schoolName实际上是输出不可见的非服务器端数据。有没有人有任何建议或想法如何补救?还是有更好的方法来动态复制和编辑页面?

+1

你真的不想这样做,摆在首位。除非你仔细检查'$ schoolName'变量,然后再使用它来包含一个文件。这样做会让你容易受到*文件包含攻击*的伤害。如果用户修改变量,他们可以基本上强制你的服务器包含它不应该包含的文件。就像也许PHP文件上传到其他地方的服务器。 – icecub

+0

那么,有什么更好的方式让我在飞行中复制网站?它应该只是一个手动过程? –

+2

我正要编辑你的问题来修正代码块中的缩进,但如果这是它在实际代码中的方式,那可能是问题所在。 '<?php'之前是否有空格? –

回答

1

检查,如果你有一个名为“../../includes/databaseconnections/fakeschoolname/database_connection.php”文件。 PHP的警告可能会导致的问题,如果该文件不存在

+0

我这样做 - 包含在其他访问该文件并且不重定向的页面上的作品。它似乎是专门用于包含的文件,或者是存在变量的事实。我可以硬编码变量,并删除包含的文件globalvariables文件,它的工作原理。 –

+0

我不知道你正在运行什么系统,但你可以尝试$ {schoolName}并用“./”开始路径。 – peter

0

我想通了这个问题,它几乎使我疯狂。这个问题是由于在globalVariable.php文件中关闭我的PHP标签后两个空行造成的。

它应该是如在我的问题,但我在IDE我有两个额外的空格后的注意。

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

我发现另一篇文章How to fix "Headers already sent" error in PHP该解释说,PHP将只清除掉的空白一行。因为我包含文件,并且在标题重定向之前有两个空格。那是什么导致它失败。