0

我有两个文件 - test.php 和 demo.php。

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 会产生 THIS FAR 正在输出,但不是 ALL DONE。关于为什么的任何想法?

至于我想要做什么......虽然我认为这并不相关,但这是一个测试脚本,用于测试使用命名空间但在 PHP4 上没有它们也可以工作的代码的可行性。但是,我们不要让这分散我们对这个问题的注意力。我要问的问题不是关于命名空间或 PHP4 或类似的东西——而是关于为什么 ALL DONE 没有被显示。

谢谢..

4

2 回答 2

1

实际上,代码有效。我是一个彻头彻尾的白痴并调用 test.php 而不是 demo.php 大声笑: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 回答