SQLの窓

2019年01月24日


PHP の cURL でファイルアップロード

cURL を使うとWEBの通信部分の面倒な部分( ssl や ファイルアップロード ) を簡単に処理してくれます。ここで、file-upload.php は、WEB サーバー上ですが、upload.php は、Windows のローカルPC から、コマンドプロンプトで php.exe upload.php で実行可能です

※ 昔と違って、CURLFile クラス を使わないとファイルをアップロードできません

※ MIME 情報は Fileinfo 関数 で取得しています。

関連する記事

VBScript から PHP へファイルアップロード
PHP : cURL で FTP + SSL ダウンロード

file-upload.php
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>ファイルアップロードの簡易テンプレート</title>
</head>
<body>
<form 
	enctype="multipart/form-data"
	method="POST">
 
	アップロードするファイル : 
	<input name="target" type="file">
	<p><input type="submit" value="アップロード"></p>
 
</form>
<pre>
<?php
if ( $_SERVER['REQUEST_METHOD'] == "POST" ) {

	// アップロードするフォルダ
	$upload = realpath ( "./image" );
	// アップロードするファイル
	$upload .= ( "\\" . str_replace( "%", "", urlencode( $_FILES['target']['name'] ) ));
	// 一時ファイルをアップロードファイルとして移動
	if ( move_uploaded_file(
		$_FILES['target']['tmp_name'], $upload ) ) {
		print "アップロードに成功しました<br>\n";
	}

	// アップロード情報の表示
	print_r( $_FILES );

}

?>
</pre>
</body>
</html>


upload.php
<?php
// ***************************************************
// curl 処理
// ***************************************************
$url = "http://localhost/lightbox/20190124/file-upload.php";

$curl = curl_init();
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_URL, $url);

// POST ( デフォルトは GET )
curl_setopt($curl, CURLOPT_POST, true);

// アップロードするファイル
$path = 'lightbox.jpg';

// Windows では extension=php_fileinfo.dll が必要
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $path);
finfo_close($finfo);

// CURLFile クラスのコンストラクタ
// 1) 実際のファイルのパス
// 2) ファイルの MIME
// 3) アップロード先に渡すファイル名
$data = array( 'target' => new CURLFile($path, $mime, 'lightbox-upload.jpg') );
curl_setopt($curl, CURLOPT_POSTFIELDS, $data );

// ***************************************************
// デバッグ用
// ***************************************************
curl_setopt($curl, CURLOPT_VERBOSE, true);	

$handle1 = fopen("./debug.txt", "w");
curl_setopt($curl, CURLOPT_STDERR, $handle1);

$handle2 = fopen("./ret_header.txt", "w");
curl_setopt($curl, CURLOPT_WRITEHEADER, $handle2);

// ***************************************************
// SSL
// ***************************************************
if ( substr( $url, 0, 5 ) == "https" ) {
	curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
	curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);
}

// ***************************************************
// 送信
// ***************************************************
$result = curl_exec($curl);

// ***************************************************
// 結果
// ***************************************************
if($result === false) {
	$result = 'Curl error: ' . curl_error($curl);
}
curl_close($curl);
fclose($handle2);
fclose($handle1);

print( $result . "\n" );

?>





タグ:Curl
【PHP + 通信の最新記事】
posted by lightbox at 2019-01-24 16:34 | PHP + 通信 | このブログの読者になる | 更新情報をチェックする
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり