2017-02-09 11 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イメージは、CakePHPのwebroot/imgフォルダにあります。

スクリプトはビュー(テンプレート)から、このように呼び出されます。

<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"> 

このソリューションは、私のために動作します。

関連する問題