使用include_once时可变范围受到影响

时间:2014-01-15 09:58:00

标签: php scope

    spl_autoload_register("auto");
    function auto($class_name){
        include_once($class_name.'.php');
    }

$url=new clean_url($_SERVER["REQUEST_URI"]);
    $c=1;
    //echo $url->segment(2);
    if(!$url->segment($c)){
           //include homepage
    }
    else{
        switch($url->segment($c)){
            case 'events':
            include_once($_SERVER['DOCUMENT_ROOT'].'/events.php');
            break;
            default:
            include_once('404.php');
            break;
        }
    }

?>
在events.php文件中

<?php
if($url->segment($c+1)){
$e=$url->segment($c+1);
switch ($e) {
    case 'ecstasy':
        include_once($_SERVER['DOCUMENT_ROOT'].'temps/ecstasy.php');
        break;

    default:
        # code...
        break;
}
}

在测试localhost(xampp)上的代码时,代码正在运行并且需要。正在包含页面。但是当尝试使用大型岩石服务器时,输出将会显示为

Fatal error: Call to a member function segment() on a non-object in /home/public_html/events.php on line 2

造成这种差异的原因是什么?如何让它在bigrock服务器上运行?

1 个答案:

答案 0 :(得分:1)

我不知道为什么此代码在XAMPP中有效,但Bigrock服务器报告的致命错误是正确的。您的代码中存在错误,因为$url 无法从包含文件访问,因为此变量和包含的文件位于不同的范围内。所有include指令仅限于其本地范围。现在有一些帮助:您可以在包含之前以多种方式手动导入变量 - 例如使用extract函数。

相关问题