Я пытаюсь переместить старую установку CakePHP 1.3.8 между серверами, и у меня возникают проблемы с отображением некоторых изображений.
Старый сервер: Ubuntu 14.04.5 LTS Apache 2.4.7 MySQL 5.5 PHP 5.5.9 PHP (GD, MYSQL)
Новый сервер: Centos 7.5.1804 Apache 2.4.6 MySQL 5.4 PHP 5.4 PHP (GD, MYSQL)
Я подтвердил, что DocumentRoot указывает на каталог Cake / app / webroot, а также имеет директиву AllowOverride All в конфигурации сайтов. Также проверили (3) файлы .htaccess, mod_rewrite и т. д.
Для отладки в core.php установлено значение «2», но единственная ошибка, зарегистрированная в журнале, связана с функцией изображения:
imagejpeg() [<a href='http://php.net/function.imagejpeg'>function.imagejpeg</a>]: Filename cannot be empty
Примеры того, что происходит на каждой странице проекта-
Все остальное, включая доступ к базе данных, работает. Я почти ничего не знаю о cakephp, но, просматривая различные файлы, мне кажется, что эта функция вызывается из файла detail.ctp в каталоге views / projects:
<?php echo $html->image('/App/ContentImageView/'.$image3.'/250/400',array('title'=>'Project Image', 'id'=>'MainImg', 'alt'=>'Project I mage', 'class'=>'border2')); ?>
И функция из app_controller.php
function ContentImageView($img_path, $w = '75', $h = '75'){
Configure::write('debug', 2);
debug($img_path, $showHTML = true, $showFrom = true);
if (empty($img_path)) return;
$image = str_replace('@@', '/', $img_path);
if (empty($image)) return;
$this->autoLayout = false;
$this->autoRender = false;
if (empty($image)) return;
//image resize parameters
$FileConfig = array();
$FileConfig['source_image'] = WWW_ROOT . '/'. $image;
$FileConfig['dynamic_output'] = true;
$FileConfig['maintain_ratio'] = true;
$FileConfig['width'] = $w;
$FileConfig['height'] = $h;
ini_set('memory_limit', -1)
$this->ImageLib->clear();
$this->ImageLib->set($FileConfig);
$this->ImageLib->resize()
}
Весь код отлично работает на старом сервере, поэтому я думаю, что это какая-то проблема с конфигурационным путем, но я просто не могу понять это.
Спасибо всем.
Что такое $this->ImageLib (debug(get_class($this->ImageLib)))? Возможно, он использует какой-то модуль PHP, такой как gd, который установлен на старом сервере, но не установлен на новом?
Кроме того, этот код выглядит уязвимым для потенциальной атаки обхода каталога.
Пути + пути к каталогам проверить. Я добавил пару отладочных операторов на страницу просмотра, и пути отображаются правильно. Сайт использует модуль PHP gd. На новом сервере стоит PHP-gd-5.4. PHP --info дает GD Support => enabled и GD Version => bundled (совместим с 2.1.0). Что касается потенциального нападения, я его рассмотрю. Спасибо
В предупреждении должно быть указано имя файла и номер строки (пожалуйста, всегда публикуйте сообщение полностью). Посмотрите, где на самом деле возникает ошибка, то есть место, где вызывается imagejpeg(). Также проверьте существующие вопросы относительно того же предупреждения, например stackoverflow.com/questions/19888246/…
Спасибо что подметил это. Номер строки ссылается на ошибку в функции image_display_gd в image_lib.php. Однако изменение двойных одинарных кавычек на «NULL» не решает проблемы. Странно и то, что на рабочем сервере работает немного более новая версия PHP.






Я установил виртуальную машину Centos 6.9 с PHP 5.3.3, и проблемы нет. Должно быть изменение в PHP, как указал ndm. Вместо того, чтобы пытаться выяснить, где нужно обновить код, мы продвигаемся к Centos 6.9, так как этот сайт все равно скоро будет закрыт.
Еще раз спасибо всем, кто ответил.
Вы сравнивали атрибут src изображений между рабочими и нерабочими страницами? Убедитесь, что путь к изображению правильный, и что изображение хранится на сервере в указанной папке.