php文件路径在windows上工作但在linux上没有

时间:2014-09-09 07:07:34

标签: php linux

我想在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上运行,因为区分大小写

5 个答案:

答案 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";

因为configinf文件夹位于同一级别。