2016-08-03 5 views
0

私は好奇心を持っています。 PHPスクリプトにそれ自身が含まれているとどうなりますか?PHP自己ループ(コンセプト)

私が尋ねる理由は、自分のサイトの<head>タグすべての内容を生成するPHPファイルがあるからです。サイトの404 error pageheadタグが含まれています。

headタグを生成するphpファイルに直接アクセスする場合は、404 error pageを含めて存在しないと「偽り」し、404 statusをクライアントに返します。

これはファイルシステムは次のようになります。

/ 
    .htaccess <- (apache 404 handling) 
    404.php <- 404 error page 
    head.php <- '<head>' generator 
    ... 

404.phpは含まれています

<?php 
    header("HTTP/1.0 404 Not Found"); 
?> 
<html> 
    <head> 
<?php 
    $key = true; 
    include dirname(__FILE__) . "/head.php"; 
?> 
    </head> 
    <body> 
     lul. dead. 
    </body> 
</html> 

head.phpは含まれています

<?php 
    if(isset($key) && $key===true){ 
     //code to generate <head> content 
    }else{ 
     include dirname(__FILE__) . "/404.php"; 
    } 
?> 

$keyは、それが別のphpファイルで含まれていたことをhead.phpを伝えます要求していないURL上で評価されます。

だから、

、私は直接それが必要(ちょうどhttpリクエストを経て、php includes経由でアクセスしていない)私のWebブラウザからhead.phpを要求すると、総括する:

(a)の要求がなかったことを実現別のPHPファイルからinclude、次いで
(B)
(C)は、(D)は0を含む
、次いで、404.phpline 2404 statusを送信し404.phpを含みます。

したがって、最終的にhead.phpにはhead.phpが含まれます。

これが起こりますか?

+0

私はこれがうまくいくとは思っていませんでしたので、ここに自分の結果をスタックに掲示しています。誰もが見ることができます。 –

答えて

1

はい、あります。

注:ただし、内部サーバーエラーが発生することがあります。

include.php:たとえば

<?php 
    if(!isset($s)){ 
     $s = 0; 
    } 
    if($s<10){ 
     include "include.php"; 
     $s++; 
    } 
?> 
test 

このスクリプトは、内部サーバーエラーが発生します。エラーが発生する前にファイルが何回自己完結しているのかを確認することはしませんでしたが、明らかにエラーが発生するのに十分な時間は10回(またはそれ以上)です。

いずれか、またはPHPスクリプト自体を直接含めることはできません。

+0

私はこれがうまくいくとは思っていませんでしたので、自分の結果をスタックに投稿しています。 –