2012-03-06 2 views
0

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

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

Добавить контроллер для переопределения страницы ошибки 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'; 

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

// 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 создается.

ответ

0
that is that when an image is not found on the server, the instance of a controller is created 

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

index.php/doesntexist.png 

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

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

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

используя absoluth путь, или с помощью метода base_url() от помощника URL:

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

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

Смежные вопросы