1

作成中の PHP スクリプトにキャッシュを実装しようとしていますが、次の問題が発生し続けます。スクリプトを他の PHP ページに含めたいのですが、キャッシュされたファイルを渡して埋め込みスクリプトを終了しようとすると、スクリプトと親ページの両方が終了しますが、親ページの残りのコードは解析されません。 . 例については、以下のコードを参照してください。


index.php

<?php
  echo "Hello World!<br />";

  include("file2.php");

  echo "This line will not be printed";
?>


file2.php

<?php
  $whatever = true;

  if ($whatever == true) {
    echo "file2.php has been included<br />";
    exit; // This stops both scripts from further execution
  }

  // Additional code here
?>


上記の index.php を実行すると、次の出力が得られます。

Hello World! 
file2.php has been included

ただし、次のように表示しようとしています。

Hello World! 
file2.php has been included
This line will not be printed
4

4 に答える 4

3

インクルードされたファイルのreturn;代わりに使用- これはそのスクリプトの実行を停止するだけです。exit;

これを使用して、親スクリプトに値を返すこともできることに注意してください。

file1.php

<?php
echo 'parent script';
$val = include('file2.php'); //$val will equal 'value'
echo 'This will be printed';

file2.php

<?php
echo 'child script';
return 'value';
于 2009-02-11T09:49:08.683 に答える
2

「ここに追加のコード」をelseステートメントでラップするだけですか?

<?php
  $whatever = true;

  if ($whatever == true) {
    echo "file2.php has been included<br />";
  } else {
    // Additional code here
  }
?>

そうでなければ、私はあなたが何をしているのかわかりません。exitコマンドは、現在のファイルの実行だけでなく、常に現在の実行全体を終了します(コマンドはありません)。

編集

PHLAK、 tomhaigh、MichaelM、およびMarioによるコメントと投稿のおかげで、私自身、今日、 returnコマンドを使用して1つのインクルードファイルの実行を実際に終了できることを学びました。みんなありがとう!

于 2009-02-11T06:31:24.710 に答える
1

file2.phpの内容を関数にカプセル化してみませんか。そうすれば、必要なときに関数から戻ることができ、残りの実行は停止しません。例えば:

file2.php

<?php
    // this function contains the same code that was originally in file2.php
    function exe() 
    {
        $whatever = true;
        if ($whatever)
        {
            echo "file2.php has been included <br />";
            // instead of exit, we just return from the function
            return;
        }
     }

     // we call the function automatically when the file is included
     exe();
?>

index.phpをそのままにしておくと、達成しようとしている出力が表示されます。

于 2009-02-11T06:34:49.960 に答える
1

私は個人的に、可能であれば if-else 条件を回避し、早期終了インターセプト条件を使用するようにしています (造語があるかどうかはわかりませんが)。

index.php

<?php
echo 'header';
include 'content.php';
echo 'footer';
?>

content.php

<?php
if ($cached)
{
    echo cached_version();
    return; // return is not just for functions, in php...
}

//proceed with echoing whatever you want to echo if there's no cached version.
...
...
?>
于 2009-02-11T09:56:35.763 に答える