Captcha не работает в CI

Я написал небольшой фрагмент кода, который должен работать для captcha в Codeigniter. Код должен просто просто распечатать время, которое был создан captcha, для первой попытки. Но он, похоже, даже не создает сам капчу. Я уверен, что помощник загружен, это делается в функции построения. Рядом с этим должны быть правильные права на запись изображения в папку. Кто-нибудь знает, почему он не работает так, как должен?

defined('BASEPATH') OR exit('No direct script access allowed');
class Register extends CI_Controller{

     public function __construct(){
        parent::__construct();  
        $this->load->helper('captcha');
    }

    public function generate_captcha(){
        $vals = array(
            'img_path' => './captcha/',
            'img_url' => base_url().'captcha/',
        );
        echo base_url().'assets/images/captcha/';
        $captcha = create_captcha($vals);

        echo 'cap time: ' . $captcha['time'];

        $captcha_image = $captcha['image'];
        return $captcha_image; 
    }

}

Edit Может ли это иметь какое-либо отношение к чему-то, кроме этого кода? Я уже установил правильные права на папку, чтобы он мог писать изображения в каталог.

Ответ 1

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

class Mycaptcha extends CI_Controller  {

public function __construct() {

    parent::__construct();  
        $this->load->helper('captcha');
        $this->load->helper('url');
    }

    public function index() { 
        $vals = array(
            'img_path' => './captcha/',
            'img_url' => base_url().'/captcha/',
        );

        $captcha = create_captcha($vals);
        $captcha_image = $captcha['image'];

        print_r($captcha);
    }
}

Убедитесь, что у вас есть:

  • Создать папку captcha на root с разрешением 777
  • В config.php $config['base_url'] = 'http://localhost/yourproject/';

Ответ 2

Создайте папку вне приложения, называемую captcha Защитник Captcha Я думаю, вам также нужно иметь больше $vals, а не только img_path и img_url

Также убедитесь, что права доступа к chmod 0777 для папки или 0700

Возможно, вам придется настроить некоторые маршруты и

$route['register/generate_captcha'] = 'register/generate_captcha';

Имя файла: Register.php

application

assets > images > captcha // Has the correct permissions

assets > images > captcha > fonts // Has the correct permissions

system

index.php

контроллер

Обновление

Имя файла: Register.php после файла и руководства по стилю стиля

Задайте свой базовый url: $config['base_url'] = 'http://localhost/yourproject/';

<?php

class Register extends CI_Controller {

     public function __construct() {
        parent::__construct();  
        $this->load->helper('captcha');
    }

    public function index(){
        $vals = array(
            'word' => 'Random word',
            'img_path' => './assets/images/captcha/',
            'img_url' => base_url('assets/images/captcha'),
            'font_path' => './assets/images/captcha/fonts/texb.ttf',
            'img_width' => '150',
            'img_height' => 30,
            'expiration' => 7200,
            'word_length' => 8,
            'font_size' => 16,
            'img_id' => 'Imageid',
            'pool' => '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
        );

        $cap = create_captcha($vals);
        echo $cap['image'];

    }

}

Пример изображения 1

введите описание изображения здесь

Пример изображения 2

введите описание изображения здесь

Ответ 3

Местоположение: ./приложение/контроллеры/Captcha.php

<?php

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

class Captcha extends CI_Controller {

    public function __construct(){
        parent::__construct();
        $this->load->library('form_validation');
        $this->load->driver("session");
        $this->load->helper(array('form', 'url', 'captcha'));
    }

    public function index() {
        $this->form_validation->set_rules('name', "Name", 'required');

        $this->form_validation->set_rules('captcha', "Captcha", 'required');
        $userCaptcha = set_value('captcha');
        $word = $this->session->userdata('captchaWord');

        if ($this->form_validation->run() == TRUE && strcmp(strtoupper($userCaptcha),strtoupper($word)) == 0){

            $this->session->unset_userdata('captchaWord');
            $name = set_value('name');
            $data = array('name' => $name);

            $this->load->view('success-view', $data);

        } else {

            $vals = array('img_path' => 'static/','img_url' => base_url().'static/');
            $captcha = create_captcha($vals);
            $this->session->set_userdata('captchaWord', $captcha['word']);
            $this->load->view('captcha-view', $captcha);
        }
    }
}

Местоположение: *./application/views/captcha-view.php/

Добавить Защитный код!

<h1>Adding a captcha</h1>

<p>Take a look at <code style="background:rgb(220,220,220);">application/controllers/Captcha.php</code> to look at the controller used to generate the captcha.</p>
<?php echo validation_errors(); ?>
<?php echo form_open( 'captcha'); ?>
</p>

<p>
<label for="name">Name:</label>
<input id="name" name="name" type="text" />
</p>

<?php echo $image; ?>

<p>
<label for="name">Captcha:</label>
<input id="captcha" name="captcha" type="text" />
</p>

<?php echo form_submit( "submit", "Submit"); ?>
<?php echo form_close(); ?>

Местоположение:./application/views/success-view.php

<html>

<head>
    <title>Success!</title>
</head>

<body>
    <h1>Success!</h1>
    <p>Thanks, <?php echo $name; ?>!</p>
</body>

</html>