2012-01-03 37 views
5

Các mã sau đây để tìm ra địa chỉ ip địa phương thực tế (ví dụ như 192.168.1.X) của máy chủ lưu trữ đã chạy tốt trên một máy devĐơn giản chỉ cần tìm ra địa chỉ IP của máy chủ

$ip = getHostByName(getHostName()); 

Chuyển nó đến một máy chủ nó bắt đầu đầu ra 127.0.0.1

Dường như getHostName() trả về localhost mà lần lượt được chuyển đổi thành 127.0.0.1 bởi getHostByName().

Nhìn vào câu hỏi khác ở đây dường như $_SERVER['SERVER_ADDR'] có thể giải quyết các câu đố nhưng điều này cũng đang trở lại 127.0.0.1

Kiểm tra và tìm kiếm đầu ra từ phpinfo() lợi nhuận không có manh mối để địa chỉ IP thực của máy.

Nghiêm túc, có ai biết bằng chứng đạn (cách đơn giản hơn) để nhận địa chỉ IP của máy chạy tập lệnh không? Tại sao nó khó khăn như vậy để có được dữ liệu cơ bản như vậy mà không làm quay lại?

tôi thực sự không muốn được thể xác định rõ địa chỉ ip trong một tập tin cấu hình ...

+0

Máy chủ của bạn có đang chạy sau proxy/loadbalancer/bộ nhớ cache trên cùng một máy, làm cho 'localhost' hoặc' 127.0.0.1' máy chủ lưu trữ thực sự Apache * đang * chạy không? –

+0

Địa chỉ IP nào bạn muốn, địa chỉ IP được gán cho (các) NIC trên máy hoặc IP công cộng được sử dụng để truy cập máy từ internet? – DaveRandom

+0

@nikc no. nhưng bạn nghĩ nó liên quan đến apache? – zaf

Trả lời

3

Tôi sợ nói chung đó là không thể - IP thực sử dụng để kết nối các máy chủ có thể được dịch trước khi nó đến máy chủ ...

+0

Tôi ngạc nhiên với điều mặc khải này. – zaf

3

Nếu bạn cần tất cả danh sách giao diện, hãy thử system(); để thực thi lệnh của trình bao và nhận kết quả đến máy chủ web. Ví dụ:

system('ifconfig', $LIP); 
system('ipconfig', $WIP); 
echo "Linux:".$LIP."<br>Win:".$WIP."<br>; 
+0

Có lẽ sẽ sử dụng một cái gì đó như thế này. Nhưng tôi sẽ cần phải thêm một cơ chế bộ nhớ đệm trên đầu trang để tránh chạy điều này trên mọi yêu cầu. – zaf

+1

thử kiểm tra 'is_file ('/ webroot/sysconfig.txt');' if false: sử dụng 'system ('ifconfig> /webroot/sysconfig.txt');' if true: đọc sysconfig.txt qua 'file_get_contents ($ path); 'Cách này Bạn có thể dễ dàng tạo ra một cơ chế _caching_;) –

+0

Vâng, đó sẽ là một cách :) – zaf

0

Hãy thử điều này:

$ip = getHostByName($_SERVER['HTTP_HOST']); 

Nó sẽ giải quyết địa chỉ IP của người sử dụng máy chủ đang truy cập trang web bằng.

Ví dụ: nếu bạn có trang web của mình được truy cập qua http://localhost/, nó sẽ cung cấp cho bạn 127.0.0.1. Nhưng đối với http://www.mydomain.tld/, nó sẽ trả về IP cho www.mydomain.tld.

Xin lưu ý rằng /etc/hosts có thể ảnh hưởng đến độ phân giải tên nếu miền được liệt kê ở đó.

Các vấn đề liên quan