2011-04-22 40 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在Linux機器上測試我的應用程序。所有連接到它的機器都使用內部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),你會得到什麼? – 2011-04-22 12:09:02

+0

「它返回空白」好'回聲'回聲;它不會「返回」任何東西。什麼是「空白」?做'var_dump($ binip)'並找出變量真正包含的內容:一個空字符串? 'FALSE'? 'NULL'?我也不確定你期望看到什麼,因爲'inet_pton' [不會給你一個可讀的字符串](http://php.net/manual/en/function.inet-pton.php) 。也許你的意思是'ip2long'? – 2011-04-22 12:20:34

回答

1

它適合我。我從你的示例代碼中得到了一個二進制結構(儘管它沒有可打印的字符,所以如果你在網頁瀏覽器中運行它,你可能什麼也得不到)。

事實上,我甚至試過這個代碼輸出原始地址,並表明沒有信息丟失怎麼回事:

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

也許你更感興趣的是ip2long該地址轉換爲整數?或者,也許你的問題在其他地方,例如在將數據放入數據庫之前將其轉義出來?

+0

謝謝。我想這是一個MySql問題。我從二進制更改爲varbinary。沒有考慮不可打印的字符。謝謝! – Keverw 2011-04-22 12:15:53

+0

從二進制到varbinary的更改不應解決問題,除非二進制文件的大小錯誤。確保該字段的長度爲4,以便爲整個地址騰出空間,不多也不少。 – 2011-04-22 12:21:49

+0

在手冊中進一步閱讀時,他們實際上說,當從BINARY字段中選擇(但不在VARBINARY中)時,MySQL <5.0.15版本可能會更改該值(剝離尾隨空格),因此如果您有舊版本。 – 2011-04-22 12:26:26