Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php包括使用URL,但不包括根路径。服务器配置或编码语法?_Php_Include_Include Path - Fatal编程技术网

php包括使用URL,但不包括根路径。服务器配置或编码语法?

php包括使用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包含中遇到了根相对路径的问题。当我包含整个URL时,php include可以完美地工作。但在子目录中使用根相对路径时,它不起作用。想法

使用URL

<?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服务器谢谢!就是这样,我真的很感谢你的详细回答。谢谢!就是这样,我真的很感谢你详细的回答。