有些人可能认为这个问题已经被问了几百次了,但我仍然没有找到我所遇到的具体问题的答案。
我读过这些题目,但是没有一个能回答我的问题:
https://github.com/bcit-ci/CodeIgniter/issues/1805codeigniter上传在linux上不工作
Codeigniter web应用程序不能与linux一起工作,但这里在windows上是好的
在windows和linux中使用codeigniter时的命名约定问题
我正在开发一个PHP应用程序。我在家里的测试服务器运行Windows,舞台服务器运行Ubuntu (Amazon AWS)。
我的应用程序工作得很完美,直到我需要创建一个助手:
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
在windows上测试过了,一切都很好。所有PHP大师可能都知道现在发生了什么,我上传到linux服务器和错误:)
第一个错误是:
An Error Was Encountered
Unable to load the requested file: helpers/my_form_helper.php
好吧,linux是区分大小写的,所以我把所有的大写文件名都改成了小写。在那之后,迎接我的是一个空白的页面。
旁注:我有在名称中大写第一个字母的库(例如我使用flex_auth库),它总是在服务器上工作。我现在不知道为什么,因为它应该在Linux上失败,因为文件名中有大写字母——如果有人能解释一下就太好了。
我已经改变了配置在我的index.php显示所有的错误添加
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。我需要它全部工作,因为我让人测试整个东西,我不能让他们等待。
所以有人能给我解释一下发生了什么吗?我对Linux比较陌生,一直使用Windows机器和服务器。但是我想随波逐流,像孩子们那样使用Linux。
- 这里有更多的比特可能会有所帮助
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服务器时,把两个大写字母都改成小写。
现在有些让我难以置信的事情,我已经创建了MY_Input库,我正在从CI应用程序文件夹的核心文件夹加载它。这个东西的名字中有大写字母,它在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);
或者你需要使用名称空间,但是这个更长