我们在使用时遇到问题 PEAR 图书馆上 WindowsPHP.

Pear 包含许多类,我们正在使用相当多的类,其中之一是 Mail 类,位于 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))

有帮助吗?

解决方案

在包含路径中包含 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() );
?>

其他提示

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

您可以尝试更改您的包含内容 include('Mail.php');include('./Mail.php');, ,但我不确定这是否适用于 Windows 机器(没有 PHP 来测试)。

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top