suchen
HeimBackend-EntwicklungPHP-Tutorial为什么PHP的主流框架和CMS采用绝对路径而不是相对路径?

按理说,相对路径遍历的目录比绝对路径要少呀。 比如../admin/明显要比c:/wamp/www/cms/templates/admin/遍历的目录少。

情境:使用include(_once),require(_once)时。

注: 此处所指的绝对路径是指服务器使用的是文件的物理路径(也称为根相对路径),无论是使用"__DIR__"还是一个变量。 此处所指的相对路径是目录相对路径(./xxx.php),不是文件名的相对路径(xxx.php)。

可能性1:使用相对路径会解析成绝对路径再执行。

结果:手册上表示相对路径不会被解析成绝对路径@jackeychen

可能性2:include_path()对效率会有影响。

结果:手册上说明除了类似于xxx.php的文件名之外,只要是路径,就不会再使用includepath()(但是@zhaoyi指出php5.2之前相对路径还是会受includepath影响,Laruence在10年的一片文章也提到相对路径受到include_path的影响(其实他指的是文件名的相对目录))

附1:PHP手册 include函数:被包含文件先按参数给出的路径寻找,如果没有给出目录(只有文件名)时则按照 includepath 指定的目录寻找。如果在 includepath 下没找到该文件则 include 最后才在调用脚本文件所在的目录和当前工作目录下寻找。如果最后仍未找到文件则 include 结构会发出一条警告;这一点和 require 不同,后者会发出一个致命错误。如果定义了路径——不管是绝对路径(在 Windows 下以盘符或者 \ 开头,在 Unix/Linux 下以 / 开头)还是当前目录的相对路径(以 . 或者 .. 开头)——include_path 都会被完全忽略。例如一个文件以 ../ 开头,则解析器会在当前目录的父目录下寻找该文件。

附2:参考文章 《深入理解PHP之require/include顺序》 from Laruence.

回复内容:

按理说,相对路径遍历的目录比绝对路径要少呀。 比如../admin/明显要比c:/wamp/www/cms/templates/admin/遍历的目录少。

情境:使用include(_once),require(_once)时。

注: 此处所指的绝对路径是指服务器使用的是文件的物理路径(也称为根相对路径),无论是使用"__DIR__"还是一个变量。 此处所指的相对路径是目录相对路径(./xxx.php),不是文件名的相对路径(xxx.php)。

可能性1:使用相对路径会解析成绝对路径再执行。

结果:手册上表示相对路径不会被解析成绝对路径@jackeychen

可能性2:include_path()对效率会有影响。

结果:手册上说明除了类似于xxx.php的文件名之外,只要是路径,就不会再使用includepath()(但是@zhaoyi指出php5.2之前相对路径还是会受includepath影响,Laruence在10年的一片文章也提到相对路径受到include_path的影响(其实他指的是文件名的相对目录))

附1:PHP手册 include函数:被包含文件先按参数给出的路径寻找,如果没有给出目录(只有文件名)时则按照 includepath 指定的目录寻找。如果在 includepath 下没找到该文件则 include 最后才在调用脚本文件所在的目录和当前工作目录下寻找。如果最后仍未找到文件则 include 结构会发出一条警告;这一点和 require 不同,后者会发出一个致命错误。如果定义了路径——不管是绝对路径(在 Windows 下以盘符或者 \ 开头,在 Unix/Linux 下以 / 开头)还是当前目录的相对路径(以 . 或者 .. 开头)——include_path 都会被完全忽略。例如一个文件以 ../ 开头,则解析器会在当前目录的父目录下寻找该文件。

附2:参考文章 《深入理解PHP之require/include顺序》 from Laruence.

其实主要的问题是程序设计的问题:
dirA/a1.php, a2.php
其中a1.php包含了a2.php,代码如下:include 'a2.php';
dirB/b.php
b.php里面要包含dirA/a1.php
,然后a1.php被载入,然后他包含a2.php的代码就出错了。

所以这些框架就只能用绝对路径来了。

我见到的框架 一般是在index.php 定义一个 ROOT: 像这样子: define(ROOT, dirname(FILE));

在内部的话解析路径的话就只要加ROOT就好了,不会像你说的那样直接写绝对路径(你说:为什么PHP的主流框架和CMS都是用绝对路径而不是相对路径? )

另外一个问题, 相对路径也是要解析成绝对路径然后再去读取目录数据, 所以解析的路径都一样的。

最主要的原因是性能,绝对路径速度快。

影响性能的原因主要有两个:

include语句算法,虽然官网提到使用相对路径后,忽略include_path

被包含文件先按参数给出的路径寻找,如果没有给出目录(只有文件名)时则按照 includepath 指定的目录寻找。如果在 includepath 下没找到该文件则 include 最后才在调用脚本文件所在的目录和当前工作目录下寻找。如果最后仍未找到文件则 include 结构会发出一条警告;这一点和 require 不同,后者会发出一个致命错误。

如果定义了路径——不管是绝对路径(在 Windows 下以盘符或者 \ 开头,在 Unix/Linux 下以 / 开头)还是当前目录的相对路径(以 . 或者 .. 开头)——include_path 都会被完全忽略。例如一个文件以 ../ 开头,则解析器会在当前目录的父目录下寻找该文件。

php5.2之前我测试过还是会受include_path影响,最新版本不清楚。

apc等缓存绝对路径。如果使用相对路径,也要转成绝对路径做hash。使用绝对路径省了这层转换。

用绝对路径,可以减少花在解决OS路径的时间

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Erklären Sie, wie sich das Lastausgleich auf das Sitzungsmanagement auswirkt und wie es angegangen werden soll.Erklären Sie, wie sich das Lastausgleich auf das Sitzungsmanagement auswirkt und wie es angegangen werden soll.Apr 29, 2025 am 12:42 AM

Lastausgleich beeinflusst das Sitzungsmanagement, kann jedoch durch Sitzungsreplikation, Sitzungsklebrigkeit und zentraler Sitzungsspeicher gelöst werden. 1. Sitzungsreplikationsdaten zwischen Servern. 2. Session Stickiness lenkt Benutzeranfragen auf denselben Server. 3. Zentraler Sitzungsspeicher verwendet unabhängige Server wie Redis, um Sitzungsdaten zu speichern, um die Datenfreigabe zu gewährleisten.

Erläutern Sie das Konzept der Sitzungsperrung.Erläutern Sie das Konzept der Sitzungsperrung.Apr 29, 2025 am 12:39 AM

SessionLockingIsatechniqueUTToensureUsers'SSessionSessionSeSexclusivetooneuseratatim.itiscrialtforpreventingDatacorruptionandSecurityBreachesinmulti-UserApplications

Gibt es Alternativen zu PHP -Sitzungen?Gibt es Alternativen zu PHP -Sitzungen?Apr 29, 2025 am 12:36 AM

Zu den Alternativen zu PHP-Sitzungen gehören Cookies, Token-basierte Authentifizierung, datenbankbasierte Sitzungen und Redis/Memcached. 1. Kookies verwalten Sitzungen, indem sie Daten über den Kunden speichern, was einfach, aber nur gering ist. 2. Altbasierte Authentifizierung verwendet Token, um Benutzer zu überprüfen, was sehr sicher ist, aber zusätzliche Logik erfordert. 3.Database-basiertssesses speichert Daten in der Datenbank, was eine gute Skalierbarkeit aufweist, die Leistung jedoch beeinflusst. V.

Definieren Sie den Begriff 'Sitzung' im Kontext von PHP.Definieren Sie den Begriff 'Sitzung' im Kontext von PHP.Apr 29, 2025 am 12:33 AM

Sessionhijacking bezieht sich auf einen Angreifer, der sich als Benutzer ausgibt, indem die SessionID des Benutzers angezeigt wird. Zu den Präventionsmethoden gehören: 1) Verschlüsseln der Kommunikation mit HTTPS; 2) Überprüfung der Quelle der SessionID; 3) mit einem sicheren Algorithmus zur Sitzung der Sitzung; 4) regelmäßig aktualisieren die SitzungID.

Was ist die vollständige Form von PHP?Was ist die vollständige Form von PHP?Apr 28, 2025 pm 04:58 PM

In dem Artikel werden PHP erörtert, in dem die vollständige Form, Hauptnutzungen in der Webentwicklung, der Vergleich mit Python und Java und seine Lernen des Lernens für Anfänger beschrieben werden.

Wie handelt es sich bei PHP um Formulardaten?Wie handelt es sich bei PHP um Formulardaten?Apr 28, 2025 pm 04:57 PM

PHP behandelt Formdaten mit $ \ _ post und $ \ _ GET Superglobals, wobei die Sicherheit durch Validierung, Bereinigung und sichere Datenbankinteraktionen gewährleistet ist.

Was ist der Unterschied zwischen PHP und ASP.NET?Was ist der Unterschied zwischen PHP und ASP.NET?Apr 28, 2025 pm 04:56 PM

Der Artikel vergleicht PHP und ASP.NET und konzentriert sich auf ihre Eignung für groß angelegte Webanwendungen, Leistungsunterschiede und Sicherheitsfunktionen. Beide sind für große Projekte lebensfähig, aber PHP ist Open-Source und plattformunabhängig, während ASP.NET,

Ist PHP eine Fallempfindlichkeit?Ist PHP eine Fallempfindlichkeit?Apr 28, 2025 pm 04:55 PM

Die Fallempfindlichkeit von PHP variiert: Funktionen sind unempfindlich, während Variablen und Klassen empfindlich sind. Zu den Best Practices gehören eine konsistente Benennung und Verwendung von Fall-unempfindlichen Funktionen für Vergleiche.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

SublimeText3 Linux neue Version

SublimeText3 Linux neue Version

SublimeText3 Linux neueste Version

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

VSCode Windows 64-Bit-Download

VSCode Windows 64-Bit-Download

Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

Sicherer Prüfungsbrowser

Sicherer Prüfungsbrowser

Safe Exam Browser ist eine sichere Browserumgebung für die sichere Teilnahme an Online-Prüfungen. Diese Software verwandelt jeden Computer in einen sicheren Arbeitsplatz. Es kontrolliert den Zugriff auf alle Dienstprogramme und verhindert, dass Schüler nicht autorisierte Ressourcen nutzen.

PHPStorm Mac-Version

PHPStorm Mac-Version

Das neueste (2018.2.1) professionelle, integrierte PHP-Entwicklungstool