2017-02-09 25 views
1

Я создаю изображение, используя библиотеку gd.
Сценарий создает объект изображения, затем открывается изображение logo.png и вставляет его в $image.Cakephp 3: Чтение файла в папке img из другого файла, содержащегося в той же папке

$image = ImageCreate(192,64); 
$myFile = imagecreatefrompng('logo.png'); 
imagecopy($image,$myFile,0,0,0,0,64,64); 
ImageDestroy($myFile); 

Этот скрипт отлично работает в другом приложении (без рамки), но здесь, в CakePHP 3, он не работает.
Сценарий и изображение logo.png находятся в папке webroot/img CakePHP.

Сценарий называется так из вида (шаблон):

<img src="/cake/img/kana/makelogo.php"> 

Сценарий вылетает без сообщений об ошибках. (Firefox говорит, что файл изображения не может быть отображен, потому что он поврежден.)

Он выходит из строя, когда строка $myFile = imagecreatefrompng('logo.png'); не комментируется.
Есть ли специальные настройки маршрутизации, позволяющие сценарию в папке img обращаться к файлу в папке img?

ответ

0

Путь к образцу относится к файлу, в котором содержится код. Если ваш скрипт находится в weboroot/img/kana, но изображение находится в каталоге в webroot/img, оно не сможет его найти.

Вы можете указать относительный путь вместо:

$myFile = imagecreatefrompng('../logo.png'); 

И только FYI, если он когда-либо перемещается к контроллеру CakePHP, используйте константу, определенную в config/paths.php:

$image = ImageCreate(192,64); 
$myFile = imagecreatefrompng(WWW_ROOT.'/img/bricks.png'); 
imagecopy($image,$myFile,0,0,0,0,64,64); 
ImageDestroy($myFile); 
+0

Я пробовал относительный путь, но он не работает. Я постараюсь переместить его на контроллер – LuTo

0

@ahoffner: Он работает если я сделаю это в контроллере. Вот код, который я добавил к контроллеру:

function displaylogo() { 
    $image = ImageCreate(192,64); 
    $myFile = imagecreatefrompng(WWW_ROOT.'img/logo.png'); 
    imagecopy($image,$myFile,0,0,0,0,64,64); 
    ImageDestroy($myFile); 

    ImagePng ($image); 
    $this->autoRender = false; 
    $this->response->header('Content-Type: image/png'); 
    $this->response->type('png'); 
    $this->response->body($image); 
} 

И в представлении:

<img src="/cake/<MyController>/displaylogo"> 

Это решение работает для меня.