标签: codeigniter-3

CodeIgniter 3 类文件名首字母大写导致 404

设想

我有一个网站,正在升级到 CodeIgniter 3 的当前开发版本。我已按照升级说明将所有类文件重命名为大写(例如 application/controllers/Home.php)

预期结果

对于正常使用控制器的小写 URL,例如:

http://examplesite.com/home/

使用 Home.php 控制器。

我得到了什么

当 url 首字母小写时,不会自动调用大写文件名。(404 错误)。

我努力了

  • 输入控制器的首字母大写的 URL,即。http://examplesite.com/Home/这将按预期生成控制器。
  • 将routes.php 中的默认控制器大写,这会按预期生成页面。但是,如果这意味着我必须更改所有 URL 以包含首字母大写的控制器,那就不太理想了。

笔记

  • 该网站在 PHP 5.3.17 FastCGI 上运行。
  • index.php 已从 URL 中删除,.htaccess 规则为:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
Run Code Online (Sandbox Code Playgroud)

非常感谢任何帮助。

编辑1

我已将其范围缩小到_validate_request核心路由器中的功能。如果我注释掉对该函数的调用,它就会起作用_set_request

编辑2

如果我将函数的名称更改_validate_request_validate_request2并使用新名称调用它,则它可以正常工作。这个函数名是保留字吗?

codeigniter codeigniter-3

5
推荐指数
1
解决办法
5588
查看次数

fsockopen(): php_network_getaddresses: getaddrinfo 失败: 名称或服务未知

我无法将表单内容发送到电子邮件。我收到以下错误:

: Warning
Message: fsockopen(): php_network_getaddresses: getaddrinfo failed:Name or service not known

Filename: libraries/Email.php

Line Number: 1986

Severity: Warning

Message: fsockopen(): unable to connect to ssl://smtp.123mailsetup.com:25   (php_network_getaddresses: getaddrinfo failed: Name or service not known)

Filename: libraries/Email.php

   Line Number: 1986
Run Code Online (Sandbox Code Playgroud)

我的1986年路线是

$this->smtp_timeout);
Run Code Online (Sandbox Code Playgroud)

我的控制器中的部分代码

$config = Array(
'protocol' => 'smtp',
'smtp_host' => 'smtp.xxxx.com',
'smtp_port' => 465,
'smtp_user' => 'xxxxx@xxx.com',
'smtp_pass' => 'xxxxxxxx',
'mailtype'  => 'html', 
'charset'   => 'iso-8859-1'
);
                $this->load->library('email', $config);
                $this->email->from('xxxxx@xxx.com', 'Mailsetup');
                $this->email->to($email); 

                $this->email->subject('Domain transfer');
                $this->email->message( '<html><body>Domain to be transfered        '.$domain.' …
Run Code Online (Sandbox Code Playgroud)

php codeigniter codeigniter-2 codeigniter-3

5
推荐指数
1
解决办法
3万
查看次数

Codeigniter 随机注销用户?

我正在使用 Codeigniter 3 构建一个应用程序,但用户不断被随机注销。我认为这可能是使用 AJAX 的问题,因为我读过这有点错误,但它只是在浏览等时随机发生,而不是任何特定时间,因为它可能会在几分钟内反复发生或持续一段时间.

我正在使用 ion_auth 插件进行身份验证等。

我的会话存储在数据库中,这是从 CI 导入的配置:

//$config['sess_driver'] = 'files';
$config['sess_driver'] = 'database';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
//$config['sess_save_path'] = '/home/slight/system/cache/';
$config['sess_save_path'] = 'ci_sessions';
$config['sess_match_ip'] = TRUE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;
Run Code Online (Sandbox Code Playgroud)

我怎么能调试呢?是什么原因造成的?我可以检查什么?

php session codeigniter ion-auth codeigniter-3

5
推荐指数
1
解决办法
919
查看次数

将变量值从库传递到控制器,然后在 CI 3.0 中查看

我试图将变量值从库函数传递给控制器​​,然后查看以获取输出。

为此,我的库代码:

<?php                                                                                   

defined('BASEPATH') OR exit('No direct script access allowed');

/**
 * @description : Library to access MyOperator Public API
 */
Class My_Operator extends Admin_controller{

    protected $developers_url = 'https://developers.myoperator.co/';
    protected $token = 'XXXXXXXXX';

    function __construct() {

    }

    public function run() {
        # request for Logs
        $url = $this->developers_url . 'search';
        $fields = array("token" => $this->token);
        $result = $this->_post_api($fields, $url);

        $this->log("result");
        $this->log($result);
    }

    private function _post_api(Array $fields, $url) {
        try {
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_TIMEOUT, 30);
            curl_setopt($ch, …
Run Code Online (Sandbox Code Playgroud)

php api json codeigniter codeigniter-3

5
推荐指数
1
解决办法
1460
查看次数

如何在同一页面中使用2个数据表?

如何在同一页面中使用数据表,我使用模板数据表,但是在创建新的一个数据表时不起作用。

这是我的代码

CSS:

<link href="<?php echo base_url();?>/assets/plugins/datatables/jquery.dataTables.min.css" rel="stylesheet" type="text/css"/>
<link href="<?php echo base_url();?>/assets/plugins/datatables/buttons.bootstrap.min.css" rel="stylesheet" type="text/css"/>
<link href="<?php echo base_url();?>/assets/plugins/datatables/responsive.bootstrap.min.css" rel="stylesheet" type="text/css"/>
<link href="<?php echo base_url();?>/assets/plugins/datatables/scroller.bootstrap.min.css" rel="stylesheet" type="text/css"/>
Run Code Online (Sandbox Code Playgroud)

JavaScript:

 <!-- Datatable js -->
    <script src="<?php echo base_url();?>/assets/plugins/datatables/jquery.dataTables.min.js"></script>
    <script src="<?php echo base_url();?>/assets/plugins/datatables/dataTables.bootstrap.js"></script>
    <script src="<?php echo base_url();?>/assets/plugins/datatables/dataTables.buttons.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

代码:不,当我用此数据表创建一个新功能时,所有功能均不起作用。

echo "<table id='datatable-buttons' class='table display2 table-striped table-bordered'>";
    echo "<thead>";
    echo "<tr>";
    echo "<th>No.</th>";
    echo "<th>Itemset</th>";
    echo "<th>Jumlah</th>";
    echo"</tr>";
    echo "</thead>";
    echo "<tbody>";
    foreach ($item_array as $ia_key => $ia_value) 
    {
        //$theitems = explode('|',$ia_key);
        for($x = 0; …
Run Code Online (Sandbox Code Playgroud)

javascript php codeigniter css3 codeigniter-3

5
推荐指数
1
解决办法
5047
查看次数

将默认值(当前日期时间)设置为表列 - CodeIgniter 3 迁移

我有这个迁移:

public function up(){
    $this->dbforge->add_field([
        'id'=>['type'=>'int', 'unique'=>true, 'unsigned'=>true,'auto_increment'=>true],
        'email'=>['type'=>'varchar', 'constraint'=>200, 'null'=>true],
        'password'=>['type'=>'varchar', 'constraint'=>250],
        'created_at'=>['type'=>'datetime', 'default' => 'CURRENT_TIMESTAMP'],
    ]);
    $this->dbforge->add_key('id', TRUE);
    $this->dbforge->create_table('users', TRUE);
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试设置created_at带有默认值列的表- 当前日期时间。我正在使用'default' => 'CURRENT_TIMESTAMP',但出现此错误:

'created_at' 的默认值无效 .... NOT NULL,created_atdatetime NOT NULL DEFAULT 'CURRENT_TIMESTAMP',

我使用CodeIgniter 3MySQL

codeigniter codeigniter-3

5
推荐指数
1
解决办法
4069
查看次数

codeigniter 3 使用单个查询更新多个表

我正在按照此操作使用单个查询更新多个表,但这在我的情况下不起作用。

我的查询如下:

$this->db->set('tbl1.col1', $val1);
$this->db->where('tbl1.col2', $val2);
$this->db->where('tbl1.col3', $val3);

$this->db->set('tbl2.col1', $val1);
$this->db->where('tbl2.col2', $val2);
$this->db->where('tbl2.col3', $val3);

$this->db->update('table1 as tbl1, table2 as tbl2');
Run Code Online (Sandbox Code Playgroud)

我收到的错误是:

Table 'database.table1 as tbl1, table2' doesn't exist 
Run Code Online (Sandbox Code Playgroud)

这可能不适用于新版本的 codeigniter。

我正在使用CI-3.1.6PHP-5.6.12

有没有其他方法可以在 codeigniter3 中使用单个查询更新多个表?

php codeigniter-3

5
推荐指数
0
解决办法
996
查看次数

Codeigniter 会话在刷新时重置

经过一个月的尝试解决这个问题,并尝试了相关问题中的各种答案,我决定自己问这个问题。

这个问题发生在我们最近购买的新服务器上,相同的代码在本地主机和最后一台服务器上运行良好。但这可能与代码有关。

会话已正确创建并设置了令牌,var_dump 显示了这一点。但是当用户尝试登录时,重定向到访问功能后,没有设置 Session 令牌,因此不会发生登录。

即使在同一页面上,如果刷新,__ci_last_regenerate(获取上次重新生成 Session 的时间)是当前时间,并在每次刷新后更改。

在 var/lib/php/session 中,每次刷新后都会创建两个不同的文件,不知道为什么。这里的图片:

在此处输入图片说明

19 秒的那个有正确的数据(时间和令牌),最后一个只有时间。

此外,我们最近向站点添加了一个新的子域,因此我们在同一台服务器中有两个不同的子域。

这是会话配置:

$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = NULL;
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;
Run Code Online (Sandbox Code Playgroud)

还尝试了 DB 驱动程序,它在表上生成了 2(或有时 3 行)。配置是:

$config['sess_driver']= 'database';
$config['sess_cookie_name']= 'ci_session';
$config['sess_expiration']= 0;
$config['sess_save_path']= 'ci_sessions';
$config['sess_match_ip']= FALSE;
$config['sess_time_to_update']= 300;
$config['sess_regenerate_destroy']= FALSE;
$config['sess_use_database']= TRUE;
$config['sess_expire_on_close']= TRUE;
$config['sess_table_name']= 'ci_sessions';
Run Code Online (Sandbox Code Playgroud)

数据库的输出是它的列(id、ip、timestamp、data):

在此处输入图片说明

数据始终相同,在一种情况下最后一次重新生成包含时间和令牌,而在另一种情况下仅最后一次重新生成(每次刷新 2 行)。

PHP 是 7.2.7 。CodeIgniter 是 3.1.5。

如果需要,将提供所需的任何其他代码或服务器信息。

编辑 4/9: 根据一些用户的要求,还添加了这些 cookie 数据。

$config['cookie_domain'] …
Run Code Online (Sandbox Code Playgroud)

php session codeigniter-3

5
推荐指数
1
解决办法
4624
查看次数

为什么通过单击删除按钮不会删除动态输入字段

$(document).ready(function () {
	//@naresh action dynamic childs
	var next = 0;
	$("#add-more").click(function (e) {
		e.preventDefault();
		var addto = "#field" + next;
		var addRemove = "#field" + (next);
		next = next + 1;
		var newIn = ' <div id="field' + next + '" name="field' + next + '"><!-- Text input--> <div class="form-group"> <div class="col-6"> <label for="vat" ></label><input type="text" placeholder="Check In Date" id="datepicker-12"   name="PeriodFrom[]"   class=" datepicker_recurring_start" value=""></div><div class="col-6"><label for="street" ></label><input type="text"  name="PeriodTo[]" placeholder="Check Out Date"  class=" datepicker_recurring_start" value=""></div></div><div class="form-group"><div class="col-6"><label for="vat" ></label><input …
Run Code Online (Sandbox Code Playgroud)

javascript php jquery codeigniter-3 twitter-bootstrap-3

5
推荐指数
1
解决办法
1216
查看次数

将一个表中的列连接到另一表中的另一列 CodeIgniter

我有 2 个表,我希望其中一些列在另一个表从用户那里获取数据时自动更新。

这是我的场景:用户注册及其详细信息进入“用户”表。注册用户现在可以发帖了。当他发帖时,他的帖子会进入“帖子”表。

现在我想在用户发帖时显示用户的“用户名”。

因此,结论是我希望表“users”中的列“username”自动与表“posts”中的列“username”同步。这样,一旦用户发了帖子,就会看到特定用户发了帖子。

这是我将如何实现它

<?php foreach ($posts as $post) : ?>

    <div class="row">
        <div  class="col-md-3">
            <img class="post-thumb img-fluid" src="<?php echo site_url(); 
?>assets/images/posts/<?php echo $post['post_image']; ?>">
        </div>
        <div class="col-md-9">
            <h3><?php echo $post['title'];?></h3>
            <small class="post-date">Posted on: <?php echo 
$post['created_at']; ?>
                in <strong><?php echo $post['category_name']?></strong> by 
<strong><?php echo $post['username']?></strong></small><br>
            <?php echo word_limiter($post['body'], 50); ?>
            <br><br>
            <p><a class="btn btn-info" href="<?php echo 
site_url('/posts/'.$post['slug']);?>"
                >Read More</a></p>
        </div>
    </div>

<?php endforeach; ?>
Run Code Online (Sandbox Code Playgroud)

这是我尝试过的一个功能,但当我发帖时它不会更新我的“帖子”表列“用户名”。

public function get_posts($slug = FALSE){
    if ($slug === FALSE){
        $this->db->order_by('posts.id', 'DESC'); …
Run Code Online (Sandbox Code Playgroud)

php mysql sql codeigniter-3

5
推荐指数
1
解决办法
203
查看次数