Phalconがどうとか以前にPHPもあんまり分からんけど使う機会があって、
フロントからファイルを送信してバックで受け取るということをした時に、
なんか分からんエラーに見舞われたのでメモ。
input type="file"で選択したファイルを
こんな感じで送信
$.ajax({
url : api_url,
type : "POST",
data : formdata,
cache : false,
contentType : false,
processData : false,
enctype: 'multipart/form-data'
})
.done(fnc_done())
.fail(fnc_fail());
Phalconの受け取り側
ドキュメント見ると
public function uploadAction()
{
// Check if the user has uploaded files
if ($this->request->hasFiles() == true) {
// Print the real file names and their sizes
foreach ($this->request->getUploadedFiles() as $file) {
// $file
}
}
}
こんな感じで$fileにファイル入ってくるようなので、
はぇ〜と思いつつ、
moveTo関数で一時フォルダに置くんやで、みたいなことが書いてあるので
こんな感じにしてみて
$file->moveTo($file->getName());
fopenする必要があったので、
$fopenFile = fopen($file->getName(),'rb');
みたいにすると、普通に読み込めた。
解決や! と思ってたら、うまくいったのはローカル環境だけで、
それをAWS上で動かした時にうまく動かなかった。
move_uploaded_file failed to open stream: Permission denied
的なことで怒られる。
ファイル、ディレクトリの権限を確認しても変なところは無い。
なんでーと思いつつ
$fopenFile = fopen($file->getTempName(),'rb');
とmoveTo飛ばして一時ファイル直接開くみたいにしたら普通に動いた。
という話でした