亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

PHP支持CURL字符串證書傳輸的方法介紹(代碼)

2020-03-22 18:00:32
字體:
來源:轉載
供稿:網友
本篇文章給大家帶來的內容是關于PHP支持CURL字符串證書傳輸的方法介紹(代碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

最近在對接微信支付的時候,需要在退款處用到證書,由于我們是SAAS平臺,要支持多方多渠道支付,如果把所有證書文件保存在應用服務器會受到SLB的影響,會導致某臺機器文件不同步而阻礙退款流程,但把文件存在OSS的話,后端又要從OSS下載到應用服務器來保證一致性。思來想去,最終決定將證書內容保存在數據庫,不同客戶各對應一份證書文件,無論幾臺機器做集群都能保證文件的一致性,同時也避免了多余的下載步驟。

問題

但是剛做就遇到了問題,PHP的CURL證書并不支持字符串的傳輸,只能填寫證書路徑(以下是官方的說法)

Client certificates must be specified by a path expression to a certificate store.

解決過程

我第一個想到的就是創建空白文件,將證書內容寫進去,等證書使用完畢后再將文件刪除,但是創建實體文件再刪除的操作消耗性能不說,還非常麻煩,有沒有創建臨時文件的方法呢?有,tmpfile()函數就可以幫我們創建臨時文件并拿到文件路徑,于是我寫了一個獲取臨時文件路徑的方法

 ?php html' target='_blank'>public function getTmpPathByContent($content) $tmpFile = tmpfile(); fwrite($tmpFile, $content); $tempPemPath = stream_get_meta_data($tmpFile); return $tempPemPath[ uri ///tmp/phpXZCtAO? 

比較悲哀的是,通過這個方法返回的路徑根本讀不到內容,甚至一度以為是不是被騙了

file_get_contents(/tmp/phpyyiOZv): failed to open stream: No such file or directory

看了官方文檔才找到原因,如果tmpfile()返回的句柄引用計數為0的話就會將臨時文件回收,臨時路徑自然也就失效了,顯然方法getTmpPathByContent()執行完后,局部變量$tmpFile的生命周期就結束了(官方文檔如下)

The file is automatically removed when closed (for example, by calling fclose(), or when there are no remaining references to the file handle returned by tmpfile()), or when the script ends.

確認了根源,那我們現在亟需找到一個生命周期隨進程結束而終止的變量類型來保存句柄,什么類型能滿足條件呢?靜態變量。靜態變量與局部變量不同的是,在PHP生命周期開始時便會為其分配內存空間,并會把它存儲在全局變量區域,而全局變量是在模塊關閉階段銷毀的,這樣的話,聲明靜態變量就可以使$tmpFile引用計數持續保持大于0的狀態,那我們的代碼就可以做出如下處理

 ?php public function getTmpPathByContent($content) static $tmpFile = null; $tmpFile = tmpfile(); fwrite($tmpFile, $content); $tempPemPath = stream_get_meta_data($tmpFile); return $tempPemPath[ uri ? 

再執行一次就成功讀取了臨時文件的內容

-----BEGIN CERTIFICATE-----MIIEbDCCA9WgAwIBAgIEAWJKHDANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCQ04xEjAQBgNVBAgTCUd1YW5nZG9uZzERMA8GA1UEBxMIU2hlbnpoZW4xEDAOBgNVBAoTB1RlbmNlbnQxDDAKBgNVBAsTA1dYRzETMBEGA1UEAxMKTW1wYXltY2hDQTEfMB0GCSqGSIb3DQEJARYQbW1wYXltY2hAdGVuY2VudDAeFw0xNzA4MDcwOTIxNDdaFw0yNzA4MDUwOTIxNDdaMIGbMQswCQYDVQQGEwJDTjESMBAGA1UECBMJR3Vhbmdkb25nMREwDwYDVQQHEwhTaGVuemhlbjEQMA4GA1UEChMHVGVuY2VudDEOMAwGA1UECxMFTU1QYXkxMDAuBgNVBAMUJ+a3seWcs+W4guaYjua6kOi9r+S7tuiCoeS7veaciemZkOWFrOWPuDERMA8GA1UEBBMIMTAyNTkyODEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDg2D3++uOxY/yMGQPBnROvyYimnCsfGE0dnqdGUTCykqBhyfv82zE1/St/4DQX2QDiIvLif+sMGcYwF4bkzdY+HgitYLI0k5o/5LCNZOMctuiokdYC2bNdWHq2y9S5UWLQR1Zvq+6QyPBVBVY9yq9xtQhIlUTsZnICAp3iQLfQUR3laEdH9IERoRUIkbyb8oX5ONQz4P9jOeE9C5iwx0QrH4s01NFhkhr8JHlugRLpo9vAxGgi/48fOlONj6wWal5Gt0OvvEbIwgQwya15KBX2YeGnZvYBQa+lQMeXEqZSFie3G+wGvbtlONczQEtp+JDxLZLUS/FT7U0TQN/t8JDvAgMBAAGjggFGMIIBQjAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh0iQ0VTLUNBIEdlbmVyYXRlIENlcnRpZmljYXRlIjAdBgNVHQ4EFgQUjDJ75bu3Roog7XOH6uFAdZ6kpcIwgb8GA1UdIwSBtzCBtIAUPgUm9iJitBVbiM1kfrDUYqflhnShgZCkgY0wgYoxCzAJBgNVBAYTAkNOMRIwEAYDVQQIEwlHdWFuZ2RvbmcxETAPBgNVBAcTCFNoZW56aGVuMRAwDgYDVQQKEwdUZW5jZW50MQwwCgYDVQQLEwNXWEcxEzARBgNVBAMTCk1tcGF5bWNoQ0ExHzAdBgkqhkiG9w0BCQEWEG1tcGF5bWNoQHRlbmNlbnSCCQC7VJcrvADoVzAOBgNVHQ8BAf8EBAMCBsAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADgYEAucJLJkkHxlqQCEapZOWmySutqNVZxFbqyG//UXxxpA/1yG4e+KmufKZWv+c+MtYI8i0KDDCv/UE+kkFIrHYDDKsdLRpxrYOUHGoqq0c7yBJ6Dimgy6m8U8FsEv3HtUR28g5xrg2Tc5MPWEp9ncEw575hGk0CXLDGOkI1nU+pGqk=-----END CERTIFICATE-----

下面就可以把生成的臨時文件地址設置到CURLOPT_SSLCERT了

 ?php $sslCertPath = getTmpPathByContent($content); curl_setopt($ch,CURLOPT_SSLCERT, $sslCertPath); //......? 

本篇文章到這里就已經全部結束了,更多其他精彩內容可以關注PHP 的php視頻教程欄目!

以上就是PHP支持CURL字符串證書傳輸的方法介紹(代碼)的詳細內容,PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品夜间视频香蕉| 国产精品久久久久久中文字| 国产九九精品视频| 在线观看视频亚洲| 成人午夜在线影院| 揄拍成人国产精品视频| 97成人精品区在线播放| 久久久精品999| 欧美黄色小视频| 欧美精品久久久久久久免费观看| 日韩小视频在线观看| 日韩av网址在线观看| 亚洲va久久久噜噜噜久久天堂| 久久久精品一区二区| 国产丝袜精品视频| 亚洲精品电影网在线观看| 欧美精品www在线观看| 国产不卡av在线| 欧美成人激情视频| 久久久精品久久| 国产精品美女视频网站| 欧美日本中文字幕| 久久久精品免费| 亚洲国产中文字幕久久网| 国产精品久久久久国产a级| 国内偷自视频区视频综合| 大荫蒂欧美视频另类xxxx| 欧美激情亚洲另类| 亚洲2020天天堂在线观看| 欧美一级大片在线观看| 精品亚洲一区二区三区| 久久国产精品电影| 中文字幕一区二区三区电影| 97久久精品在线| 激情久久av一区av二区av三区| 亚洲色图国产精品| 欧美激情免费看| 国产成人激情视频| 精品国产乱码久久久久酒店| 欧美丰满片xxx777| 成人午夜一级二级三级| 在线观看精品国产视频| 97久久精品人搡人人玩| 久久精品福利视频| 国产一区av在线| 久久九九全国免费精品观看| 国产精品久久久久久久一区探花| 亚洲欧美精品中文字幕在线| 98精品国产高清在线xxxx天堂| 亚洲成年人在线| 成人黄色在线播放| 97视频在线观看网址| 欧美片一区二区三区| 福利一区视频在线观看| 国模gogo一区二区大胆私拍| 岛国av一区二区在线在线观看| 一区二区三区天堂av| 久操成人在线视频| 在线性视频日韩欧美| 欧美一级视频免费在线观看| 日本午夜在线亚洲.国产| 欧美激情视频网| 国产精品第七影院| 亚洲男人天堂网站| 亚洲理论电影网| 中文字幕欧美视频在线| 亚洲自拍偷拍一区| 91国产美女视频| 久久久综合免费视频| 日韩在线观看免费av| 中文字幕av日韩| 精品视频在线播放色网色视频| 97碰在线观看| 国产精品久久久久一区二区| 亚洲精品午夜精品| 亚洲综合精品伊人久久| 成人福利网站在线观看| 亚洲乱码一区av黑人高潮| 欧美大片在线影院| 亚洲欧美另类中文字幕| 久久综合免费视频影院| 中文字幕在线看视频国产欧美| 国产欧美日韩精品丝袜高跟鞋| 日韩视频在线一区| 亚洲欧美日韩中文在线制服| 欧美日韩在线视频一区二区| 欧美一级高清免费| 欧美性xxxx在线播放| 日韩在线中文字| 96精品久久久久中文字幕| 久久久久亚洲精品国产| 亚洲高清色综合| 疯狂做受xxxx欧美肥白少妇| 国产欧美日韩免费| 欧美另类老肥妇| 精品国内产的精品视频在线观看| 欧亚精品中文字幕| 国产亚洲a∨片在线观看| 国产精品一区二区三区免费视频| 精品视频久久久久久| 久久精品久久精品亚洲人| 亚洲欧美日韩网| 欧美视频第一页| 日韩在线视频免费观看高清中文| 欧美激情a∨在线视频播放| 色综合老司机第九色激情| 亚洲视频综合网| 日韩黄色高清视频| 国产精品96久久久久久又黄又硬| 欧美一区视频在线| 91亚洲人电影| 蜜月aⅴ免费一区二区三区| 日韩成人黄色av| 久久久久久亚洲精品不卡| 日本在线观看天堂男亚洲| 亚洲欧美另类国产| 国产成人综合一区二区三区| 国产精品久久久久久久一区探花| 久99久在线视频| 欧美在线视频导航| 国产成人在线视频| 日韩视频免费在线| 日韩免费在线电影| 欧美国产日韩二区| 国产精品久久久久久久久免费看| 日韩电影在线观看免费| 亚洲欧洲国产一区| 欧美综合一区第一页| 国模gogo一区二区大胆私拍| 欧美成人午夜免费视在线看片| 菠萝蜜影院一区二区免费| 成人av.网址在线网站| 日韩一区av在线| 亚洲xxxxx电影| 亚洲免费视频一区二区| 综合久久五月天| 成人国产精品av| 欧美日韩综合视频网址| 97超级碰碰碰久久久| 91国产视频在线播放| 日韩电影免费在线观看中文字幕| 欧美日韩激情美女| 欧美片一区二区三区| 亚洲精品国偷自产在线99热| 91国语精品自产拍在线观看性色| 欧美激情综合色| 亚洲欧洲日产国产网站| 久久视频免费观看| 亚洲www在线| 欧美日韩激情视频8区| 欧美裸体xxxx极品少妇| 日韩中文字幕在线观看| 国产精品丝袜一区二区三区| 欧美在线一级视频| 欧美丰满老妇厨房牲生活| 国产日韩精品电影| 精品呦交小u女在线| 日韩一区视频在线| 亚洲伊人久久大香线蕉av| 欧美乱人伦中文字幕在线| 美女少妇精品视频| 国产精品美女午夜av| 日本一区二区三区四区视频| 91精品免费视频|