1

header('Location: http://foo.com/foo/ ');を呼び出しています。関数呼び出しを含むファイルで include() を呼び出した後のファイル (出力なし)。include() を呼び出すたびに、PHP の header() リダイレクトが機能しません。これはサーバー上でのみ発生します。これは、インクルードする PHP ファイルに関係なく発生します。(ローカルファイルは開発中にサーバーにアップロードされます。)


実際には、DOCTYPE 宣言の直前に空白文字が表示されますが、これは非常に悪いことです! 含めるファイルが 1 つでも 2 つでも、空白文字は 1 つだけです。

    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

一方、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

ファイル 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 がどこから来ているのか知りたいです。

4

1 に答える 1

1

非テンプレート ファイルには、php の終了タグを使用しないことを強くお勧めします。

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

多くの場合、エラーの原因となる ?> の後の改行です。

于 2012-07-08T23:47:36.857 に答える