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和Nginx突然在SSL上非常慢,但在HTTP上却很完美
codeigniter 3 - 删除 index.php:Linux 上的错误 404,但在 Windows 上工作正常