过期域名预定抢注

用戶名  找回密碼
 免费注册

PHP函數file_get_contents的問題

  [複製鏈接]
發表於 2013-8-7 20:18:01 | 顯示全部樓層 |閱讀模式
PHP函數file_get_contents的函數如何設置設置網絡連接超時?: I' _# u5 u; A6 c1 t# v( S
! f; x9 |1 s' {- o
發表於 2013-8-7 20:55:20 | 顯示全部樓層
file_get_contents默認超時時間(秒)  u6 Z( h# W6 P: i1 f, x
php.ini中的default_socket_timeout設置,默認超時時間是default_socket_timeout = 60* H9 M7 e  ?) q6 L- O0 U) U

9 S% ]; R& y$ K) N. b& L, y& t如果要修改超時時間,修改第3個參數即可. z$ I1 V  O! C2 M/ W. l
1 @, x; |  @- \2 @
$opts = array(3 d* ^1 R" f' y6 z/ x
  'http'=>array(; \7 B( J) M& Y
    'method'=>"GET",3 O8 X5 j1 N' C- X0 i
    'timeout'=>120,
& W2 G/ H6 `  I   )# i- {! T* c% J' L- ]) M5 }
);
1 w# }, ]: Z6 y  N* m3 }9 o1 l- i/ c
4 Q8 D( h  x4 B$context = stream_context_create($opts);+ x2 @4 I# Q& c9 e7 y

5 V7 r) }6 @3 Z, g( L; M$html =file_get_contents('http://www.example.com', false, $context);
' z; U4 r  G; p5 P9 _
回復 给力 爆菊

舉報

發表於 2013-8-7 20:57:09 | 顯示全部樓層
月光飛燕 發表於 2013-8-7 20:55
7 e+ g3 d, T; m* H) M9 y8 ufile_get_contents默認超時時間(秒)
9 O3 ?* W, T1 \* \: [4 M% iphp.ini中的default_socket_timeout設置,默認超時時間是default_soc ...

3 B+ p9 c7 |/ p9 ?8 G直接set_time_limit(0);不是更方便嗎% _' G: S8 }) ?! {4 P

" s' Z* q' ^3 j) j  j. f8 p

點評

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

舉報

發表於 2013-8-7 21:23:34 | 顯示全部樓層
adver 發表於 2013-8-7 20:57 & n, a! h4 G/ g  Y9 }
直接set_time_limit(0);不是更方便嗎
- e) T7 o% }  j# \
set_time_limit是當前頁超時設置,與樓主說的沒有關聯
* T* R! q1 k  G: [/ N& ~# h
2 g+ m" ]# d7 r5 O0 ]
回復 给力 爆菊

舉報

 樓主| 發表於 2013-8-7 22:19:56 | 顯示全部樓層
月光飛燕 發表於 2013-8-7 21:23
. c" d" s0 z, x- j$ @; Eset_time_limit是當前頁超時設置,與樓主說的沒有關聯
- T4 A* g0 n4 v+ J( ]
如果用了default_socket_timeout,請求A頁面超時,可以接下去請教B頁面嗎?不讓程序停止。
5 V2 h; c. X) C$ ?! @2 J7 b% d1 L/ I; y7 `: Y) O9 E  ^4 l* p

評分

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

查看全部評分

回復 给力 爆菊

舉報

發表於 2013-8-7 22:56:21 | 顯示全部樓層
default_socket_timeout僅僅控制了file_get_contents
9 s* J9 c6 s5 p0 k% \4 Z如果這個超時,那麼當前執行的file_get_contents返回false( d2 y8 Q7 X3 f) V- z  G
程序是繼續向下執行的
8 ^7 {" q# l3 s) S0 R; u4 F2 o+ j: J
但是要看你本頁的超時時間是否大於file_get_contents的超時
2 J; }' [# l$ V0 t( e! T. w  B" r本頁的超時時間使用set_time_limit進行設置,你可以設置成很大的值,比如0無限
) F' {  z4 C  V4 ^$ j但是避免長時間執行造成內存溢出,最終導致服務器崩潰,你應該要設置一個% F9 \; s! t+ L3 n+ M
set_time_limit有限的值,比如120,360
/ T, g% V+ W, V* x( R7 \9 {; R& O; {6 N
讓一個php頁面無限時運行是非常不好的,你應該使用cronjob間隔調用php頁面進行採集5 m& j' Y; \; m' a* Z6 M
這樣會非常穩定,不至於服務器崩潰% p' D9 j" g. b3 i
回復 给力 爆菊

舉報

發表於 2013-8-7 23:03:39 | 顯示全部樓層
你是要採集吧
4 H: V: A& o( n建議不要用file_get_contents,有時候會造成cpu飆升! `" Y# M+ b9 u( U% t  F9 i
建議用curl庫,不僅高效而且強大,
$ e+ n( u6 k, c! i0 F5 `4 D( |+ ^我一直用curl庫  D4 g+ Y/ i: c9 Q
回復 给力 爆菊

舉報

發表於 2013-8-8 10:14:07 | 顯示全部樓層
用curl比file_get_contents效率要高
0 [* b8 g& |% d0 h+ c
回復 给力 爆菊

舉報

發表於 2013-8-8 16:26:13 | 顯示全部樓層
5 z% E$ r& V( N4 @7 _' E. w& x  w

7 v2 C" o- o" k1 |+ `% u, |' B& Y- B7 T
....我權限不能短消息
) T& M$ e+ ~: R9 ]3 u: R9 s! j' j# f7 O) d- e2 B5 V, Y3 c
我一般採集都是用定時任務方式,比如每分鐘採集兩條三條,以免頻率太高,被封。又可以不間斷運行。
# c; c0 K1 m4 e( p8 Q你如果想通過設置set_time_limit來延長php運行時間,是不現實的。比如我vps,我用crontab設置採集程序一分鐘運行一次,第運行一次可以採集兩三條,一天也能採集好幾千條了
/ l& }% B0 b( d; C
3 {( d2 G5 L- s/ V/ [網絡連接錯誤,獲取內容為空,那就重試,你也可以讓它採集下一條網址,跳過當前網址,做個判斷就可以了啊
( e* C+ C1 f2 b  i: p, E" k5 R
& h! U+ k! n: Q; |/ P
5 v8 r( H' d% n4 O& Q# c" b

評分

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

查看全部評分

回復 给力 爆菊

舉報

 樓主| 發表於 2013-8-14 15:35:45 | 顯示全部樓層
mulao 發表於 2013-8-8 16:26 ) P& A2 D* T) K, I8 L1 P$ T# Q
....我權限不能短消息
) D2 t% O# }0 v! k5 F) C' @' Q1 f. o: e8 O) N% f* m( M
我一般採集都是用定時任務方式,比如每分鐘採集兩條三條,以免頻率太高,被封。 ...

( U; }. W, W4 k. @! _  j如果下個1分鐘調用的時候程序還在運行,怎麼處理?系統會自動處理?7 D" @' a* x# P+ ~! m0 d( ^
- ?: N6 }1 ?% `" [* B' X- H! p- m
回復 给力 爆菊

舉報

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

本版積分規則

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

GMT+8, 2025-8-13 15:22

By DZ X3.5

小黑屋

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