PHP:header()和include/include\u once/require/require\u once

PHP:header()和include/include\u once/require/require\u once,php,redirect,include,require,Php,Redirect,Include,Require,我正在呼叫标头('位置:');在调用包含函数调用(无输出)的文件后的文件中。每当我调用include()时,PHP header()重定向都不起作用。这只发生在服务器上。无论我包含哪个PHP文件,都会发生这种情况。(本地文件在开发期间上载到服务器。) 实际上我在DOCTYPE声明之前得到了一个空白字符, 这太糟糕了!无论包含一个或两个文件,我都只得到一个空白字符 Neil@NEILCOMPUTER /c/wamp/www/workspace/worknet $ curl --v

我正在呼叫标头('位置:');在调用包含函数调用(无输出)的文件后的文件中。每当我调用include()时,PHP header()重定向都不起作用。这只发生在服务器上。无论我包含哪个PHP文件,都会发生这种情况。(本地文件在开发期间上载到服务器。)


实际上我在DOCTYPE声明之前得到了一个空白字符, 这太糟糕了!无论包含一个或两个文件,我都只得到一个空白字符

    Neil@NEILCOMPUTER /c/wamp/www/workspace/worknet
    $ curl --verbose http://timescapezonecom.ipage.com/worknet/foo.php
    * About to connect() to timescapezonecom.ipage.com port 80 (#0)
    *   Trying 66.96.147.110... connected
    * Connected to timescapezonecom.ipage.com (66.96.147.110) port 80 (#0)
    > GET /worknet/foo.php HTTP/1.1
    > User-Agent: curl/7.21.1 (i686-pc-mingw32) libcurl/7.21.1 OpenSSL/0.9.8k zlib/1.2.3
    > Host: timescapezonecom.ipage.com
    > Accept: */*
    >
    < HTTP/1.1 302 Found
    < Date: Sun, 08 Jul 2012 23:19:12 GMT
    < Content-Type: text/html; charset=iso-8859-1
    < Content-Length: 206
    < Connection: close
    < Server: Nginx / Varnish
    < X-Powered-By: PHP/5.2.17
    < Set-Cookie: PHPSESSID=0310603f03176770c3feb46ea93d9fd3; path=/
    < Expires: Thu, 19 Nov 1981 08:52:00 GMT
    < Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    < Pragma: no-cache
    < Location: http://www.google.com
    <
     <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    <html><head>
    <title>302 Found</title>
    </head><body>
    <h1>Found</h1>
    <p>The document has moved <a href="http://www.google.com">here</a>.</p>
    </body></html>
    * Closing connection #0
Neil@NEILCOMPUTER/c/wamp/www/workspace/worknet
$curl—冗长http://timescapezonecom.ipage.com/worknet/foo.php
*即将连接()到timescapezonecom.ipage.com端口80(#0)
*正在尝试66.96.147.110。。。有联系的
*已连接到timescapezonecom.ipage.com(66.96.147.110)端口80(#0)
>GET/worknet/foo.php HTTP/1.1
>用户代理:curl/7.21.1(i686-pc-mingw32)libcurl/7.21.1 OpenSSL/0.9.8k zlib/1.2.3
>主持人:timescapezonecom.ipage.com
>接受:*/*
>
找到
*正在关闭连接#0
另一方面,当我在foo.php中不包含任何文件时,我会在之前得到一个零 doctype,我也觉得很奇怪:

    Neil@NEILCOMPUTER /c/wamp/www/workspace/worknet 
    $ curl --verbose http://timescapezonecom.ipage.com/worknet/foo.php
    * About to connect() to timescapezonecom.ipage.com port 80 (#0)
    *   Trying 66.96.147.110... connected
    * Connected to timescapezonecom.ipage.com (66.96.147.110) port 80 (#0)
    > GET /worknet/foo.php HTTP/1.1
    > User-Agent: curl/7.21.1 (i686-pc-mingw32) libcurl/7.21.1 OpenSSL/0.9.8k zlib/1.2.3
    > Host: timescapezonecom.ipage.com
    > Accept: */*
    >
    < HTTP/1.1 302 Found
    < Date: Sun, 08 Jul 2012 23:25:28 GMT
    < Content-Type: text/html; charset=iso-8859-1
    < Content-Length: 206
    < Connection: close
    < Server: Nginx / Varnish
    < X-Powered-By: PHP/5.2.17
    < Set-Cookie: PHPSESSID=98c60264dbcdd024d91bae25db848186; path=/
    < Expires: Thu, 19 Nov 1981 08:52:00 GMT
    < Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    < Pragma: no-cache
    < Location: http://www.google.com
    <
    0<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    <html><head>
    <title>302 Found</title>
    </head><body>
    <h1>Found</h1>
    <p>The document has moved <a href="http://www.google.com">here</a>.</p>
    </body></html>
    * Closing connection #0
Neil@NEILCOMPUTER/c/wamp/www/workspace/worknet
$curl—冗长http://timescapezonecom.ipage.com/worknet/foo.php
*即将连接()到timescapezonecom.ipage.com端口80(#0)
*正在尝试66.96.147.110。。。有联系的
*已连接到timescapezonecom.ipage.com(66.96.147.110)端口80(#0)
>GET/worknet/foo.php HTTP/1.1
>用户代理:curl/7.21.1(i686-pc-mingw32)libcurl/7.21.1 OpenSSL/0.9.8k zlib/1.2.3
>主持人:timescapezonecom.ipage.com
>接受:*/*
>
找到
*正在关闭连接#0
以下是foo.php文件:

    <?php
        session_start();

        // I added the require just to make sure nothing is being printed there
        // (an error for example)
    //    require_once('include/connect.php');
    //   require_once('include/util.php');

        header("Location: " . "http://www.google.com");
        exit;
    ?>


我很想知道文件开头的0来自哪里。

强烈建议不要对非模板文件使用php的结束标记

<?php //VERY first line, no whit space
  // code
  // NO ?> *anywhere*
*任何地方*

通常是?>后面的换行符导致错误

强烈建议不要对非模板文件使用php的结束标记

<?php //VERY first line, no whit space
  // code
  // NO ?> *anywhere*
*任何地方*

通常是?>后面的换行符导致错误

您是在头后直接调用
exit()
/
die()
?可能正在生成某些输出并阻止它。是的,在标头之后,我正在调用exit,这样就不会将任何输出发送到浏览器。这就是PHP站点上示例的编写方式。这种方法有什么问题?没什么,你应该这样做。我只是想确定:)试着使用
curl
命令检查您的网页返回的内容。我会使用
curl--verbosehttp://url
。然后在这里发布你的结果。仅供参考,PHP手册说“空行”可以阻止此重定向工作。
curl
输出应准确显示网页正在生成的内容。请确保php结束标记
?>
后没有任何空格(如果使用),在包含的文件中。是否在标题后直接调用
exit()
/
die()
?可能正在生成某些输出并阻止它。是的,在标头之后,我正在调用exit,这样就不会将任何输出发送到浏览器。这就是PHP站点上示例的编写方式。这种方法有什么问题?没什么,你应该这样做。我只是想确定:)试着使用
curl
命令检查您的网页返回的内容。我会使用
curl--verbosehttp://url
。然后在这里发布你的结果。仅供参考,PHP手册说“空行”可以阻止此重定向工作。
curl
输出应准确显示网页生成的内容。请确保php结束标记
?>
后没有任何空格,如果您使用任何空格,则在包含的文件中。好的,这很有趣。你在哪里找到这些信息的?我认为有一个开放标记,但没有结束标记在语法上是不正确的。我糊涂了。它在PHP手册中,“如果文件是纯PHP代码,最好省略文件末尾的PHP结束标记。这可以防止在PHP结束标记后意外添加空格或新行,这可能会造成不必要的影响,因为当程序员无意在脚本中的该点发送任何输出时,PHP将开始输出缓冲“命令而不是需要“关闭你打开的”。好吧,我仍然对这种情况不满意。因为我已经注释了我所包含的PHP文件中的所有结束标记,但是现在,而不是得到空白。