Codeigniter文件名和Linux下的加载助手

你们中的一些人可能会认为这个问题已经被问了上百次了,但是我还没有find答案。

我已经阅读了这些主题,但是他们都没有回答我所拥有的问题:

https://github.com/bcit-ci/CodeIgniter/issues/1805

codeigniter上传不能在Linux上工作

Codeigniter的Web应用程序不与Linux工作,但在这里在Windows上是好的

在windows和linux中使用codeigniter时命名约定的问题

我正在开发一个PHP应用程序。 我家的testing服务器运行Windows,台服务器运行Ubuntu(亚马逊AWS)。

  1. 我的应用程序工作完美,直到我需要创build一个帮手:

    MY_form_helper.php 

    在那个帮手中我需要覆盖这个:

     function set_value($field = '', $default = '') { if (FALSE === ($OBJ =& _get_validation_object())) { if ( ! isset($_POST[$field])) { return $default; } return form_prep($_POST[$field], $field); } return form_prep($OBJ->set_value($field, $default), $field); } 

    有了这个:

      function set_value($field = '', $default = '') { if (FALSE === ($OBJ =& _get_validation_object())) { if (isset($_POST[$field])) { return form_prep($_POST[$field], $field); } if (isset($_GET[$field])) { return form_prep($_GET[$field], $field); } return $default; } return form_prep($OBJ->set_value($field, $default), $field); } 

所以我保存了更改

  MY_form_helper.php 

testing了所有的窗口和伟大的一切工作。 你所有的PHP大师可能知道现在发生了什么,我上传到Linux服务器和错误:)

第一个错误我得到这个:

  An Error Was Encountered Unable to load the requested file: helpers/my_form_helper.php 

那么好吧,Linux是区分大小写的,所以我已经把所有的大写文件名更改为小写字母。 这样做后,我被空白页面迎接。

附注:我有名字的首字母大写的库(例如我使用flexi_auth库),它始终在服务器上工作。 我不知道为什么现在,因为文件名中的大写字母肯定会在Linux上失败 – 如果有人能解释的话,那将是非常好的。

我已经改变了我的index.phpconfiguration显示所有的错误添加

  ini_set('display_errors', 1); 

这里:

  if (defined('ENVIRONMENT')) { switch (ENVIRONMENT) { case 'development': error_reporting(E_ALL); ini_set('display_errors', 1); break; case 'testing': case 'production': error_reporting(0); break; default: exit('The application environment is not set correctly.'); } } 

我重新加载页面,现在我可以看到有致命的错误:

  Fatal error: Cannot redeclare set_value() (previously declared in /var/www/html/stage/bik/system/helpers/form_helper.php:675) in /var/www/html/stage/bik/application/helpers/my_form_helper.php on line 5 

这里是我卡住的地方。 我做了一个很大的禁忌,并用我的代码在CI的核心系统文件中编辑了form_helper。 我需要这一切工作,因为我有人testing整个事情,我不能让他们等待。

那么有人可以向我解释发生了什么? 我对Linux比较陌生,一直使用Windows机器和服务器。 但是我想要像stream水一样使用Linux,就像很酷的孩子一样。

  1. 这里有几点可能会有所帮助

MY_form_helper文件:

 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); function set_value($field = '', $default = '') { if (FALSE === ($OBJ =& _get_validation_object())) { if (isset($_POST[$field])) { return form_prep($_POST[$field], $field); } if (isset($_GET[$field])) { return form_prep($_GET[$field], $field); } return $default; } return form_prep($OBJ->set_value($field, $default), $field); } 

这是我如何加载它在控制器中:

 $this->load->helper('MY_form_helper'); 

把它移到linux服务器上时,我都把大写字母改成了小写。

而现在令我难以置信的是,我创build了MY_Input库,并从CI Appliaction文件夹中的核心文件夹加载它。 这个东西有名字的大写字母,它在Linux服务器上工作。

 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class MY_Input extends CI_Input { function save_query($query_array){ $CI =& get_instance(); $CI->db->insert('ci_query', array('query_string' => http_build_query($query_array))); return $CI->db->insert_id(); } function load_query($query_id){ $CI =& get_instance(); $rows = $CI->db->get_where('ci_query', array('queryid' => $query_id))->result(); if (isset($rows[0])) { parse_str($rows[0]->query_string, $_GET); } } } 

我仍然在学习PHP,而且我没有很多东西,所以我没有太多的经验,所以我非常感谢任何人都可以给我的帮助。

我希望我明确了我需要回答的问题。 感谢谁愿意和我分享知识的人!

我想你可以将这个函数包装到类中

 class MY_form_helper{ static function set_value($field = '', $default = '') { if (FALSE === ($OBJ =& _get_validation_object())) { if (isset($_POST[$field])) { return form_prep($_POST[$field], $field); } if (isset($_GET[$field])) { return form_prep($_GET[$field], $field); } return $default; } return form_prep($OBJ->set_value($field, $default), $field); } } 

你可以这样称呼它:

 MY_form_helper::set_value($field, $default); 

或者你需要使用命名空间,但是这个更长