摘要:當然該參數(shù)可以通過修改自己構(gòu)造請求的主體實現(xiàn)任意大小文件的直接內(nèi)存上傳通過上傳文件,不管是磁盤文件還是內(nèi)存中的字符串也好,其實都是基于協(xié)議的請求。
普通的CURL上傳磁盤文件的方式
發(fā)送方 send.php的代碼如下:
"123456", "file_contents" => "@$filename;filename=test.txt;type=text/plain", ); */ /* * 第二種寫法,推薦新版本php中使用 * CURLFile參數(shù)解釋 * @$filename 需要上傳的文件,建議使用絕對路徑 * @$mimetype: 默認是 application/octet-stream,此處留空 * @$postname: 接收方$_FILES數(shù)組中的文件名,此處為 test.txt */ $file = new CURLFile($filename, "", "test.txt"); $post_data = array( "extra_info" => "123456", "file_contents" => $file, ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $target_url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($ch); curl_close($ch); echo $result;
處理上傳文件的代碼upload.php示例:
"; if(move_uploaded_file($_FILES["file_contents"]["tmp_name"], $uploadfile)) { echo "ok!"; } else { echo "failed!"; } //調(diào)試信息 var_dump($_FILES); var_dump($_POST);利用 PUT 方法上傳內(nèi)存中的文件
有些時候腳本產(chǎn)生的臨時小文件,利用普通的上傳方式,則需要先把文件寫入磁盤,再作為文件上傳。產(chǎn)生了額外的開銷。最好的辦法是直接上傳。
重新實現(xiàn)send.php 代碼如下:
沒有用 php://memory,會報錯 Warning: curl_setopt(): cannot represent a stream of type MEMORY as a STDIO FILE* 暫無好的解決方案
處理上傳的文件的腳本也需要修改下:這個方法,適合上傳小于2MB的文件,否則還是會生成臨時文件。當然該參數(shù)可以通過php.ini修改
自己構(gòu)造請求的主體 實現(xiàn)任意大小文件的直接內(nèi)存上傳通過CURL 上傳文件,不管是磁盤文件還是內(nèi)存中的字符串也好,其實都是基于HTTP協(xié)議的請求。
如果自己構(gòu)造這段請求,便不再局限于文件的形式了。array( "name" => "test1.txt", "type" => "text/plain", "content" => "...this is my file content..." ), "file2" => array( "name" => "test.txt", "type" => "text/plain", "content" => "... this is my two file" ), ); //后端接受的$_POST的數(shù)組值 $postFields = array( "myname" => "joe", ); //@var $data 保存主體的字符串 $data = ""; //先將post的普通數(shù)據(jù)生成主體字符串 foreach ($postFields as $name => $content) { $data .= "--" . $delimiter . " "; $data .= "Content-Disposition: form-data; name="" . $name . """; //multipart/form-data 不需要urlencode,參見 http:stackoverflow.com/questions/6603928/should-i-url-encode-post-data $data .= " " . $content . " "; } //將上傳的文件生成主體字符串 foreach ($fileFields as $name => $file) { $data .= "--" . $delimiter . " "; $data .= "Content-Disposition: form-data; name="" . $name . ""; filename="" . $file["name"] . "" "; $data .= "Content-Type: " . $file["type"] . " ";//多了個文檔類型 $data .= $file["content"] . " "; } //主體結(jié)束的分隔符 $data .= "--" . $delimiter . "--"; $target_url = "http://localhost/upload.php"; $handle = curl_init($target_url); curl_setopt($handle, CURLOPT_POST, true); curl_setopt($handle, CURLOPT_HTTPHEADER , array( "Content-Type: multipart/form-data; boundary=" . $delimiter, "Content-Length: " . strlen($data)) ); curl_setopt($handle, CURLOPT_RETURNTRANSFER, 1); curl_setopt($handle, CURLOPT_POSTFIELDS, $data); $result = curl_exec($handle); curl_close($handle); //echo $result;這種方式實現(xiàn)稍顯復(fù)雜,但不需要更改處理上傳的代碼,跟第一種磁盤文件的方法一樣。
其他參考深入淺出php下的文件上傳 提到了一些安全處理的技巧
簡述php中curl的使用
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/31867.html
摘要:阿里云哪個節(jié)點服務(wù)器好一下看看負載均衡它是對多臺云服務(wù)器進行流量分發(fā)的負載均衡服務(wù),讓整個服務(wù)器群來處理網(wǎng)站的請求。負載均衡支持億級連接和千萬級并發(fā),可輕松應(yīng)對大流量訪問,滿足業(yè)務(wù)需求。原文流量大的網(wǎng)站如何處理高并發(fā)流量問題很多平臺一旦做大了,平臺的流量就會陡增,同時并發(fā)訪問的流量也會暴增,原本規(guī)劃的硬件配置就無法滿足當下的流量問題。 那么如何處理好高并發(fā)的流量問題呢? 小編將這些分為2個方...
摘要:協(xié)作方式在高并發(fā)場景中,必須要讓服務(wù)器同時維護大量請求連接,可能是一個服務(wù)進程創(chuàng)建另一個進程,也可能是一個服務(wù)線程去創(chuàng)建另一個線程,但連接結(jié)束后進程或線程就銷毀了,這是一個巨大的浪費一個自然的想法就是通過創(chuàng)建一個進程線程池從而達到資源復(fù)用, showImg(https://segmentfault.com/img/bVbtgn1?w=313&h=208); 協(xié)作方式 在高并發(fā)場景中,必...
摘要:評估選項本報告涵蓋了為了支持工作負載涵蓋運營和分析,查詢引擎面臨的挑戰(zhàn)的細節(jié),這些細節(jié)也可以作為訪問數(shù)據(jù)庫引擎查詢引擎和存儲引擎組合以及滿足事務(wù)運營分析或混合工作負載需求的指南。 評估HTAP選項 本報告涵蓋了為了支持工作負載(涵蓋OLTP、運營、BI和分析),查詢引擎面臨的挑戰(zhàn)的細節(jié),這些細節(jié)也可以作為訪問數(shù)據(jù)庫引擎、查詢引擎和存儲引擎組合以及滿足事務(wù)、運營、分析或混合工作負載需求的...
閱讀 1815·2021-09-03 10:50
閱讀 1341·2019-08-30 15:55
閱讀 3386·2019-08-30 15:52
閱讀 1245·2019-08-30 15:44
閱讀 958·2019-08-30 15:44
閱讀 3329·2019-08-30 14:23
閱讀 3565·2019-08-28 17:51
閱讀 2301·2019-08-26 13:52