2011-06-25 127 views
3

我已經在Windows中構建了一個PHP項目,正如您在Windows中所知fun.php和Fun.php是相同的,但不是在Linux中。
Q1->由於我的項目將在Linux中運行如何解決這個問題[文件名錯誤]?
Q2->如果確切的文件名不存在,我需要顯示一個錯誤!如何做?PHP的問題包括區分大小寫的文件系統

我有template.php我想獲得一個警告,這樣我就可以解決這個問題[不中創設問題這2 PHP文件和render.php

include 'Template.php'; 

render.php
代碼Windows,但在Linux]

+3

不要依賴大小寫不敏感的文件名嗎? –

+0

所有這些答案都很好,但是在花時間來問這個問題並實現其中一個答案的時候,你可能只是修復了你的文件名。 –

+1

對@ Rafe的評論...這似乎是一個壞習慣隨便命名文件。如果是我(不管是誰造成的),我會清理它。修復文件名稱,並傳遞函數/解決方法來撤銷它,這無疑會創建一個新的注意事項來在這裏發佈問題。 :) – Dawson

回答

4

解決方案#1:全部使用小寫字母。解決方案#2:每次使用完全相同的案例。當文件名稱是「模板」時,不要試圖包含「模板」,只需在第一個地方包含小寫「模板」即可。大多數編程語言無論如何都是區分大小寫的,所以最好進入實踐。雖然文件名在這個問題上可能是唯一的,例如,PHP中的變量必須使用相同的大小寫,所以只需將相同的主體應用於文件名。

1

你有一個'快捷方式'在窗口中,你調用一個文件Template,而它實際上是calles template。如果你只是通過你的代碼而不允許這樣做,你會沒事的?

  • 確保所有的文件名都在一種情況下,或者使用一種標準(如果你只有'基本'頁面,我會全部使用小寫字母,但有時候在大型項目中你會有一個標準說類與資本一樣ClassName.php)
  • 確保您的調用使用該實際名稱。
  • ...
  • 利潤。

如果由於某種原因你不想要這樣,你總是可以使用autoloader作爲類。每個被調用的類如果找不到自己就會加載該類。這顯然不適用於你想要包含不在類中的東西。

5

好吧,如果我是在那種情況下,我會寫一個包裝圍繞包括:

function warned_include($file) 
{ 
    if(defined('DEBUG_ENV')) // define this somewhere else while in dev. 
    { 
     foreach(explode(PATH_SEPARATOR, get_include_path()) as $path) 
     { 
      // make sure the/is replaced with the OS native DIRECTORY_SEPARATOR 
      $fullPath = str_replace($path .DIRECTORY_SEPARATOR.$file, '/', DIRECTORY_SEPARATOR); 
      if(is_file($fullPath)) 
      { 
       $spl = new SplFileInfo($fullPath); 
       if($spl->getPathname() != $fullPath) 
       { 
        echo 'case sensitivity mismatch for ' . $spl->getPathname(); 
       } 
       break; 
      } 
     } 
    } 
    include $file; 
} 

我已經沒有機會測試它,但SplFileInfo從OS,獲取路徑下意味着它應該在Windows中具有正確的區分大小寫。

+0

+ +1這麼多努力:) – Sourav

相關問題