2013-08-01 36 views
6

Trả về một chuỗi rỗng, tôi có cùng mã (như một phần của tập lệnh) chạy trên nhiều máy chủ và nó hoạt động ở mọi nơi khác, chúng đều là cùng một thiết lập.

Điều kỳ lạ là, khi tôi khởi động lại apache và tải trang, nó hoạt động chính xác một lần, nếu tôi tải lại trang web + tất cả các lần sau đó, nó trống. Tôi đã có những người khác cố gắng, kết quả tương tự, trống rỗng.

ai đó đã đề xuất đó là thứ gì đó có cấu hình IPv6, giờ đây tôi đã tắt hoàn toàn IPv6 nhưng sự cố vẫn tiếp diễn.

+0

Sử dụng Apache? Mọi bộ nhớ đệm? – exussum

+0

Có apache, không có bộ nhớ đệm. –

+0

Bạn có chắc rằng PHP được Apache sử dụng làm mô đun chứ không phải CGI? – Dawlys

Trả lời

2

nếu bạn ở phía sau máy chủ proxy, bạn có thể sử dụng $_SERVER['HTTP_X_FORWARDED_FOR'] hoặc $_SERVER['HTTP_CLIENT_IP'] thay vì $_SERVER['REMOTE_ADDR']. điều này sẽ tùy thuộc vào cách proxy của bạn được định cấu hình.

1

Có thể REMOTE_ADDR trống. vì vậy nếu bạn muốn, bạn có thể sử dụng mã này mà tôi sử dụng để có được ip dựa trên HTTP_X_FORWARDED_FOR

<?php 
    if(! empty($_SERVER['REMOTE_ADDR'])){ 
    $ip = $_SERVER['REMOTE_ADDR']; 
} 
else{ 
    $ip = empty($_SERVER['HTTP_X_FORWARDED_FOR']) ? '' : $_SERVER['HTTP_X_FORWARDED_FOR']; 
} 

Tôi đang kiểm tra REMOTE_ADDR đầu tiên vì nó là đáng tin cậy hơn và đôi khi HTTP_X_FORWARDED_FOR có thể bị giả mạo bởi người dùng

+0

Tôi nghĩ tốt hơn là nên sử dụng 'isset ($ _ SERVER ['HTTP_X_FORWARDED_FOR'])' thay vì 'rỗng ($ _ SERVER ['HTTP_X_FORWARDED_FOR'])' – Andrew

+0

bạn biết sự khác biệt với isset và rỗng phải không? Khi tôi nhìn trước trên nhật ký máy chủ của tôi. Tôi đã gặp phải một số trình duyệt vẫn gửi http_x_forward_for nhưng nó trống. vì vậy tôi nghĩ rằng nó rỗng() là cần thiết – fedmich

+0

thực sự nó là tốt nhất để sử dụng cả hai ...bởi vì có thể khách hàng có thể không sử dụng proxy để họ không có '$ _SERVER ['HTTP_X_FORWARDED_FOR']' bộ biến .... vì vậy chỉ cần kiểm tra trống sẽ dẫn đến một số vấn đề khi php phân tích nó .... imho .. – Andrew

0

Tôi đã có mã trên một máy ảo mới trông như thế này. Nó đang được gọi là từ một tập tin javascript:

<?php 
$hostip = $_SERVER['REMOTE_ADDR']; 
?> 
var myip = "<?=$hostip ?>"; 

Làm việc trên máy chủ cũ của khóa học và tôi đã gãi đầu của tôi trong một thời gian suy nghĩ có điều gì đó sai trái với Apache..Was có một module thiếu? Một số thiết lập Apache mơ hồ mà tôi không thể tìm thấy ?. Tôi nghĩ Apache không gửi các biến Server. Đó là cho đến khi tôi đã thử các cách đồng bằng ol' fashioned và nó làm việc:

echo $_SERVER['REMOTE_ADDR']; 

Hóa ra tôi đã phải soạn thảo file php.ini và thiết lập short_open_tag để On. Facepalm - các thẻ php shortcut không hoạt động. Hy vọng rằng sẽ giúp tiết kiệm cho người khác một đầu thời gian :)

0

Có thể điều này sẽ hữu ích. Tôi đã gọi một tập lệnh php từ một ứng dụng iPhone để cập nhật cơ sở dữ liệu bao gồm địa chỉ IP. IP là một lĩnh vực mới được thêm vào chỉ là một vài ngày trước, và nó đã không được cập nhật từ iPhone, nhưng đã làm việc một cách chính xác từ Android. Vấn đề là tập lệnh php mới không được iPhone sử dụng cho đến khi điện thoại bị tắt và khởi động lại. Nó giữ nó trong bộ nhớ cache.

Bất kỳ ai biết cách xóa các tệp php cũ này?

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