过期域名预定抢注

用戶名  找回密碼
 免费注册

PHP函數file_get_contents的問題

  [複製鏈接]
發表於 2013-8-7 20:18:01 | 顯示全部樓層 |閱讀模式
PHP函數file_get_contents的函數如何設置設置網絡連接超時?: q! y3 c1 x2 S% Y

& `% y: A* T& w3 c6 x& S3 q+ ^
發表於 2013-8-7 20:55:20 | 顯示全部樓層
file_get_contents默認超時時間(秒)
/ W2 {& t  [" E3 I9 wphp.ini中的default_socket_timeout設置,默認超時時間是default_socket_timeout = 60
9 a: f; {9 o0 R/ |- s3 _; _. N6 j+ @$ @* G
如果要修改超時時間,修改第3個參數即可4 t1 Z; W$ K6 n. p' \' v) t

6 ^3 S: ]3 X, f7 f: s+ r7 U6 S8 Z; Z$opts = array(; {" A5 k1 {: ]  `/ m1 K
  'http'=>array(
2 L2 R  _. k7 w9 f, v    'method'=>"GET",
! P- {$ U9 X7 d8 t4 I" C    'timeout'=>120,
( w4 k2 `, T& L0 S. G5 J   )
: K4 k  _, K! W# \$ z; U8 K* r( q) B);
: C' b% c% z" O" C! j3 Z. q: k) n1 d# j
' u) k4 I) U0 ~3 _8 X* k0 P0 |$context = stream_context_create($opts);
4 k% I3 y0 `8 X
" j7 V% ^2 T4 L. ^$html =file_get_contents('http://www.example.com', false, $context);
, Y; X9 a2 g8 a9 H
回復 给力 爆菊

舉報

發表於 2013-8-7 20:57:09 | 顯示全部樓層
月光飛燕 發表於 2013-8-7 20:55 0 p; I3 l2 [) C( g( F" h
file_get_contents默認超時時間(秒)
4 M% p& S# D# Z: `3 o; z& k1 vphp.ini中的default_socket_timeout設置,默認超時時間是default_soc ...

: D" u) f" I! l* {$ q( J5 B直接set_time_limit(0);不是更方便嗎
! z1 p1 |: X: q& w3 m) Z. Z* d, S% E: W: `4 ]( c5 T5 D

點評

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

舉報

發表於 2013-8-7 21:23:34 | 顯示全部樓層
adver 發表於 2013-8-7 20:57 : W3 ?! z, j$ z& T" o) h
直接set_time_limit(0);不是更方便嗎

. U6 U- a$ p- L; vset_time_limit是當前頁超時設置,與樓主說的沒有關聯
' _% i( M+ R& Y% h( o/ i; ^2 V' b9 k% b  g0 O
回復 给力 爆菊

舉報

 樓主| 發表於 2013-8-7 22:19:56 | 顯示全部樓層
月光飛燕 發表於 2013-8-7 21:23 : s! g- N/ P& _# B: D( S
set_time_limit是當前頁超時設置,與樓主說的沒有關聯

" q, J5 @5 L& q; Z/ A+ I+ v如果用了default_socket_timeout,請求A頁面超時,可以接下去請教B頁面嗎?不讓程序停止。
  p" S, ?+ e; F1 P, b; t. K: q/ [1 \3 ?& j. J

評分

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

查看全部評分

回復 给力 爆菊

舉報

發表於 2013-8-7 22:56:21 | 顯示全部樓層
default_socket_timeout僅僅控制了file_get_contents& ^" u2 l0 {/ o0 ^9 C7 _! P
如果這個超時,那麼當前執行的file_get_contents返回false8 z! W6 W6 u( L2 ~
程序是繼續向下執行的7 X' p) u& C$ B: v; x5 z
( m7 h  L1 w8 K
但是要看你本頁的超時時間是否大於file_get_contents的超時0 u  z( @( x0 q9 Y- u
本頁的超時時間使用set_time_limit進行設置,你可以設置成很大的值,比如0無限8 f2 H, K9 @, O! E( }% A
但是避免長時間執行造成內存溢出,最終導致服務器崩潰,你應該要設置一個
: `# L/ c# l4 c1 Hset_time_limit有限的值,比如120,360  P% j; J/ }5 h! I& b

: R0 [6 q- m/ V讓一個php頁面無限時運行是非常不好的,你應該使用cronjob間隔調用php頁面進行採集
6 Z6 G/ w) a1 d* U1 e這樣會非常穩定,不至於服務器崩潰
8 a1 V, ~, ^6 z9 _
回復 给力 爆菊

舉報

發表於 2013-8-7 23:03:39 | 顯示全部樓層
你是要採集吧/ F& c' h! ~% U3 c: ^. f
建議不要用file_get_contents,有時候會造成cpu飆升
& v4 o+ l7 w3 e! }5 [( g2 F) E建議用curl庫,不僅高效而且強大,6 K/ ?8 V  z" }, G$ K! O
我一直用curl庫
$ `4 b8 p/ f$ a+ Q4 g8 G3 F* A! C
回復 给力 爆菊

舉報

發表於 2013-8-8 10:14:07 | 顯示全部樓層
用curl比file_get_contents效率要高) B2 Q# Z0 f- V; w9 f/ ~% q
回復 给力 爆菊

舉報

發表於 2013-8-8 16:26:13 | 顯示全部樓層
3 T7 m" \* s# B0 r. J% |6 r

+ V2 d! |2 r! ]. v$ Q! c! q# r- d% f* K6 i5 `
....我權限不能短消息6 [& v8 u  S4 o; @+ Z
+ a5 |" \6 `9 \# [) c
我一般採集都是用定時任務方式,比如每分鐘採集兩條三條,以免頻率太高,被封。又可以不間斷運行。
4 P% {% R/ ]$ E$ p2 G你如果想通過設置set_time_limit來延長php運行時間,是不現實的。比如我vps,我用crontab設置採集程序一分鐘運行一次,第運行一次可以採集兩三條,一天也能採集好幾千條了; c8 d6 [4 C; l7 \) L

7 s2 z) N6 ]/ N& P: V7 D. ~  Z網絡連接錯誤,獲取內容為空,那就重試,你也可以讓它採集下一條網址,跳過當前網址,做個判斷就可以了啊
$ s3 D& `# ~2 _1 o& ~' w5 O' v7 q( }  y& g, a$ R: `  c5 n
( L7 h7 ]" U# b1 g* m

評分

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

查看全部評分

回復 给力 爆菊

舉報

 樓主| 發表於 2013-8-14 15:35:45 | 顯示全部樓層
mulao 發表於 2013-8-8 16:26
$ i- C" h8 b! L; u$ d....我權限不能短消息" J0 d+ @3 @- i" f# \0 u

, i2 f& n  H% M5 W- p7 `8 ]我一般採集都是用定時任務方式,比如每分鐘採集兩條三條,以免頻率太高,被封。 ...
, t# @7 @7 O& M5 x9 Q9 Y
如果下個1分鐘調用的時候程序還在運行,怎麼處理?系統會自動處理?
& V- h6 f' I3 t$ I( A
) r1 D( j$ i+ M8 {
回復 给力 爆菊

舉報

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

本版積分規則

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

GMT+8, 2025-7-20 19:51

By DZ X3.5

小黑屋

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