0

test.phpとdemo.phpの2つのファイルがあります。

test.phpの内容:

<?php
// fails if allow_url_include = 0 (which it generally is by default)
if (!defined('INIT_NAMESPACES')) {
    define('INIT_NAMESPACES', true);
    $str = substr_replace(file_get_contents(__FILE__), ' namespace phpseclib;', 5, 0);
    include('data://text/plain;base64,' . base64_encode($str));
    return;
}

class test {
    function zz() { echo 'aaa'; }
}

echo "THIS FAR";
?>

demo.phpの内容:

<?php
ini_set('display_errors', 'on');
error_reporting(E_ALL);
include('test.php');

echo "ALL DONE";
?>

demo.phpを実行すると、このFARが出力されますが、すべて完了したわけではありません。理由について何かアイデアはありますか?

私がやろうとしていることに関しては...関連性はないと思いますが、これは名前空間を使用するコードの実現可能性をテストするためのテストスクリプトですが、PHP4では名前空間がなくても機能します。しかし、それが私たちを質問からそらさせないようにしましょう。私が尋ねている質問は、名前空間やPHP4などではなく、ALLDONEが表示されない理由です。

ありがとう..

4

2 に答える 2

1

実際、コードは機能しました。私は完全なモロンであり、demo.phpではなくtest.phpを呼び出していましたlol:O

于 2012-12-31T19:53:28.307 に答える
0

行を次のようにtest.php置き換え$str = ...ます:

$handle = fopen(__FILE__, 'r');
$str = fread($handle, filesize(__FILE__));
fclose($handle);
$str = substr_replace($str, ' namespace phpseclib;', 5, 0);
于 2012-12-31T19:11:33.000 に答える