0

我用它来包含一些文件

require_once realpath(__DIR__) . '/../anotherfolder2/anotherfolder3/filename2.php

但由于某些原因,似乎 /.. 被忽略并触发

未能打开所需的'/var/domains/domain.com/foldername1/anotherfolder2/anotherfolder3/filename.php in /var/domains/domain.com/foldername1/anotherfolder2/filename1.php on line 10`

其中 realpath( DIR ) = /var/domains/domain.com/foldername1

什么可能导致 /.. 被忽略,这是 php 7.4 中的新功能吗?

4

2 回答 2

1

我相信你的说法realpath(__DIR__)'/var/domains/domain.com/foldername1'不正确的。

您的错误消息包括发生错误的文件路径:

...在第 10 行的 /var/domains/domain.com/foldername1/anotherfolder2/filename1.php

所以我们知道这__FILE__将是'/var/domains/domain.com/foldername1/anotherfolder2/filename1.php',而且__DIR__将会是'/var/domains/domain.com/foldername1/anotherfolder2'

realpath不太可能改变这一点,所以我们有:

require_once '/var/domains/domain.com/foldername1/anotherfolder2' . '/../anotherfolder2/anotherfolder3/filename2.php'

..去掉第一个anotherfolder2给予:

require_once '/var/domains/domain.com/foldername1/anotherfolder2/anotherfolder3/filename2.php'

错误消息说它找不到的文件路径是哪个。

于 2020-10-09T09:36:40.083 回答
1

尝试将整个路径传递给realpath()函数:

require_once realpath(__DIR__ . '/../anotherfolder2/anotherfolder3/filename2.php)

此函数将dir1/dir2/../file1转换为dir1/file1. 在你的情况下:/var/domains/domain.com/foldername1/../anotherfolder2/anotherfolder3/filename.php进入/var/domains/domain.com/anotherfolder2/anotherfolder3/filename.php.

从文档:

realpath() 扩展所有符号链接并解析输入路径中对 /./、/../ 和额外 / 字符的引用,并返回规范化的绝对​​路径名。

https://www.php.net/manual/en/function.realpath.php

于 2020-10-09T09:29:27.700 回答