【问题标题】:Codeigniter file names and loading helpers under LinuxLinux下的Codeigniter文件名和加载助手
【发布时间】:2015-08-21 19:19:48
【问题描述】:

你们中的一些人可能认为这个问题已经被问了数百次,但我仍然没有找到具体问题的答案。

我已阅读这些主题,但没有一个能回答我的问题:

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

codeigniter upload not working on linux

Codeigniter web app is not working with the linux but here on windows is fine

Naming convention issues when using codeigniter in windows and linux

我正在开发一个 PHP 应用程序。我家的测试服务器运行 Windows,stage 服务器运行 Ubuntu (Amazon AWS)。

  1. 在我需要创建帮助程序之前,我的应用程序运行良好:

    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 是区分大小写的,所以我已将所有大写文件名更改为小写文件名。之后,我被空白页打招呼。

旁注:我的库名称中的第一个字母大写(例如,我使用 flexi_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。

  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 服务器时,我已将两个大写字母都更改为小写。

现在让我大吃一惊的是,我创建了 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,但我没有学到很多东西,也没有太多经验,所以我非常感谢任何人能给我的所有帮助。

我希望我清楚我需要回答什么。感谢愿意与我分享知识的人!

【问题讨论】:

  • 嗨。我认为您可以将函数包装到类中
  • 嗨 volkinc - 如class MY_form_helper extends ... 中是否有 CI_helper 类?

标签: php linux windows codeigniter amazon-web-services


【解决方案1】:

我认为你可以将函数包装到类中

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);

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

【讨论】:

  • 好的,谢谢 - 我现在就试试并报告!
  • 根据您给出的错误,这只是php无法重新声明的全局函数。快速方法将您的函数作为静态方法包装到类中。
  • @PawelKosi 您现在有足够的代表来投票支持您认为“有用”的答案和问题,方法是单击投票计数的向上箭头/三角形。这让其他人知道该帖子很有用。此外(没有啤酒,但是)海报获得了一些代表和有时标记徽章的信用。
猜你喜欢
  • 2012-12-30
  • 1970-01-01
  • 1970-01-01
  • 2015-05-20
  • 2011-01-12
  • 1970-01-01
  • 1970-01-01
  • 2013-09-19
  • 2011-05-25
相关资源
最近更新 更多