Review Cách lấy đường dẫn trong PHP
Mẹo Hướng dẫn Cách lấy đường dẫn trong PHP Chi Tiết
Bùi Lam Khê đang tìm kiếm từ khóa Cách lấy đường dẫn trong PHP được Cập Nhật vào lúc : 2022-12-17 07:08:04 . Với phương châm chia sẻ Thủ Thuật Hướng dẫn trong nội dung bài viết một cách Chi Tiết Mới Nhất. Nếu sau khi đọc tài liệu vẫn ko hiểu thì hoàn toàn có thể lại Comments ở cuối bài để Mình lý giải và hướng dẫn lại nha.Tên tệp đường dẫn đầy đủ hiện tại được giữ trong biến khối mạng lưới hệ thống
$path = $_SERVER['DOCUMENT_ROOT'] . "/forum/index.php";2. Bạn hoàn toàn có thể sử dụng hiệu suất cao $path = $_SERVER['DOCUMENT_ROOT'] . "/forum/index.php";3 để lấy tên tệp mà không cần đường dẫn; . Ví dụ, Nội dung chính Show- Sự khác lạ giữa đường dẫn tuyệt đối và tương đốiđường dẫn tuyệt đốiđường dẫn tương đốigốc tài liệuĐường dẫn sever webTập lệnh bảng điều khiển. Điểm vào duy nhấtLàm cách nào để sử dụng đường dẫn trong PHP?Làm cách nào để sử dụng __ dir __ trong PHP?Làm cách nào để tạo đường dẫn cho tệp trong PHP?
Sử dụng hàm
$path = $_SERVER['DOCUMENT_ROOT'] . "/forum/index.php";5, theo sau là lệnh $path = $_SERVER['DOCUMENT_ROOT'] . "/forum/index.php";6 (không tiếp tục tập lệnh hiện tại). Ví dụ,Để tải lại (làm mới) trang hiện tại, bạn hoàn toàn có thể
Mảng inSử dụng hàm có sẵn
$a = array(-1 => 5); echo $a[-1]; var_dump($a);0 để nối những phần tử của mảng thành một chuỗi, e. g. ,Mặt khác,
$a = array(-1 => 5); echo $a[-1]; var_dump($a);1 tách một chuỗi thành một mảng$str1 = 'apple,orange,banana'; var_dump(explode(',', $str1)); $str2 = 'apple orange banana'; var_dump(explode(' ', $str2));Chỉ số mảng phủ định so với. Chỉ mục vị trí chuỗi phủ địnhBạn hoàn toàn có thể sử dụng khóa mảng âm trong một mảng phối hợp. Ví dụ,
$a = array(-1 => 5); echo $a[-1]; var_dump($a);Khóa mảng phủ định khác với chỉ mục vị trí phủ định cho chuỗi, chỉ mục này lập chỉ mục vị trí từ phía sau chuỗi. Ví dụ,
Đối với khách truy cập trang web, đó hoàn toàn là một sever ảo, theo nhiều cách thức khác với sever thực. Không có tập tin cho những người dân khởi đầu. Tôi biết, thoạt nghe thật khó tin, nhưng đó là sự việc thật. Trong địa chỉ như
$path = $_SERVER['DOCUMENT_ROOT'] . "/forum/index.php";7, $path = $_SERVER['DOCUMENT_ROOT'] . "/forum/index.php";8 không phải là tệp. Đó là một phần của URI, một tài nguyên ảo. Có thể có hoặc không thể có một tệp thực với tên như vậy, nhưng điều đó không thành vấn đề. Trình duyệt của bạn không thể biết điều đó và không cần. Tất cả những gì nó nên phải biết là một địa chỉMặt khác, đối với nhà phát triển trang web, trang web của tớ là một chương trình nhất định chạy trên một sever rõ ràng, trên một máy tính thực có ổ cứng, tệp và thư mục. Và tập lệnh PHP của bạn, trong khi đọc những tệp tài liệu hoặc gồm có những tập lệnh khác, đang hoạt động và sinh hoạt giải trí với những tệp thực như vậy tồn tại trên phương tiện vật lý
Vì vậy thuyết nhị nguyên này là gốc rễ của nhiều vấn đề
Ban đầu, người tiêu dùng PHP rất nhầm lẫn những vấn đề này, làm những việc như không thể định vị một tệp hiện có, nhầm lẫn Một trong những siêu link với những tệp, gồm có những tệp cục bộ qua HTTP, v.v.
Tuy nhiên, để sắp xếp những thứ này ra, tất cả những gì bạn cần là nắm được hai khái niệm đơn giản.
Sự khác lạ giữa đường dẫn tuyệt đối và tương đốiSự khác lạ giữa gốc của sever web và gốc của khối mạng lưới hệ thống tập tinSự khác lạ giữa đường dẫn tuyệt đối và tương đối
Nó khá đơn giản
- Nếu đường dẫn được xây dựng bắt nguồn từ gốc khối mạng lưới hệ thống, nó được gọi là đường dẫn tuyệt đốiNếu đường dẫn được tạo bắt nguồn từ vị trí hiện tại, thì nó được gọi là tương đối (điều này còn có ý nghĩa vì nó tương đối với vị trí hiện tại của tất cả chúng ta)
Nó hoàn toàn giống với những hướng dẫn trong môi trường tự nhiên thiên nhiên sống đời thường thực. Với địa chỉ tuyệt đối, địa chỉ bưu chính, ví dụ như "7119 W Sunset Blvd West Hollywood, CA 90046", bạn hoàn toàn có thể tìm thấy vị trí từ bất kể đâu. Tuy nhiên, với những hướng dẫn tương đối, ví dụ như "giữ ba khối theo cách này rồi rẽ sang phải" sẽ chỉ hoạt động và sinh hoạt giải trí từ vị trí hiện tại, nếu không sẽ khiến bạn lạc lối
Vì vậy, nó đi theo những con phố trong thế giới máy tính. được đáp ứng địa chỉ tuyệt đối, bạn luôn hoàn toàn có thể đến nơi, bất kể bạn bắt nguồn từ đâu. Trong khi đường dẫn tương đối phức tạp và nên được sử dụng một cách thận trọng, chỉ khi bạn biết chắc như đinh mình đang ở đâu vào thời điểm hiện nay
đường dẫn tuyệt đối
Vì vậy, một lần nữa. một đường dẫn tuyệt đối là một đường dẫn bắt nguồn từ gốc khối mạng lưới hệ thống
Một số ví dụ về đường dẫn tuyệt đối
/var/www/site/forum/index.php/img/frame.gif
C:windowscommand.com
Lưu ý rằng trong những khối mạng lưới hệ thống giống Unix (và sever web), thư mục gốc được định nghĩa là dấu gạch chéo -
$path = $_SERVER['DOCUMENT_ROOT'] . "/forum/index.php";9. Và điều này rất quan trọng để biết. Nó không riêng gì có là một điểm đánh dấu, mà còn là một một địa chỉ đủ điều kiện, một đường dẫn. Nhập $path = $_SERVER['DOCUMENT_ROOT'] . "/forum/index.php";0 trong bảng điều khiển unix của bạn và bạn sẽ đến thư mục gốc. Điều này cũng đúng với tất cả những sever web. Vì vậy, bạn hoàn toàn có thể biết rằng trong địa chỉ $path = $_SERVER['DOCUMENT_ROOT'] . "/forum/index.php";1, dấu gạch chéo ở cuối không phải để trang trí mà là một địa chỉ thông thường - địa chỉ của trang chủTrên Windows, khối mạng lưới hệ thống tệp không còn gốc chung cho toàn bộ khối mạng lưới hệ thống mà được phân chia Một trong những đĩa, do đó, đường dẫn tuyệt đối bắt nguồn từ ký tự ổ đĩa. Trong khi mỗi đĩa có gốc riêng, đó là dấu gạch chéo ngược -
$path = $_SERVER['DOCUMENT_ROOT'] . "/forum/index.php";2. Vì vậy, bạn hoàn toàn có thể gõ $path = $_SERVER['DOCUMENT_ROOT'] . "/forum/index.php";3 và truy cập thư mục gốc của đĩa hiện tạiVì vậy, bạn hoàn toàn có thể nói rằng rằng những hiên chạy cửa số khá khó hiểu, nhưng để đơn giản, chúng tôi sẽ vờ vịt rằng chúng tôi chỉ có một đĩa và trong ranh giới của nó, những quy tắc gần in như trong Unix
Vì vậy, giờ đây bạn hoàn toàn có thể nói rằng một đường dẫn tuyệt đối từ một đường dẫn tương đối - nó bắt nguồn từ gốc, đó là
- trên khối mạng lưới hệ thống tệp Unix, đó là $path = $_SERVER['DOCUMENT_ROOT'] . "/forum/index.php";9trên sever web lại là ________ 59trên Windows, đó là $path = $_SERVER['DOCUMENT_ROOT'] . "/forum/index.php";2 (đối với đĩa hiện tại) hoặc $path = $_SERVER['DOCUMENT_ROOT'] . "/forum/index.php";7 (toàn khối mạng lưới hệ thống)
đường dẫn tương đối
Nếu bạn không đáp ứng root, điều đó nghĩa là đường dẫn của bạn là tương đối
Ví dụ đơn giản nhất về đường dẫn tương đối chỉ là tên gọi tệp, ví dụ như
$path = $_SERVER['DOCUMENT_ROOT'] . "/forum/index.php";8. Vì vậy, người ta nên thận trọng với những đường dẫn tương đối. Nếu thư mục hiện tại của bạn là $path = $_SERVER['DOCUMENT_ROOT'] . "/forum/index.php";9 thì $path = $_SERVER['DOCUMENT_ROOT'] . "/forum/index.php";8 sẽ là một, nhưng nếu bạn chuyển nó sang $a = array(-1 => 5); echo $a[-1]; var_dump($a);41 thì nó sẽ là một thư mục khácCác ví dụ đường dẫn tương đối khác
- $a = array(-1 => 5);
echo $a[-1];
var_dump($a);42 (tệp nằm trong thư mục hiện tại. Giống như chỉ $a = array(-1 => 5);
echo $a[-1];
var_dump($a);43)$a = array(-1 => 5);
echo $a[-1];
var_dump($a);44 (tệp nằm trong thư mục hình ảnh trong thư mục hiện tại)$a = array(-1 => 5);
echo $a[-1];
var_dump($a);45 (tệp nằm trong thư mục cao hơn một cấp so với thư mục hiện tại)$a = array(-1 => 5);
echo $a[-1];
var_dump($a);46 (tệp nằm trong thư mục cao hơn hai cấp so với thư mục hiện tại)
Điều bạn nên biết là khối mạng lưới hệ thống, khi gặp một đường dẫn tương đối, luôn xây dựng nó thành một đường dẫn tuyệt đối. Cả sever web và khối mạng lưới hệ thống tệp đều đang làm điều đó nhưng theo những cách rất khác nhau. Vì vậy, hãy tìm hiểu chúng
gốc tài liệu
Đây là phần thú vị nhất. Có một điểm mà thế giới thực gặp thế giới ảo
Hãy tưởng tượng có một tệp như
$a = array(-1 => 5); echo $a[-1]; var_dump($a);47. Trong khi trên sever web, địa chỉ của nó là $a = array(-1 => 5); echo $a[-1]; var_dump($a);48Và ở đây điểm hoàn toàn có thể được nhìn thấy rõ ràng. có một phần, chung cho tất cả hai địa chỉ.
$a = array(-1 => 5); echo $a[-1]; var_dump($a);49, đó là nguồn gốc của sự việc nhầm lẫnĐối với trình duyệt, đường dẫn này hoàn toàn tuyệt đối, bắt nguồn từ thư mục gốc của sever web.
Trong khi đối với tập lệnh, nó chỉ là một phần của đường dẫn đầy đủ - đường dẫn khối mạng lưới hệ thống tệp. Và nếu bạn nỗ lực sử dụng nó trong PHP, nó sẽ dẫn đến lỗi. không còn khuôn khổ
Để đã có được đường dẫn thao tác đến tệp này, tất cả chúng ta phải thêm phần không đủ. Trong ví dụ của chúng tôi, nó là ________ 231, được gọi là ________ 232 và là tùy chọn thông số kỹ thuật quan trọng nhất cho những tương tác khối mạng lưới hệ thống tệp. Trong PHP, bạn hoàn toàn có thể truy cập nó qua
$str1 = 'apple,orange,banana'; var_dump(explode(',', $str1)); $str2 = 'apple orange banana'; var_dump(explode(' ', $str2));33Vì vậy, giờ đây bạn hoàn toàn có thể nói rằng rằng để làm cho bất kỳ đường dẫn khối mạng lưới hệ thống tệp nào hoạt động và sinh hoạt giải trí, nó phải là đường dẫn tuyệt đối và được xây dựng bằng phương pháp sử dụng
$str1 = 'apple,orange,banana'; var_dump(explode(',', $str1)); $str2 = 'apple orange banana'; var_dump(explode(' ', $str2));32. Vì vậy, một mã PHP đúng chuẩn để truy cập $a = array(-1 => 5); echo $a[-1]; var_dump($a);49 từ PHP sẽ là$path = $_SERVER['DOCUMENT_ROOT'] . "/forum/index.php";ở đây chúng tôi đang sử dụng một phần sever web của đường dẫn, thêm vào trước nó bằng tài liệu gốc. thì đấy
Đường dẫn sever web
đơn giản hơn nhiều
Giống như đã nói trước đây, đối với trình duyệt, không còn tệp nào trên sever. Người dùng trang web không bao giờ có quyền truy cập vào khối mạng lưới hệ thống tệp của sever. Đối với trình duyệt, chỉ có một trang gốc. Đó là hằng số và luôn luôn chỉ đơn giản là một dấu gạch chéo
Do đó, để tạo một link HTML tuyệt đối, chỉ việc tạo link đó từ thư mục gốc của trang web - và bạn sẽ không bao giờ hội ngộ lỗi 404 đối với tệp hiện có
Hãy tưởng tượng trang web của bạn có hai phần,
$a = array(-1 => 5); echo $a[-1]; var_dump($a);4và trong
$str1 = 'apple,orange,banana'; var_dump(explode(',', $str1)); $str2 = 'apple orange banana'; var_dump(explode(' ', $str2));36 bạn muốn link tới $str1 = 'apple,orange,banana'; var_dump(explode(',', $str1)); $str2 = 'apple orange banana'; var_dump(explode(' ', $str2));37. Nếu bạn làm như vậy, $str1 = 'apple,orange,banana'; var_dump(explode(',', $str1)); $str2 = 'apple orange banana'; var_dump(explode(' ', $str2));38, thì trình duyệt sẽ không tìm thấy nó. Hãy nhớ rằng, nó luôn nỗ lực xây dựng link đến link đầy đủ, sử dụng vị trí hiện tại, là $path = $_SERVER['DOCUMENT_ROOT'] . "/forum/index.php";9 và do đó, đường dẫn kết quả là $a = array(-1 => 5); echo $a[-1]; var_dump($a);50, điều này là sai. Để làm cho đúng, tất cả chúng ta phải làm cho link này trở nên tuyệt đối, bắt nguồn từ thư mục gốc của trang web. $a = array(-1 => 5); echo $a[-1]; var_dump($a);51Vì vậy, nó áp dụng cho tất cả những link nội bộ trên trang web - hình ảnh, tệp js và css, siêu link hoặc bất kỳ tài nguyên nào khác hoàn toàn có thể được nhấp vào hoặc tải trên trang
Đối với những tài nguyên cục bộ, tốt hơn là chỉ tạo đường dẫn, không còn giao thức và tên miền - như
$a = array(-1 => 5); echo $a[-1]; var_dump($a);51. Trong khi đối với những tài nguyên bên phía ngoài, những thuộc tính này là bắt buộc và do đó, nó phải là một URL đủ điều kiện như $a = array(-1 => 5); echo $a[-1]; var_dump($a);53Tập lệnh bảng điều khiển. Điểm vào duy nhất
Thật đáng tiếc, nhưng đối với tập lệnh bảng điều khiển, biến
$str1 = 'apple,orange,banana'; var_dump(explode(',', $str1)); $str2 = 'apple orange banana'; var_dump(explode(' ', $str2));33 hữu ích của chúng tôi không khả dụng. Vì vậy, chúng tôi buộc phải sử dụng những đường dẫn liên quan đến tập lệnh gọi, xuất phát từ vị trí của tập lệnh hiện tạiVí dụ: nếu ứng dụng của bạn được tàng trữ trên
$a = array(-1 => 5); echo $a[-1]; var_dump($a);55 và có hai thư mục con, $a = array(-1 => 5); echo $a[-1]; var_dump($a);56 và $a = array(-1 => 5); echo $a[-1]; var_dump($a);57, và bạn muốn truy cập thư mục sau từ thư mục trước, bạn hoàn toàn có thể viết đoạn mã sau$str1 = 'apple,orange,banana'; var_dump(explode(',', $str1)); $str2 = 'apple orange banana'; var_dump(explode(' ', $str2));3Mặc dù về mặt kỹ thuật là tuyệt đối (bắt nguồn từ dấu gạch chéo), đường dẫn này về cơ bản là liên quan đến tập lệnh gọi, chính bới nếu tập lệnh gọi sẽ được chuyển vào thư mục khác, thì nó sẽ không tìm thấy tệp thông số kỹ thuật nữa
Đây là nguyên do tại sao nên sử dụng một điểm vào duy nhất cho ứng dụng của bạn. Hoặc - như trong trường hợp của chúng tôi - hai điểm vào, một cho yêu cầu web và một cho lệnh điều khiển
Vì vậy, đối với ứng dụng hư cấu của chúng tôi, chúng tôi sẽ có ba tệp - một điểm vào cho mặt trước web, một điểm vào cho những ứng dụng bảng điều khiển và một tệp bootstrap
- /var/www/ứng dụng/html/chỉ mục. php/var/www/app/bin/console. php/var/www/app/config/bootstrap. php
Sau đó, tất cả chúng ta hoàn toàn có thể viết đoạn mã sau (trong số những thứ khác) vào
$a = array(-1 => 5); echo $a[-1]; var_dump($a);58$a = array(-1 => 5); echo $a[-1]; var_dump($a);5để xác định hằng số
$a = array(-1 => 5); echo $a[-1]; var_dump($a);59 chứa đường dẫn đến thư mục gốc của ứng dụng của chúng tôi (ngay phía trên thư mục /var/www/site/forum/index.php/img/frame.gif
C:windowscommand.com70)
Và sau đó trong cả
/var/www/site/forum/index.php/img/frame.gif
C:windowscommand.com71 và /var/www/site/forum/index.php
/img/frame.gif
C:windowscommand.com72/var/www/site/forum/index.php
/img/frame.gif
C:windowscommand.com7
để đáp ứng tất cả nội dung bootstrap, gồm có hằng số ROOT_DIR. Từ giờ trở đi, tất cả chúng ta hoàn toàn có thể sử dụng nó để xây dựng những đường dẫn tuyệt đối bắt nguồn từ thư mục gốc (miễn là những tập lệnh của tất cả chúng ta được gọi thông qua điểm vào web hoặc bảng điều khiển)
$path = $_SERVER['DOCUMENT_ROOT'] . "/forum/index.php";1Có thể tìm thấy những triển khai ví dụ trong Laravel's Artisan hoặc Symfony Console
Tất nhiên, cả hai điểm vào nên triển khai một loại trình phân giải để gọi tất cả những trang và tập lệnh bảng điều khiển khác nhưng điều đó hơi nằm ngoài phạm vi của nội dung bài viết này
Post a Comment