2014-01-17 2 views
0

PHP에서 IRC 봇을 작성하고 아래의 공지 사항을 여러 부분으로 나누려고합니다. 지금까지 내가 사용하고PHP에서 여러 부분으로 문자열 분할하기

:irc.server.com NOTICE PHPServ :*** CONNECT: Client connecting on port 6667 (class users): [email protected] (127.0.0.1) [Guest]<br /> 

:

while(1) { 
    while($data = fgets($socket)) { 
     echo nl2br($data); 
     flush(); 

     $ex = explode(' ', $data); 

     if($ex[0] == "PING"){ 

      fputs($socket, "PONG ".$ex[1]."\n"); 

     } 

     if($ex[1] == "NOTICE"){ 
      if($ex[6] == "connecting"){ 

      $userstring = $ex[12]; 
      $usernick = strstr($userstring, '!', true); 
      $userip = strstr($userstring, '@'); 

      } 
     } 
    } 
} 
?> 

그래서 $user.nick 괜찮 노력하고 있지만 $user.ip는 @와 IP 주소가 포함되어 있습니다. 왜 이것이 @를 포함하지만 닉네임에!가 포함되지 않는 이유는 무엇입니까?

어떻게하면 $user.ident을 얻을 수 있습니까? 그리고 @?

+0

당신은 무엇으로 폭발하고 있습니까? '$ ex'가 당신의 문자열을 배열로 생각한 것 같습니다. – Ryan

+2

'$ user.nick ='은 확실히 "작동하지 않습니다", 그것은 유효한 PHP가 아닙니다. – deceze

+0

@Ryan 죄송합니다. 완전한 코드로 업데이트되었습니다. – user2656114

답변

1

시도 : 그 이유는

$userParts = explode('@', $userstring); 
$userip = end($userParts); 
0

이 포함 (출처 : http://php.net/strstr) : 때문에 '는 @'는 건초 더미 문자열의

반환 부분의 첫 번째 발생을 포함한에서 시작 건초 더미 끝에 바늘.

이는이 같은 문자열을 사용할 수 있습니다 해결하려면이 읽기/문자열 호출을보다 쉽게 ​​이해할 수 있기 때문에
$userstring = $ex[12]; 
$exPos = strpos($userstring, '!'); 
$atPos = strpos($userstring, '@'); 

$usernick = strstr($userstring, '!', true); 
$userip = substr($userstring, $atPos + 1); 
$userident = substr($userstring, ($exPos + 1), ($atPos - $exPos) - 1); 

는 내가 처음 않는 strstr을 떠났다.