Контроллер Codeigniter создан, когда изображение не найдено - PullRequest
0 голосов
/ 06 марта 2012

У меня проблема с CodeIgniter, и это то, что, когда изображение не найдено на сервере, создается экземпляр контроллера (помимо того, который вызвал представление).

Я знаю, что все это может показаться странным, так что это код для наблюдения за тем, что я говорю. Я сделал это изменения в чистой версии CI 2.1.0:

Добавьте контроллер, чтобы переопределить страницу ошибки 404, я добавил эту:

// add application/controllers/Errors.php 
Class Errors extends CI_Controller {

    public function error_404() {
        echo 'error';
    }
}
// change routes.php
$route['404_override'] = 'Errors/error_404';

Используйте контроллер, который не является контроллером по умолчанию с несуществующим изображением, я использовал это:

// add application/controllers/Foo.php 
Class Foo extends CI_Controller {

    public function index() {
        echo '<img src="doesntexist.png" />';
    }

}

Я не мог найти другой способ его отладки, поэтому я создал журнал для записи событий в CodeIgniter.php:

// add on CodeIgniter.php line 356
$path = 'log.txt'; //Place log where you can find it
$file = fopen($path, 'a');
fwrite($file, "Calling method {$class}/{$method} with request {$_SERVER['REQUEST_URI']}\r\n");
fclose($file);

При этом журнал, который генерирует посещение индексной функции, выглядит следующим образом:

Calling method Foo/index with request /test/index.php/Foo
Calling method Errors/error_404 with request /test/index.php/doesntexist.png

Какая у меня проблема, создан экземпляр класса Error.

1 Ответ

0 голосов
/ 06 марта 2012
that is that when an image is not found on the server, the instance of a controller is created 

Не совсем.Я считаю, что происходит то, что, поскольку вы используете относительный путь для изображения (и вызываете его непосредственно внутри контроллера, что неправильно, потому что вы выводите что-то перед заголовками), ваш браузер прикрепляет изображение непосредственно к CIurl, таким образом делая этот запрос к серверу:

index.php/doesntexist.png

Который (правильно) интерпретируется CI как запрос к контроллеру, который не существует, и поэтому он выдает класс ошибки.

Вы могли бы сделать, в своем реальном коде (я бы поставил изображения в виде):

echo '<img src="/doesntexist.png" />'

, используя абсолютный путь, или используя метод base_url () из URLhelper:

echo '<img src="'.base_url().'doesntexist.png" />

Это должно сообщить серверу, чтобы он выбрал правильный запрос (/test/doesntexist.png), и не вызовет эту ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...