PHP 站点在 linux 上运行,但在 windows 上不运行

Posted

技术标签:

【中文标题】PHP 站点在 linux 上运行,但在 windows 上不运行【英文标题】:PHP site runs on linux but not on windows 【发布时间】:2015-02-26 22:01:30 【问题描述】:

我开发了一个在 Linux 上完美运行的网站,但是当我尝试在 Windows 生产服务器上运行它时,php 脚本不起作用。这行之后代码中的所有内容都没有做任何事情:

require_once __DIR__ . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'returner.php';

我认为问题可能与文件的路径有关,所以我修改了代码以使用 DIR 和 DIRECTORY_SEPARATOR 以避免路径出现任何问题。我使用 file_exists 测试了路径是否正常工作并且找到了文件,但是当我尝试在 Windows 服务器上运行它时,我的代码仍然没有执行任何操作。

/index.php 包括 /lib/returner.php

/lib/returner.php 包括 /lib/login.php

代码:

index.php:

...
div class="container" role="main">
    <?php
        require_once __DIR__ . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'returner.php';
        echo '<div class="page-header">';
        echo '<h1>' . returnSede() . '</h1>';
        ...

returner.php:

...
<?php
    require_once __DIR__ . DIRECTORY_SEPARATOR . 'login.php';
    $sede = $_POST['selectSede'];
...

【问题讨论】:

windows 有 dir 分隔符 '\' 和 linux '/' 开启错误报告并阅读您的日志。 @Eugen php 会在需要时翻译它们。我通常只使用/,它工作正常。另外,OP 正在使用预定义的常量 DIRECTORY_SEPARATOR,这应该可以解决这个问题。 【参考方案1】:

看来你的代码应该可以工作了。

以防万一,Stack Overflow 上的这个 answer 可能会有所启发。我会总结一下:

如果您只担心基于 Unix 或 Windows,则使用正斜杠(“C:/test.txt”)对路径进行硬编码将起作用。

由于您使用的报价类型可能存在差异:

例如,"\123" 转换为 "Q" Windows 需要"C:\\test.txt"'C:\test.txt'"C:/test.txt"

另一个answer 在同一个问题上建议做这样的事情:

define('DS','/');
define('BASE_ROOT',str_replace('\\',DS,dirname(__FILE__)));
require_once BASE_ROOT . DS . 'includes' . DS . 'init.php';

【讨论】:

使用 _DIR_ 与使用 dirname(__FILE__) 的结果相同,并且我的代码没有使用任何正常或反斜杠,我使用 DIRECTORY_SEPARATOR 来避免混乱使用 / 和 \ 取决于平台。 从其他答案中链接的文档看来,使用 DIRECTORY_SEPARATOR 可能会出现问题。然而,我读过的唯一反例是使用双引号和 DIRECTORY_SEPARATOR 时,这可能会导致双引号中出现未转义的反斜杠,从而产生意想不到的结果。我很想知道您的情况的实际解决方法是什么。

以上是关于PHP 站点在 linux 上运行,但在 windows 上不运行的主要内容,如果未能解决你的问题,请参考以下文章

PHP站点在localhost上正常运行但不在实时服务器上运行

命名空间Autoload在Windows下运行,但在Linux上运行

php不会使用xampp运行[重复]

PHP和Nginx突然在SSL上非常慢,但在HTTP上却很完美

PHP 脚本可在一个站点上运行,但不能在同一台服务器上运行

codeigniter 3 - 删除 index.php:Linux 上的错误 404,但在 Windows 上工作正常