2010-01-15 53 views
5

Vì vậy, tôi đang cố gắng truy cập trang nơi khách truy cập đến từ đó. Tôi chèn mã này vào một tập tin php và tôi đang cố gắng để xem URL của trang nhưng nó không hoạt động, bất cứ đề nghị?URL giới thiệu trong php

<?php 

    $ref = getenv("HTTP_REFERER"); 
    echo $ref; 

?> 

(bổ sung này sau khi một số câu trả lời) Tôi cũng đã cố gắng

print $_SERVER["HTTP_REFERER"]; 

và điều đó không làm việc, hoặc

nó làm việc sau khi tôi cập nhật trang web nhiều lần, không chắc chắn lý do tại sao đã có một vấn đề ở nơi đầu tiên, cảm ơn anyway :)

+1

Ý của bạn là "không hoạt động"? – Sampson

+0

Ý tôi là, nó không trả lại gì cả. Tôi đã cố gắng để echo nó, nó in không có gì, tôi đã cố gắng để lưu nó vào một biến, biến giữ "" (không có gì). – user220755

Trả lời

19

Bạn đã thử truy cập thông qua các siêu kết nối $_SERVER?

print $_SERVER["HTTP_REFERER"]; 
+0

không hoạt động hoặc – user220755

+0

Bạn có gặp lỗi không? – Sampson

+2

Giả sử tập lệnh của bạn là chính xác (trái ngược với lỗi cú pháp, v.v.) Bạn có chắc chắn có một liên kết giới thiệu http không? Kiểm tra tiêu đề HTTP của bạn, vì PHP nhận được liên kết giới thiệu từ đó. Nếu khách hàng không gửi một liên kết giới thiệu thì sẽ không có liên kết giới thiệu nào. – futureelite7

2

getenv() được sử dụng nếu nó đang được chạy như một kịch bản CGI. Với SAPI bạn sử dụng $_SERVER["HTTP_REFERER"].

4

$ _SERVER ['HTTP_REFERER'] là cách tốt nhất để truy cập thông tin này.

Dựa trên ý kiến ​​của bạn về câu trả lời khác:

  1. Bạn có thực sự đến từ nơi nào đó? Nếu bạn làm mới trình duyệt, giá trị này có thể sẽ không được gửi. Vì vậy, hãy đảm bảo trình duyệt của bạn đang gửi tiêu đề. Nếu bạn đặt tập lệnh này trên url công khai, tôi sẽ vui lòng kiểm tra và xác minh.
  2. Bạn thực sự nên bật tất cả các lỗi. Nếu tiêu đề không được gửi đi và bạn vẫn truy cập nó, PHP sẽ phát ra một E_NOTICE. Nếu bạn đang gỡ lỗi mã của bạn, bạn nên bật tất cả các thông báo lỗi và chắc chắn rằng không có E_NOTICE hoặc tệ hơn.
0

Một lần nữa, đọc http://php.net/manual/en/reserved.variables.server.php: Với HTTP_REFERER có một bình luận:

Địa chỉ của trang (nếu có) mà gọi user agent để trang hiện tại. Điều này được thiết lập bởi tác nhân người dùng. Không phải tất cả tác nhân người dùng đều sẽ đặt cài đặt này và một số cung cấp khả năng sửa đổi HTTP_REFERER thành một tính năng. Trong ngắn hạn, nó không thể thực sự được tin cậy.

3

Có thể nhận xét ngu ngốc, nhưng $_SERVER["HTTP_REFERER"] chỉ hoạt động nếu bạn nhập trang bằng siêu kết nối. ví dụ:

/goto.html

<a href="refer.php">go to refer</a> 

/refer.php

<?php 
print "You entered using a link on ".$_SERVER["HTTP_REFERER"]; 
?> 

HTTP_REFERER không hoạt động nếu bạn nhập vị trí liên kết trực tiếp trong trình duyệt của bạn.

1

Nếu bạn tính toán tất cả các câu trả lời, bạn kết thúc với một cái gì đó trông như:

<?php 
if isset($_SERVER['HTTP_REFERER']) { 
    $ref = $_SERVER['HTTP_REFERER']; 
} 
else { 
    $ref = "Direct Entry"; 
} 
?> 
2
<?php 
    echo $_SERVER['HTTP_REFERER']; 
?> 

Đoạn mã trên hoạt động! Tuy nhiên, nhiều sinh viên của tôi thấy khó khăn, lúc đầu, để hiểu rằng $_SERVER['HTTP_REFERER']yêu cầu đến từ liên kết .

Tôi cung cấp cho chúng bên dưới (thử nghiệm)(hoặc "trang web") để minh họa. Đoạn mã trên nằm ở phía dưới.

show-referer.php

<?php 
    if (isset($_SERVER['HTTP_REFERER'])) { 
    $referer = $_SERVER['HTTP_REFERER']; 
    } else { 
    $referer = 'No Link - No Referer - Direct URL Entry'; 
    } 
    echo $referer; 
?> 

<p>See the referer in action 
    <a href="show-referer.php">from this page!</a> 
</p> 

<?php 
    echo $_SERVER['HTTP_REFERER']; 
?> 

Trang show-referer.php liên kết tới bản thân khi bạn nhấp vào liên kết, mà nên làm cho trình duyệt để tạo ra một HTTP_REFERER.

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