У меня есть веб-сайт, использующий Propel. Я хочу поместить различные файлы конфигурации из корневого каталога, но Propel нуждается в них (например, schema.xml
, build.properties
и т. д.) в том же каталоге. Итак, я решил добавить символические ссылки из корневого каталога в эти каталоги:
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
в директиву каталога в конфигурации apache (хотя в документах говорится, что это настройка по умолчанию в любом случае) - Я также пробовал
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/
Есть идеи?
su -s /bin/bash apache
иcat vendor/propel/propel1/runtime/lib/Propel.php
внутри каталогаpublic
прекрасно перечисляют содержимое этого файла. - person LeonardChallis   schedule 29.04.2014php -r "chdir('vendor');var_dump(getcwd());"
изpublic
выходов каталогаstring(61) "/home/staging/apache/somewebsite.co.uk/private/vendor"
- person LeonardChallis   schedule 29.04.2014