过期域名预定抢注

用戶名  找回密碼
 免费注册

PHP函數file_get_contents的問題

  [複製鏈接]
發表於 2013-8-7 20:18:01 | 顯示全部樓層 |閱讀模式
PHP函數file_get_contents的函數如何設置設置網絡連接超時?
' s9 I: E" `2 Q* r( m6 C
; [+ ?9 e. k! k6 x  w
發表於 2013-8-7 20:55:20 | 顯示全部樓層
file_get_contents默認超時時間(秒)
6 f* ~, |# A; T' i& W( Cphp.ini中的default_socket_timeout設置,默認超時時間是default_socket_timeout = 603 S  U9 u1 V  J5 f/ w& f: L
$ T1 h( l1 J" Q
如果要修改超時時間,修改第3個參數即可4 q7 M4 S6 x4 O8 v. Q; f

7 k& m- N  v2 `- Y  v8 J8 a: |$opts = array(" F. o( ]9 h; h
  'http'=>array(
5 q* {8 a' k2 w    'method'=>"GET",
6 t$ g1 M, w+ P    'timeout'=>120,: S& p# j' P" `- ^; P
   )
$ l+ X% Y" d' b$ y0 Z);( I* c3 S4 [. O5 {

9 ^: I: @. K* g$context = stream_context_create($opts);- A0 F/ ?& M  t3 f* i0 h
, d9 b# s+ k. X1 M/ G4 f
$html =file_get_contents('http://www.example.com', false, $context);
4 ]% F" `, D5 ?5 f, [( [
回復 给力 爆菊

舉報

發表於 2013-8-7 20:57:09 | 顯示全部樓層
月光飛燕 發表於 2013-8-7 20:55 . B+ i2 o; n/ ^, R0 k
file_get_contents默認超時時間(秒)4 w& l, \  K4 U, H
php.ini中的default_socket_timeout設置,默認超時時間是default_soc ...
$ q6 I9 x/ m, P% n
直接set_time_limit(0);不是更方便嗎) ^6 K( Z3 Z, ~0 f6 s6 w2 ^
* r/ D9 r4 N; Y! b8 V  B. A! I$ ~

點評

两码事.......  發表於 2013-8-7 20:58
回復 给力 爆菊

舉報

發表於 2013-8-7 21:23:34 | 顯示全部樓層
adver 發表於 2013-8-7 20:57
7 F% z5 K$ b7 q" ~直接set_time_limit(0);不是更方便嗎
& b( y0 w$ h* R
set_time_limit是當前頁超時設置,與樓主說的沒有關聯+ C: D5 d+ Q$ J5 S
5 `! q: p* E* ]+ @
回復 给力 爆菊

舉報

 樓主| 發表於 2013-8-7 22:19:56 | 顯示全部樓層
月光飛燕 發表於 2013-8-7 21:23
! x; `" Y. R  `4 u7 }% Y+ N2 eset_time_limit是當前頁超時設置,與樓主說的沒有關聯

! _3 l# D4 B! R0 J如果用了default_socket_timeout,請求A頁面超時,可以接下去請教B頁面嗎?不讓程序停止。
/ Q( N, K( W- {' U
/ B/ e: g/ W% p6 u

評分

參與人數 1點點 +1 收起 理由
comcom + 1 我也遇到一样的问题

查看全部評分

回復 给力 爆菊

舉報

發表於 2013-8-7 22:56:21 | 顯示全部樓層
default_socket_timeout僅僅控制了file_get_contents0 k# x0 F5 \! ]- d8 R# S
如果這個超時,那麼當前執行的file_get_contents返回false
5 N) F  X3 x$ i) k3 O程序是繼續向下執行的
' K2 g9 o; C8 _- d1 ~+ h2 l  R" `" l
但是要看你本頁的超時時間是否大於file_get_contents的超時* [- K9 ?, B$ a! s) o6 A
本頁的超時時間使用set_time_limit進行設置,你可以設置成很大的值,比如0無限0 `5 D% O0 d( W; ^2 }  c. L
但是避免長時間執行造成內存溢出,最終導致服務器崩潰,你應該要設置一個+ m# o6 G8 G% Q; |; [. W
set_time_limit有限的值,比如120,360
% B' m2 @4 `) F6 k
( n& X- q  Q: U$ U* ]1 C" T/ j, [讓一個php頁面無限時運行是非常不好的,你應該使用cronjob間隔調用php頁面進行採集! G- X) O4 _# g6 G; b1 Q2 R* v1 |
這樣會非常穩定,不至於服務器崩潰
2 k# W- f  c: K, A1 d& `
回復 给力 爆菊

舉報

發表於 2013-8-7 23:03:39 | 顯示全部樓層
你是要採集吧6 l7 X# c6 B, w0 z* W6 K# z0 \
建議不要用file_get_contents,有時候會造成cpu飆升
$ L5 _# I6 Y6 G# d, P5 o- d) U建議用curl庫,不僅高效而且強大,
) R  D1 _2 c! I& h/ \# B$ W我一直用curl庫
. t8 U- J; N* [+ s
回復 给力 爆菊

舉報

發表於 2013-8-8 10:14:07 | 顯示全部樓層
用curl比file_get_contents效率要高; l! A" S* o+ [8 H& x
回復 给力 爆菊

舉報

發表於 2013-8-8 16:26:13 | 顯示全部樓層
$ j8 R$ ^$ T7 y! H' r0 l2 L$ ~

" I3 C3 |! D4 M% k4 _& B( |( A& `! T( g* y3 E& O3 ^/ V3 C0 a
....我權限不能短消息% o$ j$ k7 A0 N( c) k0 i
9 j0 [2 n+ ?! Q5 f6 |7 ?* |
我一般採集都是用定時任務方式,比如每分鐘採集兩條三條,以免頻率太高,被封。又可以不間斷運行。
$ V7 L3 Q# {% M7 Z6 O  f0 Y! w0 A, k你如果想通過設置set_time_limit來延長php運行時間,是不現實的。比如我vps,我用crontab設置採集程序一分鐘運行一次,第運行一次可以採集兩三條,一天也能採集好幾千條了
* H, @8 S) h& a* H- A8 Z3 z% M) T9 R! l* N
網絡連接錯誤,獲取內容為空,那就重試,你也可以讓它採集下一條網址,跳過當前網址,做個判斷就可以了啊. U- B2 l6 t2 A) Y3 G4 P/ L

" i% b. c: |5 z4 n6 z3 [$ y" E( j
6 l+ `5 e2 }4 L- ]2 l

評分

參與人數 2點點 +4 收起 理由
frankwng1985 + 1 只能给你加这么多了
月光飞燕 + 3

查看全部評分

回復 给力 爆菊

舉報

 樓主| 發表於 2013-8-14 15:35:45 | 顯示全部樓層
mulao 發表於 2013-8-8 16:26 % O5 H$ P. H) n- Y; c1 Z
....我權限不能短消息
* @- P* Y' x4 f, h$ v* L# Z8 ?
) G% y  n  F/ Z. T8 P: I我一般採集都是用定時任務方式,比如每分鐘採集兩條三條,以免頻率太高,被封。 ...

: g, x6 t9 {3 W. J如果下個1分鐘調用的時候程序還在運行,怎麼處理?系統會自動處理?6 g/ X1 u8 h7 j; [/ _# c, U

( `( }( Q) N4 [7 L+ E- I; ~+ e1 t8 a
回復 给力 爆菊

舉報

您需要登錄後才可以回帖 登錄 | 免费注册

本版積分規則

过期高净值品牌域名预定抢注

點基跨境 數位編輯創業論壇

GMT+8, 2025-7-16 02:20

By DZ X3.5

小黑屋

快速回復 返回頂部 返回列表