过期域名预定抢注

 找回密碼
 免费注册

PHP函數file_get_contents的問題

  [複製鏈接]
發表於 2013-8-7 20:18:01 | 顯示全部樓層 |閱讀模式
PHP函數file_get_contents的函數如何設置設置網絡連接超時?
& [' ^1 T3 [$ {- x% a# E+ H' @! u3 W, j" O4 h( t
發表於 2013-8-7 20:55:20 | 顯示全部樓層
file_get_contents默認超時時間(秒)7 x; P4 k! Y0 i8 `( Y. w+ L
php.ini中的default_socket_timeout設置,默認超時時間是default_socket_timeout = 60
: B4 Q. {* |) ]  L. T. S( O# s; B9 R( W. g6 |- N
如果要修改超時時間,修改第3個參數即可( i" |8 |3 o2 q5 h

; a2 m  {! i, ~7 p$opts = array(
" c& H8 I& k6 g4 u% k( _2 [  'http'=>array(0 @/ y/ Y# \8 P+ H
    'method'=>"GET",
0 ?4 W4 b1 ^" N5 W7 j  V    'timeout'=>120,
! s3 U2 t& U: s8 o( d6 J0 `5 f  N   )3 D/ g" v5 O* w3 |' {$ c1 U
);) d! x+ c8 w+ }, `; O" |' U: m
9 `7 _7 Y1 W" Y' b6 k  p
$context = stream_context_create($opts);# |/ g' b, q- U" Z" d; c/ f1 D- h
8 f0 B! i) p" `5 ^  q: N) m* |3 w
$html =file_get_contents('http://www.example.com', false, $context);
# [$ O, ?# H+ \7 K9 j: p
回復 给力 爆菊

使用道具 舉報

發表於 2013-8-7 20:57:09 | 顯示全部樓層
月光飛燕 發表於 2013-8-7 20:55 4 D+ `1 a5 F) _7 R0 z
file_get_contents默認超時時間(秒)
5 B+ {! x% b, p, I' ~1 p$ V- {php.ini中的default_socket_timeout設置,默認超時時間是default_soc ...

/ S/ a' `2 a3 u  B* X+ h" a6 V9 ^直接set_time_limit(0);不是更方便嗎
+ g2 O  M* @- V8 e) k: h2 U! ~- i4 a* A- v2 ?3 O

點評

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

使用道具 舉報

發表於 2013-8-7 21:23:34 | 顯示全部樓層
adver 發表於 2013-8-7 20:57
4 t! ^# @* @# v  U8 Q( H$ @5 J直接set_time_limit(0);不是更方便嗎
# M1 k; G& ?; w# s  _7 c& \2 {6 [
set_time_limit是當前頁超時設置,與樓主說的沒有關聯. q8 {$ \8 M4 _5 G1 h5 f
# L1 t4 ^' v( ~% W
回復 给力 爆菊

使用道具 舉報

 樓主| 發表於 2013-8-7 22:19:56 | 顯示全部樓層
月光飛燕 發表於 2013-8-7 21:23 ( s' U( H( M9 p
set_time_limit是當前頁超時設置,與樓主說的沒有關聯

( i2 V4 Z) C! f1 `如果用了default_socket_timeout,請求A頁面超時,可以接下去請教B頁面嗎?不讓程序停止。) f, ?5 W) r) T( S

% I. i* j  D) f6 ?9 c

評分

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

查看全部評分

回復 给力 爆菊

使用道具 舉報

發表於 2013-8-7 22:56:21 | 顯示全部樓層
default_socket_timeout僅僅控制了file_get_contents( Q/ b' q  w* y) M$ w
如果這個超時,那麼當前執行的file_get_contents返回false6 l1 l; K, w4 E( Z. Z! e: a: S& X% u
程序是繼續向下執行的9 y3 O( h2 `2 b7 ?
2 a* t+ P0 h$ {) `" _8 @# a
但是要看你本頁的超時時間是否大於file_get_contents的超時6 G7 n8 }" v! I4 ]
本頁的超時時間使用set_time_limit進行設置,你可以設置成很大的值,比如0無限
' I$ _% d6 [* c0 {: L* r0 f% a但是避免長時間執行造成內存溢出,最終導致服務器崩潰,你應該要設置一個/ ?) S) |: A; {( o& u) H
set_time_limit有限的值,比如120,3605 [" |) J0 p* p; p

( \' V5 C3 X2 N7 [5 Y讓一個php頁面無限時運行是非常不好的,你應該使用cronjob間隔調用php頁面進行採集
& ~+ @- e; @1 U4 S/ C這樣會非常穩定,不至於服務器崩潰
( m" D+ C1 o: A5 f4 h* z' w
回復 给力 爆菊

使用道具 舉報

發表於 2013-8-7 23:03:39 | 顯示全部樓層
你是要採集吧- A' V5 f7 c. m* V& a! x3 m2 k' i
建議不要用file_get_contents,有時候會造成cpu飆升- q; b, M/ c2 i) v5 S
建議用curl庫,不僅高效而且強大,
! R" E3 u2 t( y0 [7 V我一直用curl庫
( A" F! g2 m, Z' n
回復 给力 爆菊

使用道具 舉報

發表於 2013-8-8 10:14:07 | 顯示全部樓層
用curl比file_get_contents效率要高
9 ?& V: a/ c( Y7 L6 @7 u
回復 给力 爆菊

使用道具 舉報

發表於 2013-8-8 16:26:13 | 顯示全部樓層
" e4 n* B4 |2 S+ j9 P* {

2 p8 j% e4 T$ \
5 e# x8 o' v! J8 _8 L  g% b....我權限不能短消息# g% K% L1 A: I7 b6 P

$ J8 h2 S+ W( c我一般採集都是用定時任務方式,比如每分鐘採集兩條三條,以免頻率太高,被封。又可以不間斷運行。- V! n" l: `; n1 S
你如果想通過設置set_time_limit來延長php運行時間,是不現實的。比如我vps,我用crontab設置採集程序一分鐘運行一次,第運行一次可以採集兩三條,一天也能採集好幾千條了$ N3 G$ k7 r- B7 r! m

# J) P" t7 O$ [5 M+ `0 w網絡連接錯誤,獲取內容為空,那就重試,你也可以讓它採集下一條網址,跳過當前網址,做個判斷就可以了啊
$ `, Z7 P4 i; @$ W) b1 n' |0 m& G2 }
4 C: b8 a, R1 w8 Z

評分

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

查看全部評分

回復 给力 爆菊

使用道具 舉報

 樓主| 發表於 2013-8-14 15:35:45 | 顯示全部樓層
mulao 發表於 2013-8-8 16:26
. k  b* M9 x+ ]7 R9 h# u: [4 n....我權限不能短消息
& \7 h2 P9 I; W; V5 R; R) E0 G) e
我一般採集都是用定時任務方式,比如每分鐘採集兩條三條,以免頻率太高,被封。 ...
; P% I$ O" Z1 w; H4 c
如果下個1分鐘調用的時候程序還在運行,怎麼處理?系統會自動處理?, L% C+ a6 o. b: ^8 I. L

* }( J3 A9 [9 f3 h0 q
回復 给力 爆菊

使用道具 舉報

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

本版積分規則

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

GMT+8, 2024-11-24 01:27

By DZ X3.5

小黑屋

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