header('location: ..') not working
(1)我正在将我的网站上传到远程Web服务器。
(2)以通过将url编码的get请求发送到
(3)加载初始页面工程。 此页面通过评估其表单的值来确定下一页的位置。
(4)通过执行以下操作来重定向到下一页:
(5)由于某种原因,未执行重定向。 代码如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | $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"; } } |
解决了
这是在代码中其他位置
1 |
我要感谢所有尝试提供帮助的人。
似乎您是在发送标头("位置")之前将文本回显到浏览器。
您不能在执行header()之前将内容发送到浏览器,因为您的回显将强制发送标题。注释掉这些行,看看是否有效:
1 2 | // echo $path_choice; // echo $page_inc; |
现在您的标题将被发送,您将被重定向。
将此代码添加到代码的第一个:
1 2 3 |
您可以尝试使用JavaScript方式重定向页面:
1 | echo 'window.location ="'.$url.'";'; |
我看到一个" destroy_session()",您在某处使用session_start()吗?
确保没有内容(包括(会话)cookie)已发送。
调试提示:设置error_reporting(E_ALL)(包括E_NOTICE)。
这将为您提供发送标头的行。
其他麻烦源:
-BOM
-包含文件中的多余行
像下面这样的简单PHP脚本能工作吗?
1 |
您还必须确保实际使用
尝试一下。它会工作
1 | echo"<script type='text/javascript'> window.location='index.php';"; |
代替
确保在
我相信您需要检查if-stack并确保您进入每个循环。在每个if语句之后放置一个回声,以确保甚至对header()进行求值,从而可以比预期的更早地剪切循环。
我的怀疑者与null和$ path_choice!= null的用法有关。您是否尝试过is_null()或isset(),因为它们专门用于检查变量是否为null。同样,!==操作数也可以在这种情况下工作,但是我不确定PHP是否有辅助功能。
只要确保在您的PHP代码之前没有空格,因为这很重要。
例如
1 2 3 4 5 6 7 8 9 | <?php some code this is the correct way ?> -------------- <?php some code this is the incorrect way the space above matters ?> |
确保代码开头没有空格
例如:
1 2 3 4 5 6 | ------whitespace---- <?php . . . . ?> |
删除第一行中的空间,以使
好吧,如果您尝试了所有步骤,则此示例可以提供帮助(HTML / PHP):
1 2 3 4 5 6 7 8 | <?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>'; ?> |