k01ken’s b10g

He110 W0r1d!

CakePHP3で画像をアップロードする際に一時ファイルなどの情報の場所

開発環境は、Windows 10 Pro(64bit) + PHP 7.2.12 + CakePHP 3.6.13。

画像などをアップロードしても、CakePHPでは、規約により$_FILESを使うことができない。その対策として、代替の方法を書いておきます。

<?php
// 主にコントローラ内にてPOSTメソッドを受け取ったら
$img = $this->request->getData("fileのname属性名");
echo $img['size']; // ファイルサイズ
echo $img['type']; // ファイルの形式
echo $img['tmp_name']; // 一時ファイルの絶対パス
echo $img['name']; // 画像のファイル名
echo $img['error']; // エラーメッセージ
?>

で、name,tmp_name,size,error,typeが連想配列の形式で取得できる。

画像を複数枚アップロードしたい場合

formタグ内にて、

<input type="file" name="file[0]">
<input type="file" name="file[1]">
<input type="file" name="file[2]">

みたいに指定して、
アクション側では、

<?php

for($i = 0; $i < 3; $i++){
  $img = $this->request->getData("file")[$i];
}

?>

という風にする。連番にした方が、アクション側はfor文を使って、少ないコードでかけるので便利。


参考リンク
CakePHP画像をアップロードする - Qiita
・ここに書いてあることじゃ、情報が古いのかできず、自分で方法を見つけました。