php包括使用URL,但不包括根路径。服务器配置或编码语法?
我最近从一个专用的服务器环境迁移到一个云服务器,我在php包含中遇到了根相对路径的问题。当我包含整个URL时,php include可以完美地工作。但在子目录中使用根相对路径时,它不起作用。想法 使用URLphp包括使用URL,但不包括根路径。服务器配置或编码语法?,php,include,include-path,Php,Include,Include Path,我最近从一个专用的服务器环境迁移到一个云服务器,我在php包含中遇到了根相对路径的问题。当我包含整个URL时,php include可以完美地工作。但在子目录中使用根相对路径时,它不起作用。想法 使用URL <?php include 'http://website.com/assets/includes/nav.php';?> 文件位置http://website.com/index 不使用根相对路径 <?php include '/assets/includes/nav.
<?php include 'http://website.com/assets/includes/nav.php';?>
文件位置<代码>http://website.com/index
不使用根相对路径
<?php include '/assets/includes/nav.php';?>
文件位置<代码>http://website.com/folder/page如果文件在同一台服务器上(可能99.99%的情况下是这样),则不应使用URL将其包含在内。这是非常低效的,因为它需要服务器发出额外的HTTP请求。当然,远程web服务器输出的是包含的内容—不是PHP源代码,而是解析后的输出。此外,任何有权访问远程URL的人都可以将代码注入您的网站。相反,您应该使用文件系统直接访问文件 如果包含以
/
开头的文件,则这是相对于根文件系统的,而不是相对于网站根目录的。这就是为什么你的第三个例子不起作用。例如,您的web服务器可以为/var/www/html
中的页面提供服务,因此要包含该目录中的文件,您需要使用/var/www/html/
启动它,或者将包含路径设置为相对路径
我通常从应用程序根目录中的文件执行操作,该文件在每次请求时都会被调用(例如,配置文件):
然后在任何其他文件中,我可以只包含相对于该应用程序根目录的内容:
include 'path/to/subdirectory/file.php';
您只需要知道重复的文件名。例如,如果您有:
/var/www/html
├── class
│ ├── controller
│ │ ├── include.php
│ │ ├── FruitController.php
├── include.php
在您的furtcontroller.php
文件中,它将从include.php
检查来自get\u include\u path()
的第一个路径,如果没有找到,则检查下一个路径,直到找到包含的文件或返回警告或错误。因此,根据您在set\u include\u path()
中的顺序,它将包含/var/www/html/include.php
或/var/www/html/class/controller/include.php
另一种方法是将以下内容放在应用程序根目录中的文件中,以实现此目的,并向所包含的内容添加显式控制:
define('APP_ROOT', __DIR__);
然后在任何其他文件中,只需执行以下操作:
include APP_ROOT . '/path/to/subdirectory/file.php';
如果文件位于同一服务器上(可能99.99%的情况下是这样),则不应使用URL将其包含在内。这是非常低效的,因为它需要服务器发出额外的HTTP请求。当然,远程web服务器输出的是包含的内容—不是PHP源代码,而是解析后的输出。此外,任何有权访问远程URL的人都可以将代码注入您的网站。相反,您应该使用文件系统直接访问文件 如果包含以
/
开头的文件,则这是相对于根文件系统的,而不是相对于网站根目录的。这就是为什么你的第三个例子不起作用。例如,您的web服务器可以为/var/www/html
中的页面提供服务,因此要包含该目录中的文件,您需要使用/var/www/html/
启动它,或者将包含路径设置为相对路径
我通常从应用程序根目录中的文件执行操作,该文件在每次请求时都会被调用(例如,配置文件):
然后在任何其他文件中,我可以只包含相对于该应用程序根目录的内容:
include 'path/to/subdirectory/file.php';
您只需要知道重复的文件名。例如,如果您有:
/var/www/html
├── class
│ ├── controller
│ │ ├── include.php
│ │ ├── FruitController.php
├── include.php
在您的furtcontroller.php
文件中,它将从include.php
检查来自get\u include\u path()
的第一个路径,如果没有找到,则检查下一个路径,直到找到包含的文件或返回警告或错误。因此,根据您在set\u include\u path()
中的顺序,它将包含/var/www/html/include.php
或/var/www/html/class/controller/include.php
另一种方法是将以下内容放在应用程序根目录中的文件中,以实现此目的,并向所包含的内容添加显式控制:
define('APP_ROOT', __DIR__);
然后在任何其他文件中,只需执行以下操作:
include APP_ROOT . '/path/to/subdirectory/file.php';
/是服务器的根,而不是web路径的根,包含在http中意味着您通过web服务器调用它,因此任何代码都将被执行,但可用。第一个应该在任何目录中工作,因为它是一个绝对路径,但是您通常不称它为va The server/是服务器的根,而不是web路径的根,include with http意味着您通过web服务器调用它,因此任何代码都将被执行,但可用。第一个应该在任何目录中工作,因为它是一个绝对路径,但您通常不会将其称为va服务器谢谢!就是这样,我真的很感谢你的详细回答。谢谢!就是这样,我真的很感谢你详细的回答。