过期域名预定抢注

用戶名  找回密碼
 免费注册

PHP函數file_get_contents的問題

  [複製鏈接]
發表於 2013-8-7 20:18:01 | 顯示全部樓層 |閱讀模式
PHP函數file_get_contents的函數如何設置設置網絡連接超時?8 m# r/ H' K) w4 u5 n# n

9 N- b+ f$ o" T- ~5 E+ r) K1 n( k
發表於 2013-8-7 20:55:20 | 顯示全部樓層
file_get_contents默認超時時間(秒)
7 U2 r9 j& m5 q+ P5 sphp.ini中的default_socket_timeout設置,默認超時時間是default_socket_timeout = 601 [. \, y' p7 E
! E' U; [$ E  o4 t, Z+ y' i3 h
如果要修改超時時間,修改第3個參數即可
4 U( b- d# {$ u7 Q+ K) ]* `
1 S' T$ k! F+ y4 }5 R9 Z# ^  c  k( f$opts = array(
1 b6 |+ r% f7 T+ J9 U  'http'=>array() p. Y% k' l+ r% Y1 R4 ~
    'method'=>"GET",
9 b4 |* \0 F! [  y" t3 V' |) O    'timeout'=>120,
5 E7 a! K( B9 U# Q- x; B; y1 J   )
4 V, R+ ~! b" |& Z);
1 Q: w# B; |) x0 d  _3 l9 G( F( R9 M- C
$context = stream_context_create($opts);# R% g2 u& w1 `2 G5 F! @* ]
* G: d3 Z6 j  |" t% o
$html =file_get_contents('http://www.example.com', false, $context);
& }' J# P, C( t( U; ?" z+ R! n
回復 给力 爆菊

舉報

發表於 2013-8-7 20:57:09 | 顯示全部樓層
月光飛燕 發表於 2013-8-7 20:55 ! Q/ ~: I0 T+ n6 |
file_get_contents默認超時時間(秒)" U! F5 J0 M9 `9 w  G, m! x
php.ini中的default_socket_timeout設置,默認超時時間是default_soc ...
  A) O- a( Q: s( }3 k4 D* ~2 C
直接set_time_limit(0);不是更方便嗎5 C. b. J7 i+ Y( u! V5 X1 b

( }( j- l2 }, j: p, s

點評

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

舉報

發表於 2013-8-7 21:23:34 | 顯示全部樓層
adver 發表於 2013-8-7 20:57
7 s; E" @4 v, R% j+ D+ D直接set_time_limit(0);不是更方便嗎

3 W- F, T+ j% tset_time_limit是當前頁超時設置,與樓主說的沒有關聯
$ }) e, Q- {: q. \* K' a! x; c$ k% m% B2 u- F0 m6 T7 C7 ]; v& B
回復 给力 爆菊

舉報

 樓主| 發表於 2013-8-7 22:19:56 | 顯示全部樓層
月光飛燕 發表於 2013-8-7 21:23 4 v0 E0 }- q9 f
set_time_limit是當前頁超時設置,與樓主說的沒有關聯
5 g- A! H0 d' R% e* ?5 Y, _
如果用了default_socket_timeout,請求A頁面超時,可以接下去請教B頁面嗎?不讓程序停止。3 X' Y: ?3 \* s

2 Y4 T5 o! ~7 Q% a  `1 G. H* t* |& W2 h: e

評分

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

查看全部評分

回復 给力 爆菊

舉報

發表於 2013-8-7 22:56:21 | 顯示全部樓層
default_socket_timeout僅僅控制了file_get_contents
+ ~" N- h) s2 ?6 I& ~; u3 U如果這個超時,那麼當前執行的file_get_contents返回false
* J* O+ x6 C3 V程序是繼續向下執行的7 S1 _' L; T2 G1 u1 Q; Y" N
% [9 m) X5 {/ X% {' a( ^
但是要看你本頁的超時時間是否大於file_get_contents的超時) V5 d$ U$ w# g8 P) @, Q& W
本頁的超時時間使用set_time_limit進行設置,你可以設置成很大的值,比如0無限
8 f) n8 H  t2 k: C) R但是避免長時間執行造成內存溢出,最終導致服務器崩潰,你應該要設置一個* z# W/ ]: A( h/ T8 t. O
set_time_limit有限的值,比如120,360
& W0 b+ p2 q. o7 s, Q* C/ c2 d) b; ]! g5 E: n- H0 L! `
讓一個php頁面無限時運行是非常不好的,你應該使用cronjob間隔調用php頁面進行採集( h" m7 `8 x& ^7 X8 e/ E
這樣會非常穩定,不至於服務器崩潰
+ q! S- s" i% g
回復 给力 爆菊

舉報

發表於 2013-8-7 23:03:39 | 顯示全部樓層
你是要採集吧
7 t2 r9 I8 I3 n; w  g' K! y建議不要用file_get_contents,有時候會造成cpu飆升7 ~; S; ?# T) t4 R! F( T- q5 `% L
建議用curl庫,不僅高效而且強大,4 I# n( r! o0 `1 b1 f; o( V
我一直用curl庫
8 \, r- r; G1 h
回復 给力 爆菊

舉報

發表於 2013-8-8 10:14:07 | 顯示全部樓層
用curl比file_get_contents效率要高  }/ w9 k7 g6 `' B! R) p- N
回復 给力 爆菊

舉報

發表於 2013-8-8 16:26:13 | 顯示全部樓層

+ ^1 @- m9 q/ d3 U! Z5 h0 ~$ |0 _0 Z# D5 ?( `5 R
9 n1 h9 q7 g& x  Q% o2 K9 C) }% X
....我權限不能短消息7 A" q" M/ L& A" {: I/ N
- ?) G: Y5 I9 X" s. t/ c! `. H
我一般採集都是用定時任務方式,比如每分鐘採集兩條三條,以免頻率太高,被封。又可以不間斷運行。
, L' r' W$ k: Z你如果想通過設置set_time_limit來延長php運行時間,是不現實的。比如我vps,我用crontab設置採集程序一分鐘運行一次,第運行一次可以採集兩三條,一天也能採集好幾千條了1 {8 m2 W$ {# B

" ]( y! U0 d9 p- y% a; `網絡連接錯誤,獲取內容為空,那就重試,你也可以讓它採集下一條網址,跳過當前網址,做個判斷就可以了啊
& }7 O( N# r# \& e. z$ ~4 a% ?1 z. U% e- ~2 r/ T; w( o& T1 C
. ~& S% ?* z, d, Q

評分

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

查看全部評分

回復 给力 爆菊

舉報

 樓主| 發表於 2013-8-14 15:35:45 | 顯示全部樓層
mulao 發表於 2013-8-8 16:26 ( d. S: Q9 f9 {! z( N* x
....我權限不能短消息
% E3 D% t$ n5 g( Z+ g) \) k0 n! b9 {
我一般採集都是用定時任務方式,比如每分鐘採集兩條三條,以免頻率太高,被封。 ...

. |- i1 f& ~% T如果下個1分鐘調用的時候程序還在運行,怎麼處理?系統會自動處理?/ m4 U  d  W/ J" ^* L; M
+ a2 V2 h- T0 o% t7 A# f: _
回復 给力 爆菊

舉報

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

本版積分規則

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

GMT+8, 2025-8-21 10:05

By DZ X3.5

小黑屋

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