《PHP用curl采集時(shí),出現(xiàn)Recv failure: Connection was aborted》要點(diǎn):
本文介紹了PHP用curl采集時(shí),出現(xiàn)Recv failure: Connection was aborted,希望對(duì)您有用。如果有疑問,可以聯(lián)系我們。
PHP用curl采集時(shí),偶爾會(huì)出現(xiàn) Recv failure: Connection was aborted
由于是偶然的,不好還原。目前初步判斷是目標(biāo)服務(wù)器連接不太穩(wěn)定。
以下是可能的原因,可能性一似乎沒有作用:
可能性一:
web站點(diǎn)目前主要分為http和https兩種協(xié)議,其中https類型的網(wǎng)站都是通過ssl協(xié)議+http協(xié)議的,是目前最安全的網(wǎng)站協(xié)議,訪問此類網(wǎng)站的時(shí)候,會(huì)走ssl協(xié)議,驗(yàn)證訪問者的證書,檢測(cè)是否安全。
通過curl訪問此類網(wǎng)站也是如此流程,但是curl中需要添加相應(yīng)的參數(shù),繞過ssl證書的驗(yàn)證,才可以正常訪問,如出現(xiàn)此錯(cuò)誤的一般原因是沒有加此參數(shù)。
CURLOPT_SSL_VERIFYHOST的值
設(shè)為0表示不檢查證書
設(shè)為1表示檢查證書中是否有CN(common name)字段
設(shè)為2表示在1的基礎(chǔ)上校驗(yàn)當(dāng)前的域名是否與CN匹配。
而早期版本中這個(gè)變量是值,為時(shí)作用同目前設(shè)置為,后來出于,增加了的選項(xiàng),因此兩個(gè)值就不夠用了,升級(jí)為三個(gè)值。 再后來(之后的版本),這個(gè)調(diào)試選項(xiàng)由于,被去掉了,因此目前也不支持了,只有兩種取值。
最新版本,它的默認(rèn)值就是2
如果出現(xiàn):
PHP Notice: curl_setopt(): CURLOPT_SSL_VERIFYHOST with value 1 is deprecated and will be removed as of libcurl 7.28.1. It is recommended to use value 2 instead in
一般原因是你設(shè)置了 curl_setopt ( $curl_handle, CURLOPT_SSL_VERIFYHOST, true ); 改成curl_setopt ( $curl_handle, CURLOPT_SSL_VERIFYHOST, 2 );就行了。
可能性二:
參考:http://blog.sina.com.cn/s/blog_5592787201018ilw.html
在用curl進(jìn)行模擬調(diào)用時(shí),curl接收內(nèi)容會(huì)出現(xiàn)"Empty reply from server" 和 "Recv failure: Connection was reset"的錯(cuò)誤。 開啟apache ulimit限制和將httpd.conf的work mpm方式修改正確。 修改后"Recv failure: Connection was reset"錯(cuò)誤消失。"Empty reply from server"存在。 經(jīng)過對(duì)apache的error_log進(jìn)行跟蹤,出現(xiàn)錯(cuò)誤"Connection reset by peer: core_output_filter: writing data to the network" 修改httpd.conf,在虛擬主機(jī)上添加如下內(nèi)容: EnableSendfile off EnableMMAP off 修改后"Empty reply from server"錯(cuò)誤消失。
----------------------------
以下是引用網(wǎng)址原文:
在用curl進(jìn)行模擬調(diào)用時(shí),curl接收內(nèi)容會(huì)出現(xiàn)"Empty reply from server" 和 "Recv failure: Connection was reset"的錯(cuò)誤。
開啟apache ulimit限制和將httpd.conf的work mpm方式修改正確。
修改后"Recv failure: Connection was reset"錯(cuò)誤消失。"Empty reply from server"存在。
經(jīng)過對(duì)apache的error_log進(jìn)行跟蹤,出現(xiàn)錯(cuò)誤"Connection reset by peer: core_output_filter: writing data to the network"
修改httpd.conf,在虛擬主機(jī)上添加如下內(nèi)容:
EnableSendfile off
EnableMMAP off
修改后"Empty reply from server"錯(cuò)誤消失。
以上兩個(gè)參數(shù)詳解如下:
EnableMMAP 指令
說明 在遞送中使用內(nèi)存映射(memory-mapping)來讀取文件
語法 EnableMMAP On|Off
默認(rèn)值 EnableMMAP On
作用域 server config, virtual host, directory, .htaccess
覆蓋項(xiàng) FileInfo
狀態(tài) 核心(C)
模塊 core
此指令指示httpd在遞送中如果需要讀取一個(gè)文件的內(nèi)容,它是否可以使用內(nèi)存映射。當(dāng)處理一個(gè)需要訪問文件中的數(shù)據(jù)的請(qǐng)求時(shí),比如說當(dāng)遞送一個(gè)使用mod_include進(jìn)行服務(wù)器端分析的文件時(shí),如果操作系統(tǒng)支持,Apache將默認(rèn)使用內(nèi)存映射。
這種內(nèi)存映射有時(shí)會(huì)帶來性能的提高,但在某些情況下,您可能會(huì)需要禁用內(nèi)存映射以避免一些操作系統(tǒng)的問題:
在一些多處理器的系統(tǒng)上,內(nèi)存映射會(huì)減低一些httpd的性能。
在掛載了NFS的DocumentRoot上,若已經(jīng)將一個(gè)文件進(jìn)行了內(nèi)存映射,則刪除或截?cái)噙@個(gè)文件會(huì)造成httpd因?yàn)榉侄喂收隙罎ⅰ?nbsp;
在可能遇到這些問題的服務(wù)器配置過程中,您應(yīng)當(dāng)使用下面的命令來禁用內(nèi)存映射:
EnableMMAP Off
對(duì)于掛載了NFS的文件夾,可以單獨(dú)指定禁用內(nèi)存映射:
EnableSendfile 指令
說明 使用操作系統(tǒng)內(nèi)核的sendfile支持來將文件發(fā)送到客戶端
語法 EnableSendfile On|Off
默認(rèn)值 EnableSendfile On
作用域 server config, virtual host, directory, .htaccess
覆蓋項(xiàng) FileInfo
狀態(tài) 核心(C)
模塊 core
兼容性 僅在 Apache 2.0.44 及以后的版本中可用
這個(gè)指令控制httpd是否可以使用操作系統(tǒng)內(nèi)核的sendfile支持來將文件發(fā)送到客戶端。默認(rèn)情況下,當(dāng)處理一個(gè)請(qǐng)求并不需要訪問文件內(nèi)部的數(shù)據(jù)時(shí)(比如發(fā)送一個(gè)靜態(tài)的文件內(nèi)容),如果操作系統(tǒng)支持,Apache將使用sendfile將文件內(nèi)容直接發(fā)送到客戶端而并不讀取文件。譯者注:Linux2.4/2.6內(nèi)核都支持。
這個(gè)sendfile機(jī)制避免了分開的讀和寫操作以及緩沖區(qū)分配,但是在一些平臺(tái)或者一些文件系統(tǒng)上,最好禁止這個(gè)特性來避免一些問題:
一些平臺(tái)可能會(huì)有編譯系統(tǒng)檢測(cè)不到的有缺陷的sendfile支持,特別是將在其他平臺(tái)上使用交叉編譯得到的二進(jìn)制文件運(yùn)行于當(dāng)前對(duì)sendfile支持有缺陷的平臺(tái)時(shí)。
在Linux上啟用IPv6時(shí),使用sendfile將會(huì)觸發(fā)某些網(wǎng)卡上的TCP校驗(yàn)和卸載bug。
當(dāng)Linux運(yùn)行在Itanium處理器上的時(shí)候,sendfile可能無法處理大于2GB的文件。
對(duì)于一個(gè)通過網(wǎng)絡(luò)掛載了NFS文件系統(tǒng)的DocumentRoot (比如:NFS或SMB),內(nèi)核可能無法可靠的通過自己的緩沖區(qū)服務(wù)于網(wǎng)絡(luò)文件。
如果出現(xiàn)以上情況,你應(yīng)當(dāng)禁用sendfile :
EnableSendfile Off
針對(duì)NFS或SMB,這個(gè)指令可以被針對(duì)目錄的設(shè)置覆蓋:
英文原版如圖:
報(bào)錯(cuò)
報(bào)錯(cuò)
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/163.html