2010-08-30 28 views
18

Tôi nghĩ điều này sẽ đơn giản nhưng tôi dường như không thể tìm thấy một biến của $_SERVER mảng có những gì tôi đang tìm kiếm.Cố gắng lấy một URL đầy đủ mà không có tên tập tin trong PHP

Giả sử url của tôi là http://example.com/subdirectory/index.php Tôi muốn nhận tất cả trừ tên tệp - http://example.com/subdirectory/.

Tôi biết tôi có thể dễ dàng thực hiện điều này với một số thao tác chuỗi, nhưng tôi muốn biết nếu có một mảng của mảng _server mà tôi chỉ thiếu. Tôi đã thử tất cả trong số họ để xem những gì họ cung cấp và tôi có thể nhận được bất cứ điều gì NHƯNG những gì tôi đang tìm kiếm.

+0

Rất tốt câu hỏi. Cảm ơn –

+0

có thể trùng lặp của [Nhận URL đầy đủ trong PHP] (http://stackoverflow.com/questions/6768793/get-the-full-url-in-php) –

Trả lời

36

Sẽ không có vì nó không phải là thuộc tính hữu ích để theo dõi. Nếu tập lệnh hiện tại không phải là index.* thì tập lệnh sẽ không trả lại URL chính xác cho tập lệnh hiện tại.

Tuy nhiên, điều này có thể giúp bạn có được những gì bạn muốn:

echo '//'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']); 

Edit:
Ngoài ra, còn một số tồn cài đặt php.net trực tuyến công cụ tìm kiếm bằng tay cho Firefox và cài đặt nó lên với một từ khóa tìm kiếm (cho phép bạn kéo tài liệu lên toàn cầu bằng cách nhập một cái gì đó như "php $_server" vào thanh URL), bạn cũng nên biết rằng var_dump()print_r() cho phép bạn xuất toàn bộ nội dung của bất kỳ biến nào, bao gồm mảng và đối tượng. Điều này rất hữu ích để gỡ lỗi.

+0

Nhưng lưu ý, bạn không nên giả định rằng tên dirname () bằng với đường dẫn url. – JackFuchs

+0

Trong trường hợp của tôi nó không hoạt động, hãy lấy một url như 'http: // magento.p111111.webspaceconfig.de/magento.p111111.webspaceconfig.de /' –

+0

@Stefan: Bạn có thể thử '$ _SERVER ['REQUEST_URI' ] như JackFuchs đã viết. Có lẽ bạn đang sử dụng một số hình thức viết lại URL đã docroot chỉ định một cấp lên từ nơi wwwroot của bạn được phục vụ từ. Hãy cho tôi biết nếu điều đó phù hợp với bạn. –

2

bạn có thể sử dụng dirname() để nhận đường dẫn url.

3

Tôi dường như không thể tìm thấy biến mảng $ _SERVER có thứ tôi đang tìm kiếm.

vì chuỗi hư cấu của nó, chỉ tồn tại trong thanh địa chỉ của trình duyệt.
Các bộ phận của nó được gửi đến máy chủ được tách riêng.

Tôi muốn biết nếu có một var của mảng _SERVER

Đó là rất dễ dàng để biết. chỉ print_r($_SERVER); thực sự đơn giản.

Tôi biết tôi có thể khá dễ dàng làm điều này với một số chuỗi thao tác

yeah. mã bạn phải viết ít hơn văn bản câu hỏi này.

nhưng với một số phép thuật thủ công, nó có thể được giảm xuống chỉ còn một chức năng.

8

Không có biến nào được xác định cho những gì bạn muốn.

Bạn có thể sử dụng mã dưới đây để có được những cơ sở url đầy đủ:

// Base folder url 
$myBase = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on')) ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']); 

nhưng hy vọng hầu hết thời gian bạn sẽ không đòi hỏi điều đầy đủ chỉ cần sử dụng:

// Base folder server root path 
$myBase = dirname($_SERVER['PHP_SELF']); 

Chỉ cần cẩn thận nếu bạn đang sử dụng một số loại hệ thống định tuyến (mod_rewrite).

14

Trong trường hợp của bạn, thao tác chuỗi là giải pháp tốt nhất.

Ví dụ:

substr($_SERVER['REQUEST_URI'], 0, strrpos($_SERVER['REQUEST_URI'], '/') + 1); 
+0

Hoặc đế ($ _ SERVER ['REQUEST_URI'], 0, strrpos ($ _ SERVER ['REQUEST_URI'], '\\') + 1); trên máy chủ windows – Vincent

+1

Tôi không nghĩ vậy Vincent. Vì chúng ta đang thao tác một URI ở đây, KHÔNG phải là đường dẫn tệp của cửa sổ! –

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