我想在PHP应用程序中使用相对根路径。我正在开发Windows。
- wwww
-my-api-2
-my-api-1
-config
-configuration.php
-inf
-appService.php
-index.php
appService.php 包含 configuration.php ,就像这样。
<?php
include_once "/config/Configuration.php";
index.php 包括 appService.php ,如下所示:
<?php
include_once "inf/appService.php";
这是在Windows上工作,但在linux服务器上传时无效。警告是这样的:
警告:include_once(/inf/Configuration.php)[function.include-once]:无法打开流: / var / www / my-中没有此类文件或目录api-1 / inf / appService.php 在线 1
解决方案是PHP区分大小写的文件名。我是php的新手,所以我注意到Windows上开发的APPS可能无法在linux上运行,因为区分大小写
答案 0 :(得分:2)
看起来您在PHP(Configuration.php)中使用大写“C”表示文件名,而实际文件名全部为小写(configuration.php)。 Windows文件名不区分大小写。但是,在Linux上,它们不是。相应地更改PHP中的文件名。
include_once "/config/configuration.php";
答案 1 :(得分:1)
尝试:
include_once "./config/Configuration.php";
和
include_once "./inf/appService.php";
代替。 Linux要求当前路径使用点。确保检查文件名,因为Linux区分大小写 - 例如appService.php
不是AppService.php
。
答案 2 :(得分:1)
正如其他人提到的那样,首先,你应该知道你的外壳。在没有深入了解文件系统的细节的情况下,大写和小写的文件名在Linux中被独立处理(两个文件“Configuration.php”和“configuration.php”可以存在于同一个文件夹中并且不同),而Windows不允许你将两个文件命名为具有不同外壳的相同名称。
根据经验,除非您正在制作PHP类,否则请将文件命名为小写并以小写形式引用它们,这样可以避免任何混淆或问题。
除此之外,我建议你在index.php中定义一个“根路径”常量,你可以在其中包含文件,例如“APP_BASE_PATH”(只是一个建议)。
在index.php中:
<?php
// Check to see if an APP_BASE_PATH constant is defined, or define one
defined('APP_BASE_PATH') || define('APP_BASE_PATH', realpath(__FILE__));
只要所有文件都包含在“from”index.php中(这意味着,您首先通过index.php包含文件,然后文件包含其他文件),您可以使用完整包含include / require / _once的文件相对路径,如下:
<?php
require_once APP_BASE_PATH . '/config/configuration.php';
为了增加多平台兼容性,请考虑在包含文件时使用DIRECTORY_SEPARATOR常量:
<?php
require_once APP_BASE_PATH . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'configuration.php';
当你有很多文件时,这个常量很长,所以我通常只定义一个DS常量来帮助我:
<?php
defined('DS') || define('DS', DIRECTORY_SEPARATOR);
require_once APP_BASE_PATH . DS . 'config' . DS . 'configuration.php';
答案 3 :(得分:1)
是case sensitive
文件名的问题。你不会遇到任何问题,因为windows文件名是case insensitive
但linux是不同的,它是case sensitive
。因此,您需要更改文件名或将其命名为。
不更改文件名
include_once "./config/Configuration.php";
include_once "inf/appService.php";
或将文件名更改为
configuration.php
appservice.php
答案 4 :(得分:0)
在appService.php
中使用
include_once "../config/Configuration.php";
因为config
和inf
文件夹位于同一级别。