Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么heder(';Location:index';)不工作,但window.Location.href=';php';他在工作吗?_Php_Javascript - Fatal编程技术网

为什么heder(';Location:index';)不工作,但window.Location.href=';php';他在工作吗?

为什么heder(';Location:index';)不工作,但window.Location.href=';php';他在工作吗?,php,javascript,Php,Javascript,我有这样的索引文件 <?php include('file1.php'); include('file2.php'); ?> 在file1.php中,我的代码如下所示 <?php echo "hai"; ?> 我试图使用标题('Location:index.php')重定向页面。它会抛出一个错误,就像输出已经启动一样。我知道如果我们给出echo语句,它会抛出一个错误。在这种情况下,我尝试使用Javascriptwindow.location.href='ind

我有这样的索引文件

<?php
include('file1.php');
include('file2.php');
?>

在file1.php中,我的代码如下所示

<?php
echo "hai";
?>


我试图使用
标题('Location:index.php')重定向页面
。它会抛出一个错误,就像输出已经启动一样。我知道如果我们给出echo语句,它会抛出一个错误。在这种情况下,我尝试使用Javascript
window.location.href='index.php'
重定向。它会给出预期的输出,并且没有错误。为什么?

php header命令正在发送一个错误浏览器将解释为重定向到新位置的响应流指令。但是,从本质上讲,在开始发送内容之前,您只能发送任何类型的标题。在您的示例中,您发送内容“hai”,然后尝试发送标题


现在javascript引擎在broswer中执行javascript。因此,window.location告诉javascript引擎让浏览器请求一个新页面。这与http流中包含的任何信息无关(理论上,位置可能不是http,例如ftp或mailto)

PHP header命令正在向响应流发送指令,浏览器将其解释为重定向到新位置。但是,从本质上讲,在开始发送内容之前,您只能发送任何类型的标题。在您的示例中,您发送内容“hai”,然后尝试发送标题

现在javascript引擎在broswer中执行javascript。因此,window.location告诉javascript引擎让浏览器请求一个新页面。这与http流中包含的任何信息无关(理论上,位置可能不是http,例如ftp或mailto)

尝试添加
ob_start()在PHP文件的开头。这将打开输出缓冲,收集脚本生成的所有输出,直到执行结束,然后将输出“刷新”到浏览器。您可以使用
ob_end_flush()

更多信息:

尝试添加
ob_start()在PHP文件的开头。这将打开输出缓冲,收集脚本生成的所有输出,直到执行结束,然后将输出“刷新”到浏览器。您可以使用
ob_end_flush()


更多信息:

您在哪里使用
标题('Location:index.php')?在哪里使用
标题('Location:index.php')?作为旁注,不在php文件中写入尾随?>是一种很好的做法,这样就不会有不合适的空格或换行符阻止发送标头。作为旁注,不在php文件中写入尾随?>是一种很好的做法,这样就不会有不合适的空格或换行符阻止发送标头。如果选择此选项,要非常小心。网站默认情况下通常不缓冲是有原因的。缓冲和刷新会增加网站的内存需求,以容纳所有临时存储的额外数据,而不是直接写入输出流。根据流量级别和输出的复杂性,这可能会对服务器造成不必要的损失。如果选择此选项,请非常小心。网站默认情况下通常不缓冲是有原因的。缓冲和刷新会增加网站的内存需求,以容纳所有临时存储的额外数据,而不是直接写入输出流。根据流量级别和输出的复杂性,这可能会对服务器造成不必要的损失。