gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:50:22 24 4
gpt4 key购买 nike

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

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

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,阶段服务器运行 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 :

    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 机器和服务器。但我想顺其自然,像酷 child 一样使用 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);
}

这是我在 Controller 中加载它的方式:

$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,我没有学到很多东西,也没有太多经验,所以我非常感谢任何人能给我的所有帮助。

我希望我说清楚了我需要回答的问题。感谢任何愿意与我分享知识的人!

最佳答案

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

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 - Linux 下的 Codeigniter 文件名和加载助手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32147873/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com