首先我需要用ini_set('allow_url_include', "1");来修改下配置项来使得页面可以允许url包含,但是我这么写了之后还是没起作用,请问这个是为什么?
再就是我开启这个实在是我想不到好的方法了,只能暂时开启下回头然后再考虑好的方法,那我想问下开启这一项会对安全性有造成影响吗?或者这个选项一般是开启好些还是最好不要开启??

解决方案 »

  1.   

    allow_url_include 这个设置要求 allow_url_fopen 也要开启。
      

  2.   

    allow_url_include 不能在代码中设置。只能在 php.ini 中设置
    allow_url_include 的本意是通过统一资源定位来实现代码资源的共享,有如 html 的 src=xxx.js
    但是对方服务器并不知道 http://host/code.php 是源于 include 的,所以美好愿望并不能实现
    这能做到 include 非 php 文件中的 php 代码
    如果只是为了获取对方程序的执行结果,那么 file_get_contents 也就可以了
      

  3.   

    那首先,我要实现一套MVC模式的系统,然后有一个入口文件index.php,一个主类文件Myth.class,一个模板编译类文件,MythTemplate.class,然后我的控制器文件是一个类,拿默认控制器来说是这样的:
    class IndexAction extnnds MythTemplate {
          public function index() {
              $this->assign('var1', 'value1');  
              $_obj = Myth::Action('public/header', $this);
          }
    }
    那个调用是调用模板类的方法想模板中注册变量。。然后模板编译之后生成一个.php文件,那我直接include找个php文件这样的话就可以访问,这样是没问题的。
    那问题是什么呢?就是因为一般网页中头部(header)和底部(footer)是公共的所以需要单独拿出来然后在index.html的模板中引入header.html和footer.html,那我就在模板中子定义一个标签来实现包含这个header.html的文件,那因为我的页面的访问地址形式是这样的:
    www.fantan.com/index/index.html
    这里是访问首页,那在首页中要包含header.html并且通过header.html的控制器:
    class PublicAction extends MythTemplate {
         public function header() {
            $this->assign('var2', 'value2');
         }
    }
    来注册header.html模板中的变量的话就需要包含这个页面,这样的话就出现了我讲的那个问题,因为如果通过改变php.ini文件的那个选项的话就其实就可以实现了,但是我总觉得这种不太好,所以我就没用了后面,那我现在使用的方法是在Myth类中增加一个静态的方法:
    class Myth{
       public static functin Action('public/header', $_that) {
            $_obj = new public();
            $_obj->_data = &$_that;
       }
    }
    这里$_data数组是模板类中保存模板变量的数组,这样把两个不同对象中的$_data数组通过关联达到数据一致的效果,但是这个访问唯一不好的就是这里:
    $_obj = Myth::Action('public/header', $this);
    就是你要调用必须显式的传递$this,我觉得这里可以不用传的,但是我又想不到好点的方法。 不知道说清楚没,但是现在我的问题已经不是开始的那个,变成了刚刚提到的那个就是:不显式的传递$this,但是可以在Action方法中获取调用这个方法的方法所在类的对象怎么获取?