2008-09-15 93 views
0

我們在Windows上使用PEAR庫的問題從PHP在Windows上包含文件大小寫敏感的PHP

梨包含許多類,我們正在利用一個公平的幾個,其中之一是在Mail.php找到的Mail類。我們使用PEAR的道路上,而不是提供單個PEAR文件的完整明確的路徑:

require_once('Mail.php'); 

不是相反:

require_once('/path/to/pear/Mail.php'); 

這導致該網站,那裏的管理模塊中的問題一個mail.php文件(用於向用戶發送郵件)。如果我們處於發送電子郵件的管理屏幕(例如,用戶管理屏幕可以生成電子郵件並在用戶通過審覈隊列批准時向用戶發送新的隨機密碼),並且我們嘗試包含Mail.php,則我們「意外」包含郵件。 PHP。

不改變預先設置完整路徑PEAR安裝明確要求PEAR模塊(非標準的,通常你PEAR安裝到您的路徑...)有沒有辦法強制執行在Windows PHP需要的文件病例敏感地?

我們將PEAR路徑添加到包含路徑中,因此可以控制路徑順序。我們也認識到,我們應該避免使用與PEAR名稱衝突的文件名,而不管大小寫,並且將來會這樣做。然而,這個頁面(不是一個包含文件,而是一個控制器)已經存在了數年之久,插件專門生成URLS以在其處理中提供鏈接/重定向到這個頁面。

(我們支持的Apache,微軟的IIS,LightHTTPD和宙斯,使用PHP 4.3或更高版本(包括PHP5))

回答

1

具有包含路徑2個文件具有相同的名稱是不是一個好主意,重命名您的文件,以便您寫入的文件具有與第三方庫不同的名稱。無論如何,對於你目前的情況,我認爲通過改變包含路徑中的路徑順序,你可以解決這個問題。 PHP在包含路徑中逐個搜索文件。當在包含路徑中找到所需文件時,PHP將停止搜索文件。因此在應用程序的管理部分中,如果要包含PEAR郵件文件而不是您編寫的mail.php,請更改包含路徑,以便PEAR路徑位於當前目錄之前。 做這樣的事情:

<?php 
    $path_to_pear = '/usr/share/php/pear'; 
    set_include_path($path_to_pear . PATH_SEPARATOR . get_include_path()); 
?> 
3

因爲它是一個操作系統級的東西,我不相信有一個簡單的方法做這件事。

您可以嘗試將您的包含從include('Mail.php');更改爲include('./Mail.php');,但我不確定這是否可以在Windows上運行(沒有一個PHP需要測試)。

+0

確認。這是一個操作系統的事情。當涉及到文件名時,Windows不區分大小寫,所以這是不可能的。 – 2008-09-15 14:56:51

+0

這是真的,而且會工作,我們包括我們自己的包含完整路徑的包含文件,但是,我們的mail.php是一個控制器。查看http://stackoverflow.com/questions/63599/including-files-case-sensitively-on-windows-from-php#65937 – THEMike 2008-09-16 13:18:55

0

如果您使用PHP 4,則可以利用this錯誤。關當然,這是一個混亂的解決方案...

或者您也可以重命名文件mail.php到別的......

0

我相當肯定這個問題是由Win32子系統的NTFS代碼引起的。如果您使用Ext2可安裝文件系統(IFS),則應該在該驅動器上區分大小寫。