我有一个使用推进的网站。我想将各种配置文件放在Web根目录之外,但是在同一目录中需要它们(例如schema.xml
,build.properties
等)。因此,我决定从Web根目录添加符号链接到这些目录:
somesite.com/
|
|- public/
| |- index.php
| |- build -> ../private/build
| |- vendor -> ../private/vendor
|
|- private/
| |- build.properties
| |- schema.xml
| |- build/
| |- vendor/
我的包含路径因此设置:
set_include_path('vendor/propel/propel1/runtime/lib' . PATH_SEPARATOR . 'build/classes' . PATH_SEPARATOR . get_include_path());
然而,当我尝试require_once 'Propel.php';
时,我收到以下错误:
Warning: require_once(Propel.php): failed to open stream: No such file or directory in /home/staging/apache/somewebsite.co.uk/public/functions.php on line 5
使用chdir('vendor/propel/propel1/runtime/lib');
进行检查我收到以下错误:
Warning: chdir(): Permission denied (errno 13) in /home/staging/apache/somewebsite.co.uk/public/functions.php on line 5
因此,似乎PHP / Apache不会遵循符号链接。我尝试过以下方法:
o+x
,以便apache可以读取它Options FollowSymLinks
(尽管在文档中它说这是默认设置)chcon -R -h -t httpd_sys_content_t public/vendor/
来更改SELinux类型但由于某种原因它没有改变更新
我以apache用户(su -s /bin/bash apache
)身份登录并从cat vendor/propel/propel1/runtime/lib/Propel.php
目录中运行public
,它运行正常。但是,我暂时禁用了SELinux,错误消失了。所以当然必须是SELinux。
正如我之前提到的,我尝试过:
chcon -R -h -t httpd_sys_content_t public/vendor/
但在执行此操作后,运行ls -alZ
为我提供了以下供应商:
lrwxrwxrwx. staging developers unconfined_u:object_r:user_home_t:s0 vendor -> /home/staging/apache/somewebsite.co.uk/private/vendor/
有什么想法吗?
答案 0 :(得分:1)
问题最终成为我尝试设置SELinux类型的方式。
我在跑步:
chcon -R -h -t httpd_sys_content_t public/vendor/
然而,我必须跑:
chcon -R -h -t httpd_sys_content_t public/vendor
没有尾部斜杠。一旦我这样做,一切都立即生动。
注意:由于我的apache Options
配置中没有Directory
指令,因此我无需指定它,但仍然有效。