2014-12-30 75 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,這可能會導致雙引號中的非反轉反斜槓,從而導致意想不到的結果。我很好奇,看看你的情況真正解決了什麼問題。 –

相關問題