过期域名预定抢注

 找回密碼
 免费注册

PHP函數file_get_contents的問題

  [複製鏈接]
發表於 2013-8-7 20:18:01 | 顯示全部樓層 |閱讀模式
PHP函數file_get_contents的函數如何設置設置網絡連接超時?
0 E# g& r. `  q7 Y: o! {* ?8 s
發表於 2013-8-7 20:55:20 | 顯示全部樓層
file_get_contents默認超時時間(秒)- L% n5 F8 Z( K3 l
php.ini中的default_socket_timeout設置,默認超時時間是default_socket_timeout = 60' {2 E6 X" a" ^! C' M* [

* Z8 K" L" \! C. n如果要修改超時時間,修改第3個參數即可* B2 J, W5 _! g" ]) |

9 {4 Y+ M6 t' h3 N$ l, r/ O- ~5 M$ w$opts = array(! L+ q  F% R9 |2 Q  |  m  q( n" \+ q
  'http'=>array(
% ^. Y- Z7 o: f. Z6 n2 `! `) G    'method'=>"GET",
6 j0 \4 `% C3 P- h( K+ V4 y5 B    'timeout'=>120,$ R7 g& R$ ?; c- d
   )+ _$ M% N4 k* \1 S& Q
);
& b. ]9 Z% p! H6 ?) }3 ~; o, K" d0 C" r6 i/ Q
$context = stream_context_create($opts);# p6 S2 q/ k5 H) ^0 o, B
$ M2 M1 Z' g# s6 v
$html =file_get_contents('http://www.example.com', false, $context);
! k* n3 g* D1 F/ l# T, k8 g; z! Z# s
回復 给力 爆菊

使用道具 舉報

發表於 2013-8-7 20:57:09 | 顯示全部樓層
月光飛燕 發表於 2013-8-7 20:55
0 y" [2 ?2 z6 ^% B0 P3 f3 n5 y6 vfile_get_contents默認超時時間(秒)
( V2 N( n: V, N1 o1 ~: \php.ini中的default_socket_timeout設置,默認超時時間是default_soc ...
' W. T2 g8 j$ v+ \$ D4 g3 q1 e- }1 g
直接set_time_limit(0);不是更方便嗎
! J4 K: j/ l8 d! O! p7 R4 X% D1 s; o3 c# P- a3 z- s$ c4 |- u

點評

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

使用道具 舉報

發表於 2013-8-7 21:23:34 | 顯示全部樓層
adver 發表於 2013-8-7 20:57 , c0 a  u2 u9 T' r8 t" V1 p& A
直接set_time_limit(0);不是更方便嗎
$ f, R4 q, l0 [, Q# V: N& @
set_time_limit是當前頁超時設置,與樓主說的沒有關聯% q& R  K, q6 p3 ?; b/ ~% s
6 r+ s% y- d$ K7 p# M- j: x
回復 给力 爆菊

使用道具 舉報

 樓主| 發表於 2013-8-7 22:19:56 | 顯示全部樓層
月光飛燕 發表於 2013-8-7 21:23
* W) {  j( Y# V) [/ G2 T8 X4 wset_time_limit是當前頁超時設置,與樓主說的沒有關聯
& V/ I( x: G/ u( a; _. R: d
如果用了default_socket_timeout,請求A頁面超時,可以接下去請教B頁面嗎?不讓程序停止。
9 x( c) V' M; X& L. J* q  g( L" t

評分

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

查看全部評分

回復 给力 爆菊

使用道具 舉報

發表於 2013-8-7 22:56:21 | 顯示全部樓層
default_socket_timeout僅僅控制了file_get_contents( }% W) K* V' z
如果這個超時,那麼當前執行的file_get_contents返回false
- m  u5 u9 V. _4 |9 O* t程序是繼續向下執行的
& c4 C: c% |9 l& t+ _+ ~3 i
  y. A9 q3 \8 O% [& U* _5 y( ^$ U但是要看你本頁的超時時間是否大於file_get_contents的超時4 t, i# _1 d6 C6 I9 N' Q
本頁的超時時間使用set_time_limit進行設置,你可以設置成很大的值,比如0無限; G! ]1 t3 `* F2 m0 e
但是避免長時間執行造成內存溢出,最終導致服務器崩潰,你應該要設置一個
& k0 C5 I0 o8 m: N9 s. {2 M! Jset_time_limit有限的值,比如120,360
) u5 D6 U- o( w: Y  j* K
# l% X1 a3 M7 o% r! n" o2 X& h讓一個php頁面無限時運行是非常不好的,你應該使用cronjob間隔調用php頁面進行採集
" U. {# d) E2 O4 U7 U這樣會非常穩定,不至於服務器崩潰
: M8 D. O. M, ~: r
回復 给力 爆菊

使用道具 舉報

發表於 2013-8-7 23:03:39 | 顯示全部樓層
你是要採集吧1 m9 F! ~3 B: T6 n$ F1 ~5 q/ L
建議不要用file_get_contents,有時候會造成cpu飆升
' I% I: J/ z0 M6 j' H& g建議用curl庫,不僅高效而且強大,
/ h; W. `& i4 k* x/ {& ~8 C2 ?我一直用curl庫
' \" B: l, _; B
回復 给力 爆菊

使用道具 舉報

發表於 2013-8-8 10:14:07 | 顯示全部樓層
用curl比file_get_contents效率要高
/ s* }# L  @) L; E1 p
回復 给力 爆菊

使用道具 舉報

發表於 2013-8-8 16:26:13 | 顯示全部樓層
, e( J5 _0 G, j

) W$ t/ H4 |9 d) o( Y6 t: c8 [( |- s6 t) F# c/ [' Z$ ^
....我權限不能短消息* J2 Y/ m/ A7 ~( k( t/ Q9 c/ [
( `8 E! o6 {9 A  C: l  c' s
我一般採集都是用定時任務方式,比如每分鐘採集兩條三條,以免頻率太高,被封。又可以不間斷運行。. I1 ^0 Y4 O. o
你如果想通過設置set_time_limit來延長php運行時間,是不現實的。比如我vps,我用crontab設置採集程序一分鐘運行一次,第運行一次可以採集兩三條,一天也能採集好幾千條了
9 f& v/ t' e# t# ?6 S7 O0 M: {  Z+ H  R# e3 K! T' l
網絡連接錯誤,獲取內容為空,那就重試,你也可以讓它採集下一條網址,跳過當前網址,做個判斷就可以了啊, B$ Q$ N2 U& b( h! E

' b4 B6 g/ S. u& \8 S
* P4 p' |( l5 D+ B7 g7 S

評分

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

查看全部評分

回復 给力 爆菊

使用道具 舉報

 樓主| 發表於 2013-8-14 15:35:45 | 顯示全部樓層
mulao 發表於 2013-8-8 16:26
: i5 P# V% v4 o4 f: o....我權限不能短消息
# _' i& i; y' v6 g5 S$ [3 I! G% ^
我一般採集都是用定時任務方式,比如每分鐘採集兩條三條,以免頻率太高,被封。 ...
) \6 ]! e: K9 ]" e0 J+ W; {( w
如果下個1分鐘調用的時候程序還在運行,怎麼處理?系統會自動處理?: m. }% A! v% j, R; F

: Z8 S& p' w+ A/ P5 B
回復 给力 爆菊

使用道具 舉報

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

本版積分規則

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

4um點基跨境網編創業社區

GMT+8, 2024-11-23 21:57

By DZ X3.5

小黑屋

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