php 似乎没有解析符号链接。
我试图将符号链接的目标添加到 php 文件中的包含路径,但 php 似乎无法识别符号链接指向目录,因此无法找到我想要包含的文件。
对于上下文,这里是相关目录详细信息
$> pwd
/var/www/siteroot
$> ls -l
content
...
includes -> content/subdir/includes
...
public_html
$> ls includes/common/
default-home.php
Run Code Online (Sandbox Code Playgroud)
这是我试图从中加载页面的 php 文件default-home.php。
$> cat public_html/index.php
<?php
wanted_path="../includes/common"
set_include_path($wanted_path.PATH_SEPARATOR.get_includes_path());
var_dump(is_dir($wanted_path)); # testing to see if the included path is a directory
var_dump(is_dir("../includes")); # test to see if the symbolic link alone resolves to a directory
include "default-home.php";
?>
Run Code Online (Sandbox Code Playgroud)
根据上述内容,当我访问该index.php网页时,我希望看到:
bool(true) bool(true)
...(output/contents of default-home.php)
Run Code Online (Sandbox Code Playgroud)
但是,is_dir()调用结果为 False 和 False,并且错误日志显示
PHP Warning: include(default-home.php): Failed to open stream: No such file or directory
Run Code Online (Sandbox Code Playgroud)
根据我读到的有关 php 的内容,例如this SO Question和php docs,似乎 php 通常默认解析符号链接,但也许我的配置不同?
无论如何,我怎样才能让 php 找到符号链接下目录中的文件?
我在 OpenBSD5.7 本机 httpd 服务器上使用 PHP 5.5.22。提前致谢。
编辑
事实证明这是一个权限问题。显示权限和所有权:
$> ls -la
drwx------- hilcharge daemon ... content
...
lrwxr------ hilcharge daemon ... includes -> content/subdir/includes/
...
Run Code Online (Sandbox Code Playgroud)
即使使用 更改includes目标的权限后chmod -R -L 0755 includes,仍然找不到文件夹。
为了解决问题,我更改了content和的权限subdir。
我的情况是 php-fpm vhost 配置中 open_basedir 限制的问题 - 设置如下:
php_admin_value[open_basedir]=/website/dir:/symbolic-link-original/dir
Run Code Online (Sandbox Code Playgroud)