はじめに
FuelPHP標準のRequest_Curlでファイルアップロードをする機会があったのでそのサンプルになります。他でやればいいのですが、標準使いたかったので調べました。
Curlの場合@を使用すればファイルアップロードになるはずなのですができなかったので微妙にはまりました。
環境
FuelPHP 1.7
PHP 5.6.18
概要
- ソース作成
- 実行
詳細
1. ソース作成
ソースを作成します。
namespace Fuel\Tasks;
class UploadTest {
public function run() {
$params = array(
'post_param1' => 'データ1'
, 'fileupload' => \CURLFile(dirname(__FILE__)."/upload.csv");
);
$postparam = array(
'form-data' => $params
);
$curl = \Request::forge($url, 'curl');
$curl->set_method('post');
$curl->set_params($postparam);
$curl->set_option(CURLOPT_RETURNTRANSFER,true);
$curl->set_option(CURLOPT_BINARYTRANSFER,true);
$curl->set_header('Content-Type','multipart/form-data');
$execResult = $curl->execute();
$response = $execResult->response();
$result = $response->body;
print_r($result);
}
}
2. ソース作成
実行します。
$oil refine UploadTest
あとがき
set_optionでCURLOPT_RETURNTRANSFERはソースを見るとCURLOPT_つけている感じなので文字列で指定する場合はRETURNTRANSFERでも良いかもしれません。
curl.php
:
public function set_options(array $options)
{
foreach ($options as $key => $val)
{
if (is_string($key) && ! is_numeric($key))
{
$key = constant('CURLOPT_' . strtoupper($key));
}
$this->options[$key] = $val;
}
return $this;
}