Hướng dẫn which of the following ways of referring file or directory in php - cách nào sau đây để giới thiệu tệp hoặc thư mục trong php

  1. Giới thiệu
  2. Sự khác biệt giữa các đường dẫn tuyệt đối và tương đối
  3. Con đường tuyệt đối
  4. Đường dẫn tương đối
  5. Tài liệu gốc
  6. Đường dẫn máy chủ web
  7. Kịch bản console. Điểm nhập cảnh duy nhất
  8. Các lệnh và hằng số PHP hữu ích
  9. Nhận xét (12)

Giới thiệu

Trang web của bạn tồn tại trong hai cõi cùng một lúc: thực tế và ảo.

Đối với khách truy cập trang web, nó hoàn toàn là một máy chủ ảo, theo nhiều cách khác với một máy chủ thực sự. Không có tập tin để bắt đầu. Tôi biết, lúc đầu thật khó tin, nhưng đó là một sự thật. Trong địa chỉ như http://example.com/file.html, file.html không phải là một 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 sự với một cái tên như vậy, nhưng nó không quan trọng. 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ó cần biết là một địa chỉ.virtual server, which in many ways is different from a real one. There are no files for starter. I know, it's hard to believe at first, but it's a fact. In the address like http://example.com/file.html, file.html is not a file. It's a part of URI, a virtual resource. There could be or could be not a real file with such a name, but it doesn't matter. Your browser cannot know that, and don't need to. All it needs to know is an address.

Đối với nhà phát triển trang web, mặt khác, trang web của họ là một chương trình nhất định chạy trên một máy chủ cụ thể, trên máy tính rất thực với ổ cứng, tệp và thư mục. Và tập lệnh PHP của bạn, trong khi đọc các tệp dữ liệu hoặc bao gồm các tập lệnh khác, đang làm việc với các tệp thực sự 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 đề.

Người dùng PHP đã nhầm lẫn các vấn đề này lúc đầu, làm những việc như không thể xác định được một tệp hiện có, gây nhầm lẫn các siêu liên kết với các tệp, bao gồm các tệp cục bộ thông qua HTTP và như vậy.

Tuy nhiên, để sắp xếp những thứ này tất cả những gì bạn cần là chỉ nắm bắt hai khái niệm đơn giản:

  1. Sự khác biệt giữa các đường dẫn tuyệt đối và tương đối.absolute and relative paths.
  2. Sự khác biệt giữa gốc của máy chủ web và gốc hệ thống tập tin.root of the web server and the filesystem root.

Sự khác biệt giữa các đường dẫn tuyệt đối và tương đối

Con đường tuyệt đối

  • Đường dẫn tương đốiroot, it is called absolute.
  • Tài liệu gốcrelative (which makes sense, as it is relative to our present position)

Đường dẫn máy chủ web

Kịch bản console. Điểm nhập cảnh duy nhất

Con đường tuyệt đối

Đường dẫn tương đối

Tài liệu gốc

/var/www/site/forum/index.php
/img/frame.gif
C
:\windows\command.com

Đường dẫn máy chủ web

Kịch bản console. Điểm nhập cảnh duy nhất

Các lệnh và hằng số PHP hữu ích

Nhận xét (12)

  • Trang web của bạn tồn tại trong hai cõi cùng một lúc: thực tế và ảo.
  • Đối với khách truy cập trang web, nó hoàn toàn là một máy chủ ảo, theo nhiều cách khác với một máy chủ thực sự. Không có tập tin để bắt đầu. Tôi biết, lúc đầu thật khó tin, nhưng đó là một sự thật. Trong địa chỉ như http://example.com/file.html, file.html không phải là một 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 sự với một cái tên như vậy, nhưng nó không quan trọng. 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ó cần biết là một địa chỉ.
  • Đối với nhà phát triển trang web, mặt khác, trang web của họ là một chương trình nhất định chạy trên một máy chủ cụ thể, trên máy tính rất thực với ổ cứng, tệp và thư mục. Và tập lệnh PHP của bạn, trong khi đọc các tệp dữ liệu hoặc bao gồm các tập lệnh khác, đang làm việc với các tệp thực sự tồn tại trên phương tiện vật lý.

Đường dẫn tương đối

Tài liệu gốc

Đường dẫn máy chủ web

Kịch bản console. Điểm nhập cảnh duy nhất

  • Các lệnh và hằng số PHP hữu ích
  • Nhận xét (12)
  • Trang web của bạn tồn tại trong hai cõi cùng một lúc: thực tế và ảo.
  • Đối với khách truy cập trang web, nó hoàn toàn là một máy chủ ảo, theo nhiều cách khác với một máy chủ thực sự. Không có tập tin để bắt đầu. Tôi biết, lúc đầu thật khó tin, nhưng đó là một sự thật. Trong địa chỉ như http://example.com/file.html, file.html không phải là một 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 sự với một cái tên như vậy, nhưng nó không quan trọng. 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ó cần biết là một địa chỉ.

Đối với nhà phát triển trang web, mặt khác, trang web của họ là một chương trình nhất định chạy trên một máy chủ cụ thể, trên máy tính rất thực với ổ cứng, tệp và thư mục. Và tập lệnh PHP của bạn, trong khi đọc các tệp dữ liệu hoặc bao gồm các tập lệnh khác, đang làm việc với các tệp thực sự tồn tại trên phương tiện vật lý.always builds it up to the absolute one. Both web-server and file system are doing that but different ways. So, let's learn them.

Tài liệu gốc

Đâ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 tin như

http://www.example.com/about/info.php
and
http://www.example.com/job/vacancy.php
7. Trong khi trên máy chủ web địa chỉ của nó là
http://www.example.com/about/info.php
and
http://www.example.com/job/vacancy.php
8

Và ở đây, điểm có thể được thấy rõ: có một phần, phổ biến cho cả hai địa chỉ:

http://www.example.com/about/info.php
and
http://www.example.com/job/vacancy.php
9, đó là nguồn gốc của sự 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 đầu từ gốc của máy chủ 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 hệ thống tập tin. Và nếu bạn cố gắng sử dụng nó trong PHP, nó sẽ dẫn đến thất bại: không có danh mục

$config_path __DIR__.'/../config/settings.php';
require 
$config_path;
0 trên ổ cứng!
Whereas for the script it's only a part of the full path - the filesystem path. And if you try to use it in PHP it will result in a failure: there is no
$config_path __DIR__.'/../config/settings.php';
require 
$config_path;
0 catalog on the HDD!

Để có được đường dẫn làm việc đến tệp này, chúng tôi phải thêm phần còn thiếu. Trong ví dụ của chúng tôi, đó là

$config_path __DIR__.'/../config/settings.php';
require 
$config_path;
1, được gọi là
$config_path __DIR__.'/../config/settings.php';
require 
$config_path;
2 và là tùy chọn cấu hình quan trọng nhất cho các tương tác hệ thống tệp. Trong PHP, bạn có thể truy cập nó thông qua
$config_path __DIR__.'/../config/settings.php';
require 
$config_path;
3.

Vì vậy, bây giờ bạn có thể nói rằng để làm cho bất kỳ đường dẫn hệ thống tệp nào hoạt động, nó phải tuyệt đối và được xây dựng bằng cách sử dụng

$config_path __DIR__.'/../config/settings.php';
require 
$config_path;
2. Vì vậy, một mã PHP chính xác để truy cập
http://www.example.com/about/info.php
and
http://www.example.com/job/vacancy.php
9 từ PHP sẽ làany file system path work, it should be absolute and built using
$config_path __DIR__.'/../config/settings.php';
require 
$config_path;
2. So a correct PHP code to access
http://www.example.com/about/info.php
and
http://www.example.com/job/vacancy.php
9 from PHP would be

$path $_SERVER['DOCUMENT_ROOT'] . "/forum/index.php";

Ở đây chúng tôi đang sử dụng một phần máy chủ web của đường dẫn, chi tiêu nó với root tài liệu. Voila!

Đường dẫn máy chủ 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ó tệp trên máy chủ. Người dùng trang web không bao giờ có quyền truy cập vào hệ thống tệp của máy chủ. Đối với trình duyệt, chỉ có một root trang web. Đó là không đổi và luôn luôn đơn giản là một dấu gạch chéo.site root only. Which is constant and always simply a slash.

Do đó, để tạo một liên kết HTML tuyệt đối, chỉ cần xây dựng nó từ root trang web - và bạn sẽ không bao giờ thấy lỗi 404 cho tệp hiện có nữa!

Hãy tưởng tượng trang web của bạn có hai phần,

http://www.example.com/about/info.php
and
http://www.example.com/job/vacancy.php

và trong

$config_path __DIR__.'/../config/settings.php';
require 
$config_path;
6 bạn muốn liên kết đến
$config_path __DIR__.'/../config/settings.php';
require 
$config_path;
7. Nếu bạn làm như vậy,
$config_path __DIR__.'/../config/settings.php';
require 
$config_path;
8, thì Trình duyệt sẽ không tìm thấy nó! Hãy nhớ rằng, nó luôn cố gắng xây dựng liên kết đến toàn bộ, 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à
define('ROOT_DIR'realpath(__DIR__.'/..'));
0 là sai. Để làm cho nó đúng, chúng ta phải làm cho liên kết này tuyệt đối, bắt đầu từ root trang web:
define('ROOT_DIR'realpath(__DIR__.'/..'));
1

Vì vậy, nó đi cho tất cả các liên kết nội bộ trên trang web - các tệp hình ảnh, JS và CSS, siêu liên kết hoặc bất kỳ tài nguyên nào khác có thể được nhấp vào hoặc tải trên trang.

Đối với các tài nguyên cục bộ, tốt hơn là chỉ làm cho nó đường dẫn, không có giao thức và tên miền - như

define('ROOT_DIR'realpath(__DIR__.'/..'));
1. Trong khi đối với các tài nguyên bên ngoài, các 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ư
define('ROOT_DIR'realpath(__DIR__.'/..'));
3.

Kịch bản console. Điểm nhập cảnh duy nhất

Thật đáng tiếc, nhưng đối với các tập lệnh giao diện điều khiển của chúng tôi, biến

$config_path __DIR__.'/../config/settings.php';
require 
$config_path;
3 hữu ích của chúng tôi là không khả dụng. Vì vậy, chúng tôi buộc phải sử dụng các đườ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ại.

Ví dụ: nếu ứng dụng của bạn được lưu trữ trong

define('ROOT_DIR'realpath(__DIR__.'/..'));
5 và có hai thư mục con,
define('ROOT_DIR'realpath(__DIR__.'/..'));
6 và
define('ROOT_DIR'realpath(__DIR__.'/..'));
7 và bạn muốn truy cập vào cái sau từ trước, bạn có thể viết mã sau:

$config_path __DIR__.'/../config/settings.php';
require 
$config_path;

Mặc dù về mặt kỹ thuật tuyệt đối (bắt đầu từ mộ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, bởi vì nếu tập lệnh gọi sẽ được chuyển vào một thư mục khác, nó sẽ không tìm thấy tệp cấu hình nữa.

Đây là lý do tại sao nên sử dụng một điểm nhập 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 nhập, một điểm cho các yêu cầu web và một cho các lệnh giao diện đ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 nhập cho mặt trước web, một điểm nhập cho các ứng dụng bảng điều khiển và tệp bootstrap:

  • /var/www/app/html/index.php
  • /var/www/app/bin/console.php
  • /var/www/app/config/bootstrap.php

Sau đó, chúng ta có thể viết mã sau (trong số những thứ khác) trong

define('ROOT_DIR'realpath(__DIR__.'/..'));
8:

define('ROOT_DIR'realpath(__DIR__.'/..'));

Để xác định hằng số

define('ROOT_DIR'realpath(__DIR__.'/..'));
9 chứa đường dẫn đến thư mục gốc của ứng dụng của chúng tôi (nằm ngay trên
require __DIR__.'/../config/bootstrap.php';
0 DIR).

Và sau đó trong cả

require __DIR__.'/../config/bootstrap.php';
1 và
require __DIR__.'/../config/bootstrap.php';
2

require __DIR__.'/../config/bootstrap.php';

Để làm cho tất cả các công cụ bootstrap có sẵn, bao gồm cả hằng số root_dir. Từ bây giờ chúng tôi có thể sử dụng nó để xây dựng các đường dẫn tuyệt đối bắt đầu từ thư mục gốc (miễn là các tập lệnh của chúng tôi được gọi qua điểm nhập cảnh hoặc bảng điều khiển một):

include ROOT_DIR.'/config/settings.php';

Việc triển khai ví dụ có thể được tìm thấy trong bảng điều khiển nghệ nhân hoặc symfony của Laravel.

Tất nhiên, cả hai điểm nhập nên thực hiện một loại người giải quyết để gọi tất cả các trang và bảng điều khiển khác nhưng điều đó hơi nằm ngoài phạm vi của bài viết này.

Các lệnh và hằng số PHP hữu ích

Có những lệnh và hằng số của Hepful trong PHP để giảm bớt nội suy đường dẫn. Một số trong số họ là:

  • require __DIR__.'/../config/bootstrap.php';
    3 Một hằng số chứa đường dẫn tuyệt đối đầy đủ đến tệp hiện đang thực thi.
  • require __DIR__.'/../config/bootstrap.php';
    4 Một hằng số chứa đường dẫn đến một thư mục trong đó nằm trong tệp hiện đang thực thi (thực tế nó chỉ là
    require __DIR__.'/../config/bootstrap.php';
    3 mà không có tên tệp và dấu gạch chéo kết thúc)
  • Lệnh
    require __DIR__.'/../config/bootstrap.php';
    6 sẽ chuyển đổi một đường dẫn tương đối thành một đường dẫn tuyệt đối
  • require __DIR__.'/../config/bootstrap.php';
    7 sẽ cung cấp cho bạn thư mục hiện tại

Những bài viết liên quan:

  • Báo cáo lỗi PHP
  • Bạn có thực sự cần kiểm tra cả isset () và trống () cùng một lúc không?
  • Có gì sai với các bài báo phổ biến nói với bạn rằng FOO nhanh hơn thanh?
  • MVC theo thuật ngữ đơn giản hơn hoặc cấu trúc của một ứng dụng web hiện đại
  • Cách có được thứ hạng của một người chơi dựa trên điểm số
  • Nhà điều hành ưu tiên hoặc làm thế nào 'hoặc chết ()' hoạt động.
  • Bạn có lạm dụng nhà điều hành Null Coalescing (và ISSET/trống rỗng) không?
  • Tại sao tôi nên sử dụng các câu lệnh đã chuẩn bị nếu thoát ra là an toàn?
  • So sánh chuỗi số
  • Các máy phát điện có thực sự làm giảm việc sử dụng bộ nhớ không?
  • Bài viết
  • Làm thế nào để biến Stack Overflow thành một nơi tốt đẹp
  • Lặp đi lặp lại trên mảng nhận được các vật phẩm nhìn trước

Các tập tin và thư mục trong PHP là gì?

Các tệp trong thư mục có thể được đọc bằng hàm php scandir (). Scandir () có hai đối số. Đối số đầu tiên là đường dẫn thư mục được quét. Đối số tùy chọn thứ hai chỉ định cách sắp xếp danh sách thư mục.. scandir() takes two arguments. The first argument is the path the directory to be scanned. The second optional argument specifies how the directory listing is to be sorted.

Điều gì có nghĩa là __ dir __ trong PHP?

__Dir__ có thể được sử dụng để có được thư mục làm việc mã hiện tại.Nó đã được giới thiệu trong PHP bắt đầu từ phiên bản 5.3.Nó tương tự như sử dụng dirname (__ file__).Thông thường, nó được sử dụng để bao gồm các tệp khác có trong một tệp được bao gồm.used to obtain the current code working directory. It has been introduced in PHP beginning from version 5.3. It is similar to using dirname(__FILE__). Usually, it is used to include other files that is present in an included file.

PHP có phải là một thư mục hoặc tệp?

Hàm is_dir () trong PHP được sử dụng để kiểm tra xem tệp được chỉ định có phải là thư mục hay không.Tên của tệp được gửi dưới dạng tham số cho hàm is_dir () và nó trả về true nếu tệp là một thư mục khác, nó trả về sai.Các tham số được sử dụng: Hàm is_dir () trong PHP chỉ chấp nhận một tham số.. The name of the file is sent as a parameter to the is_dir() function and it returns True if the file is a directory else it returns False. Parameters Used: The is_dir() function in PHP accepts only one parameter.

Làm cách nào để tham chiếu một tệp trong PHP?

PHP, bạn cũng có thể:..
Sử dụng bao gồm '../../meta.PHP ';trong /tiêu đề.PHP nếu bạn đang gọi tập lệnh của bạn từ /trang /trang1.Tệp PHP,.
Sử dụng bao gồm dirname (__ File__).'/Meta.PHP ';trong /tiêu đề.PHP,.
Sử dụng bao gồm $ _Server ['Document_root'].'/Meta.PHP ';trong tiêu đề.PHP ..