PHP包含:长路径问题

5
当我尝试包含一个很长的文件路径时,PHP包含失败无法加载。较短的包含路径可以正常工作。
例如,以下内容将失败:
../../contents/2010-St-Louis-Rams-Tickets-Season-Package-Includes-Tickets-For-All-Regular-Season-Home-Games/inc/title.inc

有人知道问题可能出在哪里吗?


请发布您的操作系统配置和确切的PHP错误消息。这可能是真正的文件未找到错误,或者只是权限问题。您的操作系统不太可能限制文件名长度。 - Will Bickford
代码是正确的,因为相同的代码在带有 Apache 的 Linux 服务器上运行良好,但我们已将站点从 Linux 服务器迁移到了带有 IIS 7 的 Windows 2008 服务器。它没有显示任何错误或警告,只是跳过了它。 - Imran2220
2个回答

1
请检查您的路径(包括驱动器名称等)是否超过了260个字符。因为这是Windows的最大目录长度。点击此处查看参考资料
参考资料还指出,可以通过在路径名前加上“\?\”来创建超长路径名。这应该将最大路径长度扩展到32767个字符。但我不知道这是否可以在PHP中使用。

2
我看到这个答案上有一个+1,所以我想知道是否有人在php中使用\?\语法取得了成功?就我个人而言,我无法让它起作用,但也许我漏掉了什么? - Toni Van de Voorde
是的,前置 \\?\ 并不起作用。这篇文章看起来像是一个解释,尽管很长。 - XedinUnknown
你是正确的。由于PHP中的一个错误,长路径名将无法工作。这已经在PHP 7.1中得到了修复 - Carsten

0

在编写类似以下代码的测试时,我在Symfony 1.x项目中遇到了同样的问题:

require_once __DIR__ . '/../../../../bootstrap/unit.php';
require_once __DIR__ . '/../../../../../../../MY/LONG/PATH.php'

这里的问题是那些 /../../.. 占用了大量字符空间。在我的情况下,如果不使用它们,它将起作用。
在Symfony中,您可以通过调用sfConfig :: get('sf_root_dir')来获取项目的根目录,因此我可以按以下方式更改我的代码:
require_once __DIR__ . '/../../../../bootstrap/unit.php';
require_once sfConfig::get('sf_root_dir') . '/MY/LONG/PATH.php'

这个(在我的情况下)完美地工作。

虽然我在这里使用了Symfony框架提供的根目录,但在您自己的项目中,只需要定义项目的根目录并使其可访问即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接