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 + 通信の最新記事】
- fake sendmail for windows を使って、PHP でごく普通に( mb_send_mail で )メール送信
- PHP : WEB でもコマンドラインでも HTTP でファイルをダウンロードする 『fget.php』
- PHP : cURL : Google Photo API の albums.list メソッドを使用して アルバム一覧データを取得する
- PHP + cURL で Google Photo API の アクセストークンを取得する
- PHP : cURL で FTP + SSL ダウンロード
- PHP の imap 関数で( Windows ローカル )、Yahoo メールのメールをさくらインターネットのメールへコピーする
- PHP の imap 関数( Windows のローカル )で、さくらインターネットのメールボックスの情報を取得する
- PHP : IMAP 関数 でまずメールのヘッダ部分を整理してログに出力する / ※ JSON 出力を追加
- ファイルを一つアップロード : FORM の target を IFRAME にして、PHP に JavaScript を書き出させて元のページにメッセージを表示させる
- Pear の Net_POP3 で、SSL(995) を使って簡単にメール受信
- PHP をコマンドプロンプトから実行して、WEB 上のデータを取得するいくつかの方法
- FormData を使用して $.ajax で送信すると、ファイルのアップロードとメール送信(ファイル添付)を一度に行えます
- ファイルのアップロードからそれを添付してメールを送るテンプレート(スケルトン)
- PHP : mb_send_mail を使用した自家用メール送信 API
- PHP で Windows標準のオブジェクト(CDO.Message)とGMail を使ってメール送信
- PHP : http 経由でファイルのサイズを取得する file_size 関数と ファイルサイズを付加した get_imagesize 関数
- 連想配列のキー部分がプロパティと一致したらセットする( メール送信用クラス )
- PHP : リモートのファイルサイズを取得する
- ローカルの PHP を使ってコマンドプロンプトより簡単にバイナリファイルをアップロードする
- PHP の cURL で ftp サーバーにファイルをアップロードする(SSLなし)