通过PHP在Windows上包含区分大小写的文件

时间:2008-09-15 14:52:15

标签: php windows apache pear

我们使用PEAR Windows上的PHP个库时遇到问题。

Pear包含很多类,我们正在使用少数几个类,其中一个是Mail.php中的Mail类。我们在路径上使用PEAR,而不是提供单个PEAR文件的完整显式路径:

require_once('Mail.php');

而不是:

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

这会导致网站的管理模块出现问题,其中有mail.php个文件(用于向用户发送邮件)。如果我们在管理屏幕中发送电子邮件(例如用户管理屏幕,当用户从审核队列中获得批准时可以生成并通过电子邮件发送新的随机密码)我们会尝试“{1}}” “包括mail.php。

无需更改以预先显示PEAR安装的完整路径,明确要求PEAR模块(非标准,通常是将PEAR安装到您的路径......)是否有办法在Windows上强制执行PHP以区分大小写需要文件?

我们自己将PEAR路径添加到包含路径,因此可以控制路径顺序。我们还认识到,我们应该避免使用与PEAR名称冲突的文件名,无论如何,将来都会这样做。但是,该页面(不是包含文件,而是控制器)已在存储库中存放了几年,插件专门生成URLS,以便在处理时为此页面提供链接/重定向。

  

(我们支持Apache,Microsoft IIS,LightHTTPD和Zeus,使用PHP 4.3或更高版本(包括PHP5))

4 个答案:

答案 0 :(得分:3)

由于这是操作系统级别的事情,我不相信有一种简单的方法可以做到这一点。

您可以尝试将包含从include('Mail.php');更改为include('./Mail.php');,但我不确定这是否适用于Windows框(没有使用PHP进行测试)。

答案 1 :(得分:1)

在include路径中有两个同名的文件不是一个好主意,重命名你的文件,以便你编写的文件与第三方库有不同的名称。无论如何,对于您目前的情况,我认为通过更改包含路径中的路径顺序,您可以解决此问题。 PHP逐个搜索包含路径中的文件。当在包含路径中找到所需文件时,PHP将停止搜索该文件。因此,在应用程序的管理部分中,如果要包含PEAR Mail文件,而不是您编写的mail.php,请更改包含路径,以使PEAR路径位于当前目录之前。 做这样的事情:

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

答案 2 :(得分:0)

如果您使用的是PHP 4,则可以利用this错误。当然这是一个混乱的解决方案...

或者您可以将mail.php文件重命名为其他内容......

答案 3 :(得分:0)

我很确定这个问题是由Win32子系统中的NTFS代码引起的。如果使用Ext2可安装文件系统(IFS),则应该在该驱动器上获得区分大小写。