2011-04-22 6 views
0
<?php 
//$ipaddress = $_SERVER['REMOTE_ADDR']; 
$ipaddress = '10.0.1.4'; 
$binip = inet_pton($ipaddress); 
echo $binip; 
?> 

빈칸으로 반환됩니다. 내 공개 IP를 사용하는 경우 올바른 결과를 반환합니다. 192.168.1.2 (내 오래된 LinkSys 라우터에 이와 비슷한 IP가 있음)에 대한 결과가 반환됩니다. 나는 로컬 IP를 가지고 리눅스 머신에서 내 애플 리케이션을 테스트하고있다. 연결된 모든 컴퓨터는 내부 IP 10.0.1.XX을 사용합니다. 내 애플 리케이션은 MySQL을 사용하고 binip이 비어 있으면 오류가 난다. 그래서 나는 로컬 IP에 대한 해결 방법을 모르고있다. 나는 그 형식의 로컬 IP를 탐지하고 ipaddress 변수를 편집하여 inet_pton에 대한 유효성을 검사하는 것과 관련이 있다고 생각할 수도 있습니다. 어떤 아이디어?inet_pton이 10.0.1.4와 같은 로컬 IP 주소에서 작동하지 않습니다.

+0

inet_ntop()에 문제가 있습니까? 코드 샘플에 표시된 것처럼 제목이 말하거나 inet_pton()을 사용합니까? 아니면 둘 다 사용합니까? inet_ntop ($ binip)을 echo하면 무엇을 얻을 수 있습니까? –

+0

"빈칸으로 돌아갑니다"Well'echo' echos; 아무것도 반환하지 않습니다. 그리고 "공백"이란 무엇입니까? 'var_dump ($ binip)'하고 변수가 실제로 무엇을 포함하고 있는지 알아보십시오 : 빈 문자열? '거짓'입니까? 'NULL'? 'inet_pton' [당신에게 사람이 읽을 수있는 문자열을주지 못하기 때문에] (http://php.net/manual/en/function.inet-pton.php) . 아마도'ip2long'을 의미했을까요? –

답변

1

나를 위해 작동합니다. 귀하의 예제 코드에서 이진 구조를 얻을 수 있습니다 (인쇄 가능한 문자가 없기 때문에 웹 브라우저에서 실행하면 아무 것도 얻을 수 없습니다). 어쩌면

<?php 
$ipaddress = '10.0.1.4'; 
$binip = inet_pton($ipaddress); 
echo inet_ntop($binip); 
?> 

당신이 정수로 주소를 변환 ip2long에 더 관심이 있습니다

사실, 난 원래 주소를 출력하고, 어떠한 정보도 손실이 진행되지가 있음을 보여주고이 코드를 시도? 아니면 데이터베이스에 데이터를 저장하기 전에 데이터를 이스케이프 처리하는 등의 문제가있을 수 있습니다.

+0

감사합니다. 그때 그것은 MySQL의 문제였던 것 같아요. 바이너리에서 varbinary로 변경되었습니다. 인쇄 할 수없는 문자는 생각하지 않았습니다. 감사! – Keverw

+0

바이너리가 잘못된 크기가 아닌 한 바이너리에서 varbinary로 변경해도 문제가 해결되지 않습니다. 필드의 길이를 4로 설정하여 전체 주소 공간을 확보하십시오. 더 이상 필요하지 않습니다. –

+0

설명서에서 더 많은 내용을 읽는다면 실제로는 MySQL 5.0.15 버전이 이진 필드 (VARBINARY가 아닌)에서 선택할 때 값을 바꿀 수 있다고 말합니다. 이전 버전. –

관련 문제