迷糊 发表于 2012-2-5 15:30:12

CI 放到Linux服务器很头疼,求帮助

我的站点在windows测试正确。放到linux服务器上首先出现相对路径调用错误。我修改index.php下路径常量
define('APPPATH', './'.$application_folder.'/'); 加入“./”路径问题跳过了。但又出现控制器继承自定义类的不能发现问题。不知道什么原因啊,高手请指点


错误如下:Fatal error: Class 'Pic_q_controller' not found in /usr/local/httpd/htdocs/fenhongdou/application/controllers/home.php on line 9


application/controllers/home.php 代码如下
class Home extends Pic_q_controller{
   
    function __construct(){
      parent::__construct();
      
    }
   
        function index(){
                $set_id = $this->uri->segment(3);
      
      $data['title'] = site('home_title');
      //查询留言内容      
      $this->load->view('index', $data);      
    }
................

application/libraries/pic_controller.php 的代码如下
classPic_Controller extends Controller{
    function __construct(){
      parent::__construct();
      }
    }


/**
*
* 前台控制器
*
* 前台的所有控制器都需要继承这个类
*
**/
class Pic_q_controller extends Pic_Controller{
   
    protected function __construct(){
      
      parent::Controller();
      
      //前台主题皮肤获取
      $this->load->switch_theme_on();
      //帮助文档下(helpers/site_helper.php)
      $this->load->helper('site');
      
    }
   
}

Hex 发表于 2012-2-5 16:28:16

首先,CI 是给 Linux 设计的,不存在 Linux 问题。
index.php 里只能修改 $system_path 和 $application_path,把这两个修改正确即可。
你在 Linux 下出错,基本上可以确定是文件名大小写问题,请严格遵守文档规定的大小写。

迷糊 发表于 2012-2-5 17:01:39

Hex 发表于 2012-2-5 16:28 static/image/common/back.gif
首先,CI 是给 Linux 设计的,不存在 Linux 问题。
index.php 里只能修改 $system_path 和 $application_pa ...

感谢回复,Linux一般的问题是文件名的大小写问题或者是文件权限问题。但这次CI不能识别到我的类,我就有些不知如何入手。CI对于类定义中我有三个地方的关系比较模糊。

1)application/config/config.php里
$config['subclass_prefix'] = 'Pic_';
这个定义是否决定类名规则?我初步感觉是的。
2)application/libraries下
类名文件名首字母是否必须大写。如“pic_controller.php”是否正确?
3)application/libraries下
类名是否必须跟文件名必须相同(包括大小写),windows下没有问题

4)如果以上问题都不存在,加载不上类会是路径问题吗?

Hex 发表于 2012-2-5 22:26:12

1. 这个只影响扩展系统原有类库的使用,比如默认的 MY_,这只影响扩展的类库。
2. http://codeigniter.org.cn/user_guide/general/creating_libraries.html 这里说的很清楚
3. 同2
4. 我认为 Windows 下没问题,Linux 说找不到多半是大小写问题,因为 PHP 是跨平台的不存在兼容性问题,这里能出问题的也就是文件名等,因为 CI 是玩的文件名游戏,呵呵

燃雲 发表于 2012-2-6 06:24:13

define('APPPATH', './'.$application_folder.'/');

是不必要的,APPPATH本来定义是"application/",这样改便成了"./application/",在Linux下没分别,在Windows下亦应没分别。


从源码及情况看来,在使用CodeIgniter 1.7.x或以前版本,是有点乱。



$config['subclass_prefix'] = 'Pic_';

文件名必须是Pic_controller.php

迷糊 发表于 2012-2-6 13:04:14

燃雲 发表于 2012-2-6 06:24 static/image/common/back.gif
define('APPPATH', './'.$application_folder.'/');

是不必要的,APPPATH本来定义是"application/",这样改 ...

“./”虽然是表示当前目录,好像有时是没什么太多作用。但当多级调用或指向时它是有作用的。这个似乎跟服务器配置也有相应的关系。具体案例还没摸清透彻,等有了确认再与大家分享。感谢

迷糊 发表于 2012-2-6 13:23:14

这个问题最终找到原因了还要感谢两位的帮助,我把个人尝试后的方案分享出来。

1)application/config/config.php里 $config['subclass_prefix'] = 'Pic_';决定你扩展类库文件得前缀
2)application/libraries下的自定义类文件
文件名和类名相同,首字母大写(手册上是这么提示的,但我尝试后并没有绝对的约束)
3)注意:你在linux下文件名或驼峰标识的文件名必须单词首字母大写:如Pic_Loader.php。(Pic_loader.php是错误的,L必须大写)
至于你的类名是Pic_loader也好Pic_Loader也好不会有问题。


个人尝试后的总结,可能不是很全面,如有不对的请各位补充。

Hex 发表于 2012-2-6 13:27:56

迷糊 发表于 2012-2-6 13:23 static/image/common/back.gif
这个问题最终找到原因了还要感谢两位的帮助,我把个人尝试后的方案分享出来。

1)application/config/conf ...

总结的很好。
对于你说的没有严格约束,那是因为在 Windows 下文件名不区分大小写,放到 Linux 就可能出错。
CI 的命名规定必须严格遵守,制定这个规定就是为了避免跨平台带来的问题。

siliang 发表于 2018-2-27 16:31:51

我也遇到了这个问题

连普科技 发表于 2018-2-27 23:33:29

细心点,小问题
页: [1]
查看完整版本: CI 放到Linux服务器很头疼,求帮助