PHP站点在Linux上运行,但在Windows上运行

时间:2014-12-30 18:23:38

标签: php linux windows path require-once

我开发了一个在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'];
...

1 个答案:

答案 0 :(得分:0)

您的代码似乎应该可以正常工作。

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