メインコンテンツまでスキップ

ファイルアップロード

HTTPS プロトコルによるファイルアップロードを行う方法を示します。

この例では、TSV ファイルから会員データをデータベースにインポートします。

ソース

PEAR ライブラリ、HTTP_Requestを使用した一例です。

ただしこの PEAR ライブラリは環境によりプロキシ経由の SSL 通信ができない場合があるため、注意が必要です。

#!/usr/bin/php
<?php
require_once 'HTTP/Request.php';
define("KR_RPC_SOAP_URI", "https://krs.bz/rpc");
$location = 'アクセス先URL';
$soap = new SoapClient(null, [
'soap_version' => SOAP_1_2,
'location' => $location,
'uri' => KR_RPC_SOAP_URI,
'trace' => true
]);
$soap->__setCookie("Cookie-Check", "1");

try {
$soap->loginSession("admin@example.com", "password");
$uri = $soap->getUploadUrl();
$request = new HTTP_Request($uri);
$request->setMethod(HTTP_REQUEST_METHOD_POST);
$request->addFile("rpc_upload_filename", "/tmp/upload.tsv");
$request->sendRequest();
$response = $request->getResponseCode();
echo "ResponseCode: $response\n";
if ($soap->getUploadStatus($uri) != 1) {
echo "アップロードに失敗しました。";
exit(1);
}
$fileid = $soap->getStoredFileID($uri);
$override_options = ["e_2" => "normal", "e_25" => "force"];
$job_id = $soap->importMembers(1, $fileid, true, $override_options);
do {
sleep(30);
$status = $soap->getBatchJobStatus($job_id);
$progress = $status["progress"];
} while ($progress < 100);
$uri = $soap->getBatchJobResultURL($job_id);
$request = new HTTP_Request($uri);
$request->sendRequest();
$response_code = $request->getResponseCode();
if ($response_code == 200) {
file_put_contents("/tmp/upload_log.txt", $request->getResponseBody());
}
} catch (Exception $e) {
echo "SOAP exception..\n";
echo $e->faultcode . "\n";
echo $e->faultstring . "\n";
echo $e->detail . "\n";
}

実行結果

$ ./soap.php
ResponseCode: 200