請問如何用PHP處理HTTPS的請求?
我想問的不是用curl發送請求,也不是問https的原理,我就是想瞭解瀏覽器發送HTTPS請求後PHP需要做哪些配置或者寫哪些代碼來處理這個請求,諸位可否有範例程式碼?
網上搜過了,不是curl發送https請求的例子,就是HTTPS原理的例子,但是原理我懂了可是不知道開始...
謝謝
回複內容:
請問如何用PHP處理HTTPS的請求?
我想問的不是用curl發送請求,也不是問https的原理,我就是想瞭解瀏覽器發送HTTPS請求後PHP需要做哪些配置或者寫哪些代碼來處理這個請求,諸位可否有範例程式碼?
網上搜過了,不是curl發送https請求的例子,就是HTTPS原理的例子,但是原理我懂了可是不知道開始...
謝謝
php跟https沒有半毛錢關係,因為php是一種語言/指令碼解譯器,不是一種伺服器
一個請求到達伺服器,無論是http還是https,先經過web server,如apache、nginx,由web server處理與用戶端之間基於http/https協議的資料互動
根據一定規則(如副檔名)確定是否需要調用php來處理這個請求,調用的方式有很多種,比如模組方式、CGI方式、以及基於CGI的fastcgi/fpm方式,取決於web server的配置
調用結束後,php把要返回的資料吐出來給web server,再由web server封裝成http/https協議格式,返回給用戶端/瀏覽器
首先需要知道你是用apache還是nginx做伺服器,真正的請求是伺服器去解析的。在伺服器配置後就會直接交給php處理了。沒用伺服器的話請見@mao童鞋的答案
$context = stream_context_create(array('ssl' =>array( 'local_cert' =>'./https.pem', )));if(!$server = stream_socket_server("ssl://0.0.0.0:2016", $err_no, $err_msg, STREAM_SERVER_BIND | STREAM_SERVER_LISTEN, $context)){ exit($err_msg);}while(1){ $client = stream_socket_accept($server); if ($client) { stream_set_blocking($client, 0); $in = ''; while($ret = fread($client, 8192)) $in .= $ret; $response = "HTTP/1.0 200 OK\r\n\r\nHello"; fwrite($client, $response); fclose($client); }}
PHP也能寫Socket伺服器的,上面是用PHP寫的一個極其簡陋的HTTPS的WebServer,本地測試通過,瀏覽器訪問 https://127.0.0.1:2016測試
代碼放到github中 https://github.com/walkor/webserver-example
裡面還有個HTTP協議的WebServer,仍然是極其簡陋的Demo,ab壓測結果如下,單核2.4W QPS
Concurrency Level: 100Time taken for tests: 4.082 secondsComplete requests: 100000Failed requests: 0Write errors: 0Total transferred: 3100000 bytesHTML transferred: 1200000 bytesRequests per second: 24498.50 [#/sec] (mean)Time per request: 4.082 [ms] (mean)Time per request: 0.041 [ms] (mean, across all concurrent requests)Transfer rate: 741.65 [Kbytes/sec] received
PHP寫的更強悍的socket伺服器見這裡:
https://github.com/walkor/workerman