2014-12-30 74 views
1

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

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

我认为proble可能与该文件的路径,所以我修改了代码,使用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']; 
... 
+0

窗口有目录分隔符“\”和linux“/” – Eugen

+5

打开错误报告和阅读你的日志。 – Chris

+3

@Eugen php会根据需要翻译它们。我通常只使用'/'并且它工作正常。另外,OP正在使用预先定义的常量DIRECTORY_SEPARATOR,它应该解决这个问题。 –

回答

0

看起来你的代码应该工作。

以防万一,这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'; 
+0

使用\ __ DIR__与使用dirname(\ _ \ _ FILE__)具有相同的结果,我的代码不使用任何普通或反斜杠,我使用DIRECTORY_SEPARATOR来避免混淆/和\,具体取决于平台。 – efredz

+0

从其他答案中链接的文档看来,使用DIRECTORY_SEPARATOR可能会有问题。然而,我读过的唯一反例是使用双引号和DIRECTORY_SEPARATOR,这可能会导致双引号中的非反转反斜杠,从而导致意想不到的结果。我很好奇,看看你的情况真正解决了什么问题。 –

相关问题