我正在尝试使用elliothaughins Socialize系统作为代码点火器
然而,我一直得到
消息:include(application/third_party/config/socialitynetworks.php):无法打开流:没有这样的文件或目录
我已追踪到此问题,当我致电
时$this->load->add_package_path(APPPATH.'third_party/socialize/');
在loader类中,如果我执行die($path)
,我只得到application/third_party
。
这似乎很奇怪,因为控制器的代码是
class SocializeController extends CI_Controller {
function __construct(){
parent::__construct();
parse_str($_SERVER['QUERY_STRING'], $_GET);
$this->load->add_package_path(APPPATH.'third_party/socialize/');
$this->_autoload();
}
private function _autoload(){
$this->load->model('socialize_migration_model');
$autoload = array();
include(APPPATH.'third_party/socialize/config/autoload'.EXT);
foreach ( $autoload as $type => $files ) {
$type = ($type == 'libraries') ? 'library' : $type;
foreach ( $files as $file ){
$this->load->$type($file);
}
}
}
public function data($key, $value)
{
$this->load->vars(array($key => $value));
}
}
正如你所看到的,它正在调用一个模型,它成功地加载了这个模型,当它到达自动加载器,在那里它加载它中断的库,
发出问题的特定库开始时类似
class SocializeNetworks {
private $_obj;
private $_networks = array();
function __construct(){
$this->_obj =& get_instance();
$this->_obj->load->config('socializenetworks'); // this is the line we die on :(
所以,
这里发生了什么事,我该怎么办?
我昨天在CI v2.0.2代码库中发现了一个错误。从本质上讲,您正在添加一个额外的路径来检查中的文件(这是正确的),加载方法在每个路径中循环,直到找到您要查找的文件。
如果您输出CI对象,您可能会看到您要查找的内容已经存在,但它仍然失败。
在文件/codeigniter/core/Config.php中,由于某种原因,加载方法为$found=false;在通过路径循环的每次迭代中都没有重置,所以如果在第一次运行中找到了路径(就像我的情况一样),那么$find就会被设置为true,但在随后的运行中,$find仍然为true,所以它会尝试包括一个不存在的文件。
我通过将$find变量的声明移动到第一个foreach循环开始的正下方来解决这个问题。这样,它每次都会重置它。我报告了这个错误,所以希望它能在后续版本中得到解决。