2009-04-04 37 views
12

Điều này thật kỳ quặc, nhưng vì lý do nào đó, $_SERVER["SCRIPT_URI"] sẽ không trả về tên miền khi tôi ở trong trang con/phụ nhưng sẽ chỉ hoạt động trên trang chính. Bạn không chắc chắn nếu nó do kịch bản (WordPress) hoặc máy chủ lưu trữ, nhưng xin vui lòng bạn có thể đề xuất bất kỳ giải pháp đáng tin cậy để lấy tên miền với PHP?

+0

Bạn có thể đã nghĩ đến '$ _SERVER ['REQUEST_URI']' – Kzqai

+0

@Kzqai 'SCRIPT_URI' được ghi lại trong tài liệu Apache dưới dạng [biến môi trường được duy trì bởi mod_rewrite] (http://httpd.apache.org/ docs/2.2/en/mod/mod_rewrite.html # EnvVar) - do đó từ đó _should_ có mặt trong 'super _loß' superglobal. Tuy nhiên, như OP đã tìm thấy, nó không phải lúc nào cũng được thiết lập (vì lý do gì). – MrWhite

Trả lời

22

Nếu bạn cần tên miền, sử dụng:

$_SERVER['HTTP_HOST'] 
+0

Ồ, cái này hoạt động tốt !! ngay cả với url viết lại trên. Cảm ơn –

2

Điều này có thể do viết lại URL, bạn có thể thử $ _SERVER ['REQUEST_URI'] thay vào đó nếu bạn muốn đường dẫn được gọi trong url.

+0

Nếu bạn chọn phương pháp này, hãy lưu ý rằng nó có thể bị ảnh hưởng bởi các tiêu đề yêu cầu. –

+0

Thật vậy. Theres url viết lại. Nhưng tôi không muốn con đường, tôi chỉ muốn kiểm tra tên miền. Có cách nào không? –

6

Tùy thuộc vào những gì bạn muốn, tôi muốn sử dụng một trong các cách sau:

  1. $ _SERVER [ 'PHP_SELF'] cho kịch bản tập tin vị trí
  2. $ _SERVER [ 'SERVER_NAME'] cho tên máy chủ

From the php docs

EDIT: Có thể PHP_SELF không phải là tốt nhất. Xem ý kiến.

+0

Như tôi đã biết, việc sử dụng $ _SERVER ['PHP_SELF'] là một rủi ro tuyệt đối. http://is.gd/qPcb – sepehr

+1

Có thể bạn nên sử dụng '$ _SERVER ['SCRIPT_NAME']' thay vì PHP_SELF. –

18

Khi nghi ngờ

var_dump($_SERVER); 
+0

+1 Lời khuyên tốt nhất! –

0

var_dump($_SERVER) và xem những gì suites nhu cầu của bạn.

P.S. Việc sử dụng số $_SERVER["PHP_SELF"] không được phép sử dụng có thể là security risk.

-3

Nếu trình duyệt của bạn định dạng JSON tài liệu độc đáo và không có đầu ra đã diễn ra, chèn sau đây sẽ dẫn đến một cái gì đó dễ đọc hơn so var_dump:

header('Content-Type: application/json');die(json_encode($_SERVER)); 

phpinfo() cũng sẽ cung cấp một danh sách tất cả $_SERVER giá trị và do đó nhiều hơn nữa!

0

Ngoài ra, SCRIPT_URI không tồn tại, đúng cú pháp là REQUEST_URI:

echo $_SERVER["REQUEST_URI"]; Nó trả lại toàn bộ con đường mà không có máy chủ và tên miền.

+0

'SCRIPT_URI' không nhất thiết là sai. Nó được ghi lại trong tài liệu Apache dưới dạng [biến môi trường được duy trì bởi mod_rewrite] (http://httpd.apache.org/docs/2.2/en/mod/mod_rewrite.html#EnvVar). Tuy nhiên, như OP đã tìm thấy, nó không phải lúc nào cũng được thiết lập (vì lý do gì). Nhưng ... khi nó được thiết lập, nó không giống như 'REQUEST_URI'. 'SCRIPT_URI' chứa URL _absolute, trong khi' REQUEST_URI' là URL gốc tương đối ("không có máy chủ và tên miền"). – MrWhite

0

Tôi đã sử dụng $ _SERVER [SCRIPT_URI] trên trang web của tôi http://www.a2zidx.com và một số thư mục con như http://howto.a2zidx.com

tôi đã không có vấn đề với điều này trong nhiều năm qua và ngày nay có một lỗi trên một số trang web ở đâu $ _SERVER [SCRIPT_URI] không được chỉ định. Sau khi liên hệ với isp của tôi, họ tuyên bố họ đã không thực hiện bất kỳ thay đổi nào nhưng $ _SERVER [SCRIPT_URI] không còn hoạt động nữa. getenv ('SCRIPT_URI') không thành công nhưng trả về một chuỗi rỗng. Tại sao điều này xảy ra đột ngột sau nhiều năm tôi không biết. Tôi đã kết thúc gọi một chức năng để đi qua các tùy chọn khác nhau để trích xuất tên tập tin đó là những gì tôi muốn. Hy vọng điều này bao gồm tất cả mọi thứ. Tôi gặp khó khăn kể cả chức năng kiểm tra nhưng "SCRIPT_NAME" "PHP_SELF" "SCRIPT_FILENAME "SCRIPT_URI"

Hy vọng giúp mình.

Nếu có ai biết tại sao SCRIPT_URI đột nhiên ngừng hoạt động, tôi rất muốn biết. Máy chủ hiện đang chạy Apache 2.4.

+0

Các liên kết trông giống như spam, hãy xem xét thay thế chúng cho những cái chung chung như example.com – Norrius

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