I.説明
このレビューは、一般的なCURLファイルアップロード操作、ベースTP5フレームを議論します。
第二に、フロントエンド
以下のコード、(ここでは受信修正パラメータ名に対応するアップロードアドレスを入力する必要がありますファイル):
< フォーム アクション= "上传地址" 方式= "ポスト" のenctype = "マルチパート/フォームデータ" > < 入力タイプ= "ファイル" 名= "ファイル" > < ボタンタイプ= "提出" >上传</ ボタン> < / フォーム>
第三に、バックエンド
以下は、CURLによって別のサーバにアップロードし、アップロードプロセスTP5、に基づいています。
1 <?PHP 2 名前空間のアプリ\コントローラ。 3 4 使用は、\コントローラを考えます。 5 6 // 文件上传类 7 クラスアップロード延びコントローラ 8 { 9が 保護 $ FILE_SIZEを = 20971520。// 20M 10 保護 $ FILE_TYPE = [ "PNG"、 "JPG"、 "JPEG"、 "GIF"を]。 11 保護 の$ RET = [ 'コード' => 0、 'MSG' => ''、 'データ' => []]。 12 プライベート $ uploadUrl = "http://xxx.com"。 13は 14 パブリック 関数)のdoIt( 15 { 16 のtry { 17 $確認 = $ファイル - >検証([=> 'サイズ' $この - > FILE_SIZE、 'EXT' => $この - > FILE_TYPE]); 18は、 IF( !$を確認します){ 19。 スロー 新しい新 \ 例外( 'アップロードファイルサイズが20M、または不正なファイルの種類を超えた' ); 20がある } 21で 22で $のEXT = パス情報($ファイル - > GETINFO( '名前'))[「拡張" ]; 23は、 $(TM)= 時間()。 24 $パントマイム = $ファイル - > GETINFO( 'タイプ' ); 25 26 // 表单请求参数 27 $ POSTDATA = [ 28 'ファイル' => 新しい \ CURLFile(のrealpath($ファイル - > getPathname())、$パントマイム、$ fileNameに "{。。$のEXT }")、 29 ] ; 30 31 $ curlRes = $この - > curlUploadFile($この - > uploadUrl、$ POSTDATA )。 32の $の解像度$のres [ 'MSG']、500 ); 40 } 41である } キャッチ(\ 例外 $ EX ){ 42は、 // 例外ハンドラ 43は $この - > RETの[ 'コード'] = 500 ; 44である $この - > RET [ 'MSG'] = $ EX - > のgetMessage()。 45 } 46は、 リターン JSON($この - > RET); //はJSONを返す 47 } 48 50 51である // CURLファイルのアップロード 52が プライベート 関数 curlUploadFile($のURL、$データ) 53です { 54 $カール = curl_init(); 55 であれば(でclass_exists( '\のCURLFile' )){ 56 ますcurl_setopt($カール、CURLOPT_SAFE_UPLOAD、真)。 57 // $データ=配列( 'ファイル' =>新しい\ CURLFile(のrealpath($パス))); //> = 5.5 58 } 他{ 59 であれば(定義された 'CURLOPT_SAFE_UPLOAD'( )){ 60 ますcurl_setopt($カール、CURLOPT_SAFE_UPLOAD、偽); 61 } 62 //$データ=配列( 'ファイル' => '@'のrealpath($パス)。); // <= 5.5 63 } 64 ますcurl_setopt($カール、CURLOPT_URL、$のURL ); 65 ますcurl_setopt($カール、CURLOPT_POST、1 ); 66 ますcurl_setopt($カール、CURLOPT_POSTFIELDS、$データ); 67 ますcurl_setopt($カール、CURLOPT_RETURNTRANSFER、1 ); 68 $結果 = curl_exec($カール); 69 $エラー = curl_error($カール); 70 71 curl_close($カール); 72 73 戻り ます$ result ; 74 } 75 }