Cakephp 3:从同一文件夹中包含的另一个文件中读取img文件夹中的文件

时间:2017-02-09 13:22:04

标签: php cakephp routing gd

我使用gd库创建图像 该脚本创建图像对象,然后打开logo.png图像并将其粘贴到$image

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

这个脚本在另一个应用程序(没有框架)中工作正常,但在CakePHP 3中,它不起作用。
脚本和logo.png图像位于CakePHP的webroot/img文件夹中。

从视图(模板)中以这种方式调用脚本:

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

脚本崩溃,没有错误消息。 (Firefox表示图像文件无法显示,因为它已损坏。)

当没有注释到行$myFile = imagecreatefrompng('logo.png');时,它会崩溃 是否有特殊的路由设置允许img文件夹中的脚本访问img文件夹中的文件?

2 个答案:

答案 0 :(得分:0)

图片路径是相对于包含代码的文件。如果您的脚本位于weboroot/img/kana但图片位于webroot/img中的目录中,则无法使用找到它。

您可以改为指定相对路径:

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

只是如果它被转移到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);

答案 1 :(得分: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">

此解决方案适合我。