Gọi url trong mã php

Mặc dù không có chức năng lấy URL yêu cầu đầy đủ trong PHP, nhưng chúng tôi vẫn có thể tạo URL của riêng mình bằng cách sử dụng kết hợp các biến máy chủ để nhận được những gì chúng tôi cần

1652 lượt xem

Gọi url trong mã php

Bởi. Jacob

Đã chỉnh sửa. 27-02-2021 13. 29

Gọi url trong mã php

Điều kỳ lạ là URL yêu cầu đầy đủ không thể truy cập trực tiếp từ PHP, vì dường như không có biến hoặc chức năng nào tiết lộ nó;

  • HTTP_HOST
  • REQUEST_URI
  • HTTPS

Để nhận được URL đầy đủ được yêu cầu, bạn có thể sử dụng kết hợp các biến $_SERVER để "đoán" URL—một ví dụ nhanh về cách thực hiện việc này được bao gồm bên dưới

$full_request_url = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' ? 'https' : 'http') . '://'. $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];

Nếu câu lệnh if ngắn ở trên quá khó đọc, bạn cũng có thể viết mã như thế này

$full_request_url = '';
if ((!empty($_SERVER['HTTPS'])) && ($_SERVER['HTTPS'] !== 'off')) {
  $full_request_url .= 'https://';
} else {
  $full_request_url .= 'http://';
}
$full_request_url .= $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];

Ghi chú. Bạn sẽ không thể trả lại phần sau ký tự băm "#", còn được gọi là phần phân đoạn của URL, vì nó không được gửi đến máy chủ như một phần yêu cầu của máy khách. Hàm băm chủ yếu được sử dụng để điều hướng phía máy khách trên các tiểu mục và tương ứng với một ID duy nhất trong HTML trên trang web. Vì vậy, nếu phần phân đoạn quan trọng, bạn sẽ cần sử dụng JavaScript để lấy nó

Chức năng lấy url yêu cầu đầy đủ

Biến HTTPS sẽ được đặt thành giá trị không trống nếu yêu cầu được thực hiện qua giao thức HTTPS, khi biết điều này, bạn có thể sử dụng hàm trống để kiểm tra xem biến đó có trống không

Vì ISS trên Windows có thể đặt biến thành "tắt" khi HTTPS không được sử dụng, nên bạn cũng cần kiểm tra xem biến đó có được đặt thành "tắt" không

Thông thường các yêu cầu HTTP trên web sẽ đi qua cổng 80 (hoặc 443 đối với HTTPS), do đó, trong hầu hết các trường hợp, không cần bao gồm số cổng;

$full_request_url = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' ? 'https' : 'http') . '://'. $_SERVER['HTTP_HOST'] . ':' . $_SERVER['SERVER_PORT'] . $_SERVER['REQUEST_URI'];

Bạn có thể dễ dàng tạo một hàm để trả về URL yêu cầu đầy đủ bất cứ khi nào cần

function full_request_url() {
  return (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' ? 'https' : 'http') . '://'. $_SERVER['HTTP_HOST'] . ':' . $_SERVER['SERVER_PORT'] . $_SERVER['REQUEST_URI'];
}

Nếu bạn đang ở trong ngữ cảnh hướng đối tượng, bạn có thể cân nhắc việc tránh sử dụng trực tiếp các siêu toàn cầu. Tránh sử dụng trực tiếp PHP Superglobals

Vệ sinh các biến do khách hàng kiểm soát

Một số biến máy chủ được kiểm soát bởi máy khách và có thể bị thao túng bởi những người dùng độc hại. Tuy nhiên, điều này không quan trọng—đối với hầu hết các phần—trừ khi bạn sử dụng nó ở nơi nhạy cảm, chẳng hạn như trong cơ sở dữ liệu hoặc thậm chí chỉ để tạo đường dẫn tuyệt đối cho các liên kết trên trang của bạn. Vui lòng không sử dụng các đường dẫn tuyệt đối—việc duy trì trang web của bạn bằng các URL liên quan đến gốc sẽ dễ dàng hơn nhiều và bạn sẽ tránh được sự cố đầu độc bộ nhớ cache của các liên kết của mình. Xem thêm. Đường dẫn tuyệt đối và tương đối

Ví dụ: nếu REQUEST_URI chứa các ký tự không hợp lệ, có thể dẫn đến phản hồi lỗi 404 được gửi tới người dùng/máy khách. Chỉ khi bạn chèn/sử dụng dữ liệu ở nơi nhạy cảm thì mới cần xác thực

Tương tự như vậy, biến HTTP_HOST có thể bị thao túng, nhưng làm như vậy có thể sẽ dẫn đến việc máy chủ web của bạn trả về sai trang web (nếu bạn sử dụng máy chủ ảo). Tuy nhiên, bạn vẫn nên cẩn thận vì một số máy chủ sẽ chỉ phục vụ một máy chủ ảo "mặc định" và nó có thể rơi trở lại ứng dụng PHP của bạn

Mặc dù nó thường không gây ra bất kỳ sự cố nào nếu ai đó thao túng biến máy chủ, nhưng đó vẫn có thể là sự cố do các cuộc tấn công đầu độc bộ đệm. Nếu một máy chủ bộ đệm đang lưu trữ các bản sao của các trang HTML của bạn và kẻ tấn công bằng cách nào đó quản lý để đưa một máy chủ khác vào các liên kết của bạn, thì kẻ tấn công có thể chuyển hướng thành công tất cả hoặc một phần lưu lượng truy cập của bạn đến trang web độc hại của riêng chúng

Do sự phức tạp liên quan, có lẽ tốt nhất là các nhà phát triển luôn xác thực các biến này. Bạn không thể mong đợi rằng những người khác có thể đang viết mã có cùng tổng quan về ứng dụng như bạn

Để xác thực biến HTTP_HOST trong ứng dụng PHP của bạn, bạn nên duy trì một mảng các máy chủ đã biết và chỉ cần sử dụng giá trị từ mảng thay vì trực tiếp từ HTTP_HOST. Đây là một sự bất tiện nhỏ để đạt được một chút bảo mật bổ sung

Việc xác thực REQUEST_URI phức tạp hơn một chút và cũng sẽ phụ thuộc vào cấu trúc trang web của bạn. Bạn có thể chọn sử dụng biểu thức chính quy và sau đó chỉ cho phép một số mẫu hợp lệ nhất định

Làm cách nào tôi có thể gọi một URL khác trong PHP?

Trả lời. Sử dụng hàm PHP header() . Mã PHP trong ví dụ sau sẽ chuyển hướng người dùng từ trang mà nó được đặt tới URL http. //www. thí dụ. com/trang-khác. php.

Làm cách nào bạn có thể kết nối với một URL trong PHP?

Nối HTTP_HOST(Máy chủ mà chúng tôi đã yêu cầu, e. g. www. Google. com, www. tên miền của bạn. com, v.v…) tên của máy chủ. Nối thêm REQUEST_URI(Tài nguyên mà chúng tôi đã yêu cầu, e. g. /mục lục. php, v.v…) vào chuỗi URL

Làm cách nào để kiểm tra URL tồn tại trong PHP?

Có thể kiểm tra sự tồn tại của một URL bằng cách kiểm tra mã trạng thái trong tiêu đề phản hồi . Mã trạng thái 200 là Phản hồi tiêu chuẩn cho các yêu cầu HTTP thành công và mã trạng thái 404 có nghĩa là URL không tồn tại. Chức năng được sử dụng. hàm get_headers(). Nó tìm nạp tất cả các tiêu đề được gửi bởi máy chủ để đáp ứng yêu cầu HTTP.