2009-07-31 4 views
0

PHP로 MSN 클라이언트를 작성하고 있습니다. 이것은 지금까지 내 코드입니다 : 내가 넥서스에 연결할 때nexus.passport.com에 연결할 때 PHP 시간 초과가 발생했습니다.

 
Connected to 1st server. 
VER 0 MSNP10 
CVR 1 1.0.0000 1.0.0000 1.0.0000 http://msgr.dlservice.microsoft.com http://download.live.com/?sku=messenger 
XFR 2 NS 207.46.124.241:1863 0 65.54.239.21:1863 
Connected to 2nd server. 
VER 0 MSNP10 
CVR 1 1.0.0000 1.0.0000 1.0.0000 http://msgr.dlservice.microsoft.com http://download.live.com/?sku=messenger 
USR 2 TWN S ct=1249043921,rver=5.5.4177.0,wp=FS_40SEC_0_COMPACT,lc=1033,id=507,ru=http:%2F%2Fmessenger.msn.com,tw=0,kpp=1,kv=4,ver=2.1.6000.1,rn=1lgjBfIL,tpf=b0735e3a873dfb5e75054465196398e0 

Fatal error: Maximum execution time of 30 seconds exceeded in C:\wamp\apps\msnphp\chat.php on line 54 

나는 시간 초과 오류를 얻을 :

$socket = fsockopen("messenger.hotmail.com", 1863); 
echo '<b>Connected to 1st server.</b><br />'; 
//Send MSNP version 
fputs($socket, "VER 0 MSNP10 CVR0\r\n"); 
echo fread($socket, 5000) . '<br />'; 
//Send user-agent 
fputs($socket, "CVR 1 0x0409 php ".phpversion()." i386 MSNMSGR 7.0.0000 MSMSGS ".$_POST["username"]."\r\n"); 
echo fread($socket, 5000) . '<br />'; 
//Send username 
fputs($socket, "USR 2 TWN I ".$_POST["username"]."\r\n"); 
//Read XFR 
$xfr = fread($socket, 5000); 
echo $xfr . '<br />'; 
$xfr = explode(" ", $xfr); 

//Connect to second server 
$server2 = explode(":", $xfr[3]); 
$socket = fsockopen($server2[0], (int)$server2[1]); 
echo '<b>Connected to 2nd server.</b><br />'; 
//Send MSNP version 
fputs($socket, "VER 0 MSNP10 CVR0\r\n"); 
echo fread($socket, 5000) . '<br />'; 
//Send user-agent 
fputs($socket, "CVR 1 0x0409 php ".phpversion()." i386 MSNMSGR 7.0.0000 MSMSGS ".$_POST["username"]."\r\n"); 
echo fread($socket, 5000) . '<br />'; 
//Send username 
fputs($socket, "USR 2 TWN I ".$_POST["username"]."\r\n"); 
//Read USR 
$usr = fread($socket, 5000); 
echo $usr . '<br />'; 
$usr = explode(" ", $usr); 

//Connect to Nexus 
$nexus = fsockopen("nexus.passport.com", 443); 
$request_nexus = "GET /rdr/pprdr.asp HTTP/1.1\r\n"; 
$request_nexus .= "Host:nexus.passport.com\r\n"; 
$request_nexus .= "User-Agent:MSNphp/1.0 (PHP; U; PHP 5; en-US)\r\n"; 
$request_nexus .= "Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n"; 
$request_nexus .= "Accept-Language:en-us,en;q=0.5\r\n"; 
$request_nexus .= "Keep-Alive:300\r\n"; 
$request_nexus .= "Connection:keep-alive\r\n"; 
$request_nexus .= "Cache-Control:max-age=0\r\n\r\n"; 
fputs($nexus, $request_nexus); 
echo fread($nexus, 5000);//This is line 54, which causes the error 

내 결과는 다음입니다. 하지만 Firefox에서 https://nexus.passport.com/rdr/pprdr.asp 요청을하면 원하는 결과를 얻습니다 (HttpFox로 확인). Nexus가 내 대본에 너무 많이 반응하는 이유는 무엇입니까? Firefox에서는 2 초가 걸립니다.

누구든지 내가 뭘 잘못하고 있는지 알아?

답변

5

nexus.passport.com의 SSL 포트 (443)에 연결하는 동안 실제로 정보가 암호화되지 않습니다. 따라서 Nexus는 암호화 된 데이터가 도착하기를 기다리고 있습니다. (PHP 스크립트가 손을 보내기 전에 시간 초과 됨).

Curl을 사용하면 넥서스가 SSL 연결을 처리 할 수 ​​있으므로 정보를 넥서스로 전송하는 것이 가장 좋습니다 (왜 바퀴를 다시 만들지?).

+0

고마워요! 나는 SSL에 대해 몰랐다. 지금 ssl : //nexus.passport.com을 호스트로 사용합니다! Btw ... 나는 cURL을 정말 좋아하지 않아. 감사! –

2

스크립트가 오래 실행 중입니다. PHP는 설정에서 더 길게 실행되면 스크립트를 죽이는 메커니즘을 가지고 있습니다. php.ini에서이 값 (max_execution_time)을 변경하거나 set_time_limit() 함수를 사용하여 스크립트에서이 값을 변경할 수 있습니다.

+0

mmm 나는 이것을 알고있다.하지만 넥서스가 내 PHP 스크립트에 반응하는 데 30 초 이상 걸리지 만 파이어 폭스에 반응하는 데 2 ​​초가 걸리는 이유는 무엇인가? –

+0

귀하의 서버가 귀하의 파이어 폭스와 동일한 컴퓨터에서 실행되고 있습니까? – RaYell

+0

네, 그렇습니다 ....... –

관련 문제