0

我们在使用fromPEAR上的库时遇到问题。WindowsPHP

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

require_once('Mail.php');

而不是:

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

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

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

我们自己将 PEAR 路径添加到包含路径中,因此可以控制路径顺序。我们还认识到,无论大小写如何,我们都应该避免使用与 PEAR 名称冲突的文件名,并且将来会这样做。然而,这个页面(它不是一个包含文件,而是一个控制器)已经在存储库中存在了几年,并且插件专门生成 URL 以在其处理过程中提供指向该页面的链接/重定向。

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

4

4 回答 4

3

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

您可以尝试将您的 include 从更改include('Mail.php');include('./Mail.php');,但我不确定这是否适用于 Windows 机器(没有一个带有 PHP 的机器可以测试)。

于 2008-09-15T14:55:10.113 回答
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() );
?>
于 2008-09-15T19:25:16.203 回答
0

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

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

于 2008-09-15T14:57:30.683 回答
0

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

于 2008-09-17T11:20:44.823 回答