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

首頁 > 語言 > PHP > 正文

PHP實現支持CURL字符串證書傳輸的方法

2024-05-05 00:07:53
字體:
來源:轉載
供稿:網友

背景

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

問題

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

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

解決過程

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

<?php 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-----
MIIEbDCCA9WgAwIBAgIEAWJKHDANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMC
Q04xEjAQBgNVBAgTCUd1YW5nZG9uZzERMA8GA1UEBxMIU2hlbnpoZW4xEDAOBgNV
BAoTB1RlbmNlbnQxDDAKBgNVBAsTA1dYRzETMBEGA1UEAxMKTW1wYXltY2hDQTEf
MB0GCSqGSIb3DQEJARYQbW1wYXltY2hAdGVuY2VudDAeFw0xNzA4MDcwOTIxNDda
Fw0yNzA4MDUwOTIxNDdaMIGbMQswCQYDVQQGEwJDTjESMBAGA1UECBMJR3Vhbmdk
b25nMREwDwYDVQQHEwhTaGVuemhlbjEQMA4GA1UEChMHVGVuY2VudDEOMAwGA1UE
CxMFTU1QYXkxMDAuBgNVBAMUJ+a3seWcs+W4guaYjua6kOi9r+S7tuiCoeS7veac
iemZkOWFrOWPuDERMA8GA1UEBBMIMTAyNTkyODEwggEiMA0GCSqGSIb3DQEBAQUA
A4IBDwAwggEKAoIBAQDg2D3++uOxY/yMGQPBnROvyYimnCsfGE0dnqdGUTCykqBh
yfv82zE1/St/4DQX2QDiIvLif+sMGcYwF4bkzdY+HgitYLI0k5o/5LCNZOMctuio
kdYC2bNdWHq2y9S5UWLQR1Zvq+6QyPBVBVY9yq9xtQhIlUTsZnICAp3iQLfQUR3l
aEdH9IERoRUIkbyb8oX5ONQz4P9jOeE9C5iwx0QrH4s01NFhkhr8JHlugRLpo9vA
xGgi/48fOlONj6wWal5Gt0OvvEbIwgQwya15KBX2YeGnZvYBQa+lQMeXEqZSFie3
G+wGvbtlONczQEtp+JDxLZLUS/FT7U0TQN/t8JDvAgMBAAGjggFGMIIBQjAJBgNV
HRMEAjAAMCwGCWCGSAGG+EIBDQQfFh0iQ0VTLUNBIEdlbmVyYXRlIENlcnRpZmlj
YXRlIjAdBgNVHQ4EFgQUjDJ75bu3Roog7XOH6uFAdZ6kpcIwgb8GA1UdIwSBtzCB
tIAUPgUm9iJitBVbiM1kfrDUYqflhnShgZCkgY0wgYoxCzAJBgNVBAYTAkNOMRIw
EAYDVQQIEwlHdWFuZ2RvbmcxETAPBgNVBAcTCFNoZW56aGVuMRAwDgYDVQQKEwdU
ZW5jZW50MQwwCgYDVQQLEwNXWEcxEzARBgNVBAMTCk1tcGF5bWNoQ0ExHzAdBgkq
hkiG9w0BCQEWEG1tcGF5bWNoQHRlbmNlbnSCCQC7VJcrvADoVzAOBgNVHQ8BAf8E
BAMCBsAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADgYEA
ucJLJkkHxlqQCEapZOWmySutqNVZxFbqyG//UXxxpA/1yG4e+KmufKZWv+c+MtYI
8i0KDDCv/UE+kkFIrHYDDKsdLRpxrYOUHGoqq0c7yBJ6Dimgy6m8U8FsEv3HtUR2
8g5xrg2Tc5MPWEp9ncEw575hGk0CXLDGOkI1nU+pGqk=
-----END CERTIFICATE-----

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

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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美成人免费全部观看天天性色| 欧美在线激情视频| 久久成年人免费电影| 日韩高清有码在线| 神马久久久久久| 在线观看欧美成人| 日韩在线视频播放| 欧美日韩人人澡狠狠躁视频| 尤物yw午夜国产精品视频明星| 国产精品激情自拍| 日韩影视在线观看| 精品亚洲一区二区三区在线观看| 欧洲成人性视频| 久久精品成人欧美大片| 国产精品久久99久久| 国产一区二区三区视频在线观看| 久久伊人精品一区二区三区| 国产精品嫩草影院一区二区| 久久久精品2019中文字幕神马| 欧美性xxxxx| 亚洲成人av在线播放| 日韩经典中文字幕| 青青青国产精品一区二区| 国产xxx69麻豆国语对白| 久久青草精品视频免费观看| 日韩av免费看| 国产美女91呻吟求| 久久视频在线观看免费| 日本电影亚洲天堂| 久久综合亚洲社区| 欧美日韩国产丝袜另类| 成人在线观看视频网站| 国内伊人久久久久久网站视频| 自拍偷拍亚洲一区| 九色91av视频| 亚洲iv一区二区三区| 国产亚洲一级高清| 久久久国产精品免费| 91久久精品日日躁夜夜躁国产| 日韩电影免费观看在线| 中国人与牲禽动交精品| 69影院欧美专区视频| 成人午夜一级二级三级| 免费不卡在线观看av| 97香蕉久久夜色精品国产| 欧美日韩国产精品| 欧美精品做受xxx性少妇| 国产精品一久久香蕉国产线看观看| 亚洲国产精品久久91精品| 欧美精品激情在线| 亚洲福利视频免费观看| 亚洲精品视频免费在线观看| 日韩女优人人人人射在线视频| 精品久久久久久中文字幕一区奶水| 奇门遁甲1982国语版免费观看高清| 欧美在线视频播放| www.日韩欧美| 91精品久久久久久久久| 国产精品久久久久久久一区探花| 亚洲国产精品久久久久秋霞蜜臀| 国产精品视频专区| 亚洲最新视频在线| 欧美日韩国产限制| 国内自拍欧美激情| 欧美一区二区色| 日韩视频中文字幕| 国产精品久久久久久av福利软件| 久久这里只有精品视频首页| 久久69精品久久久久久久电影好| 国产aⅴ夜夜欢一区二区三区| 欧美天堂在线观看| 欧美日韩激情视频8区| 国产精品久久久久久久一区探花| 国产精品久久久久久久久免费看| 日韩在线中文字幕| 亚洲欧美日韩在线高清直播| 精品成人av一区| 亚洲第一福利网站| 国产精品99久久久久久白浆小说| 青草成人免费视频| 欧美www在线| 国产噜噜噜噜久久久久久久久| 精品亚洲va在线va天堂资源站| 日韩av在线免费观看一区| 亚洲一区二区在线播放| www欧美xxxx| 国产精品一区二区电影| 欧美性极品xxxx做受| 一区二区三区美女xx视频| 久久天堂电影网| 91久久久久久久久久久久久| 91国产一区在线| 欧美激情第99页| 国产精品日日摸夜夜添夜夜av| 成人av.网址在线网站| 欧美激情一区二区三级高清视频| 精品视频中文字幕| 亚洲电影免费观看高清完整版| 国内精品久久久久久影视8| 欧美日韩在线免费观看| 成人在线观看视频网站| 精品国产一区二区三区久久久狼| 亚洲精品一区av在线播放| 亚洲摸下面视频| 亚洲最大福利网| 久久久久久免费精品| 国产精品第一区| 日韩电影中文字幕在线| 欧美国产日韩一区| 亚洲精品成人久久| 中文字幕免费国产精品| 91av中文字幕| 欧美在线www| 亚洲国产91色在线| 精品国内亚洲在观看18黄| 国产精品视频导航| 69**夜色精品国产69乱| 亚洲理论片在线观看| 国产欧美日韩免费看aⅴ视频| 国模精品一区二区三区色天香| 国色天香2019中文字幕在线观看| 日韩精品视频免费在线观看| 久久精品亚洲精品| 久久精品国产2020观看福利| 久久精品青青大伊人av| 亚洲女成人图区| 亚洲国产又黄又爽女人高潮的| 久久久91精品国产一区不卡| 久久精视频免费在线久久完整在线看| 亚洲无限乱码一二三四麻| 久久频这里精品99香蕉| 亚洲伊人久久大香线蕉av| 日韩精品在线视频美女| 91国偷自产一区二区三区的观看方式| 国产综合香蕉五月婷在线| 超碰97人人做人人爱少妇| 欧美激情aaaa| 久久777国产线看观看精品| 欧美国产第一页| 久久伊人精品天天| 日本高清视频一区| 日韩精品视频中文在线观看| 久久久精品国产| 国产精品日韩在线一区| 日韩精品视频在线| 欧美成人免费全部观看天天性色| 中文字幕一区二区三区电影| 国产精品一区电影| 亚洲视频第一页| 精品欧美一区二区三区| 中文字幕精品www乱入免费视频| 成人激情视频免费在线| 91色琪琪电影亚洲精品久久| 国产v综合ⅴ日韩v欧美大片| 国产成人精品亚洲精品| 国产在线观看一区二区三区| 欧美精品一区二区三区国产精品| 国产欧美韩国高清| 国产精品网站入口| 国产精品69久久久久| 国产一区二区三区在线视频| 另类专区欧美制服同性| 国产欧美va欧美va香蕉在| 大胆欧美人体视频|