过期域名预定抢注

用戶名  找回密碼
 免费注册

PHP函數file_get_contents的問題

  [複製鏈接]
發表於 2013-8-7 20:18:01 | 顯示全部樓層 |閱讀模式
PHP函數file_get_contents的函數如何設置設置網絡連接超時?
+ ^! o3 r) q2 r2 j/ ~' V  x  B1 d: @: i: t, ?+ c. o
發表於 2013-8-7 20:55:20 | 顯示全部樓層
file_get_contents默認超時時間(秒)
3 j# |- F- E3 V' D6 d  @php.ini中的default_socket_timeout設置,默認超時時間是default_socket_timeout = 60
4 X5 y0 b7 B/ }
6 g; e' }+ o( j如果要修改超時時間,修改第3個參數即可0 d7 R2 r" v9 S1 `

- i' |5 V' g9 B' D3 Y( Y5 o( Y$opts = array(
6 w$ X0 x' f2 z+ k6 o# S2 q  'http'=>array(
$ H: h3 D! ~$ h1 r0 T: i; e    'method'=>"GET",% [5 h. o" f) k4 F8 g
    'timeout'=>120,
6 Y& H) x: ^* K* ?* @   )
' o) h( h7 C) s1 W, t. s);6 D! o9 ]! F7 v/ D8 A+ F% F. I5 u

7 i) D5 v2 d7 h8 \3 b$context = stream_context_create($opts);
! \6 _8 Q, P, n" u0 i4 l& `% P" h& x) e# C  o
$html =file_get_contents('http://www.example.com', false, $context);
/ @: `" ]8 i! v2 V% j; Y$ `# V0 i
回復 给力 爆菊

舉報

發表於 2013-8-7 20:57:09 | 顯示全部樓層
月光飛燕 發表於 2013-8-7 20:55 . h/ P9 V3 a$ H" u& a  S
file_get_contents默認超時時間(秒)$ ?. e! r) Y3 ^' S: r1 T, Z
php.ini中的default_socket_timeout設置,默認超時時間是default_soc ...
( i9 H* i9 C& G/ A3 V8 l5 C; }! d
直接set_time_limit(0);不是更方便嗎, V) y- ~$ @2 I

; v- @) H7 V- z% n, m2 D' m+ Q* C

點評

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

舉報

發表於 2013-8-7 21:23:34 | 顯示全部樓層
adver 發表於 2013-8-7 20:57
$ |1 N" P* P1 Y( `4 ?! s" V8 A4 C% c直接set_time_limit(0);不是更方便嗎

+ F( Z* w# l, i' F3 v0 j& uset_time_limit是當前頁超時設置,與樓主說的沒有關聯% S: y/ y( V3 u

' \  n: N0 d7 |5 {
回復 给力 爆菊

舉報

 樓主| 發表於 2013-8-7 22:19:56 | 顯示全部樓層
月光飛燕 發表於 2013-8-7 21:23 % Y# s" K" z" ~# H; y( M2 b
set_time_limit是當前頁超時設置,與樓主說的沒有關聯

, N1 W2 h  z' n' }: Y  i) d如果用了default_socket_timeout,請求A頁面超時,可以接下去請教B頁面嗎?不讓程序停止。
0 x: o! [$ I/ ~/ w- }7 \/ R
/ L0 g/ l& M" t, w" z8 w: L5 F

評分

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

查看全部評分

回復 给力 爆菊

舉報

發表於 2013-8-7 22:56:21 | 顯示全部樓層
default_socket_timeout僅僅控制了file_get_contents
' y& b5 v( H) g如果這個超時,那麼當前執行的file_get_contents返回false
/ A: r2 n* Y  F" |# L程序是繼續向下執行的1 e8 s* S3 _# L  H* `9 Z

+ A, p9 r0 d0 R/ e$ s$ Z4 P4 [但是要看你本頁的超時時間是否大於file_get_contents的超時
9 f: c$ R; ?4 E, ]本頁的超時時間使用set_time_limit進行設置,你可以設置成很大的值,比如0無限
. Q+ \* W/ B; @8 o8 g但是避免長時間執行造成內存溢出,最終導致服務器崩潰,你應該要設置一個  H: I. ]) m8 Z+ r: Q" ?
set_time_limit有限的值,比如120,360/ E4 A) Q0 V2 s8 d% u, ~0 K3 y

& V. p' B4 q' Z. A9 ]% k" m讓一個php頁面無限時運行是非常不好的,你應該使用cronjob間隔調用php頁面進行採集- ~$ ^# N, [! M* a- b2 r; J6 a' x
這樣會非常穩定,不至於服務器崩潰
0 R3 m( [5 ]; j8 V  Z8 t) U
回復 给力 爆菊

舉報

發表於 2013-8-7 23:03:39 | 顯示全部樓層
你是要採集吧$ I; h8 z* z: u, U8 y
建議不要用file_get_contents,有時候會造成cpu飆升
1 C; I5 m4 W* G, P, i建議用curl庫,不僅高效而且強大,2 e" F4 @! t. |. {
我一直用curl庫
) @2 E; E' |2 M$ w
回復 给力 爆菊

舉報

發表於 2013-8-8 10:14:07 | 顯示全部樓層
用curl比file_get_contents效率要高1 C2 [- N! {7 j3 m8 _& E1 m3 x
回復 给力 爆菊

舉報

發表於 2013-8-8 16:26:13 | 顯示全部樓層
1 i" h9 y0 |0 H# J
3 y$ S1 X) ?) d0 q0 o4 k
* h1 H; o, T' s8 n/ |2 t4 Y
....我權限不能短消息- a, c( j% }1 L: t2 g4 d
3 L7 A% k. }$ [% _+ M
我一般採集都是用定時任務方式,比如每分鐘採集兩條三條,以免頻率太高,被封。又可以不間斷運行。
$ P3 \- H5 W) j你如果想通過設置set_time_limit來延長php運行時間,是不現實的。比如我vps,我用crontab設置採集程序一分鐘運行一次,第運行一次可以採集兩三條,一天也能採集好幾千條了7 j- O; y  s; Y4 h* q/ q, L

8 N  T6 O# d- x5 G" }網絡連接錯誤,獲取內容為空,那就重試,你也可以讓它採集下一條網址,跳過當前網址,做個判斷就可以了啊
' H$ z5 r# Q& `* M8 P' I3 l4 L1 W: K& K

2 f) X8 S; \8 G4 t

評分

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

查看全部評分

回復 给力 爆菊

舉報

 樓主| 發表於 2013-8-14 15:35:45 | 顯示全部樓層
mulao 發表於 2013-8-8 16:26 2 q1 s  k' `  R4 S, Y+ F2 T
....我權限不能短消息5 F$ J* S4 K& a: n
  _+ H( |  ]% Z/ L: ?5 v9 Y
我一般採集都是用定時任務方式,比如每分鐘採集兩條三條,以免頻率太高,被封。 ...
+ }$ Y: V/ ^4 s5 L* ~4 N
如果下個1分鐘調用的時候程序還在運行,怎麼處理?系統會自動處理?
. p& }" ~( r5 T" ^- A) ]0 ]" q! `4 p7 N# |0 l4 k2 P5 T
回復 给力 爆菊

舉報

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

本版積分規則

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

GMT+8, 2025-8-7 12:47

By DZ X3.5

小黑屋

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