【问题标题】:VestaCP: open_basedir restriction while using app/autoload.phpVestaCP:使用 app/autoload.php 时的 open_basedir 限制
【发布时间】:2017-07-08 05:52:05
【问题描述】:
我在服务器(Ubuntu 16.04,PHP 7.0.18)上部署 Symfony3 项目。
我使用 VestaCP,创建 symlinl public_shtml -> www/web 并将项目放在 www 目录中。
我执行以下命令:
- git 克隆
- 作曲家安装
- setfacl(来自 Symfony 官方文档)
在错误日志中我看到消息:
PHP 警告:require():open_basedir 限制生效。文件(/home/admin/web/project/www/app/autoload.php)不在允许的路径中:(/home/admin/web/project/public_shtml:/home/admin/tmp)在/ home/admin/web/project/www/web/app.php 在第 6 行
PHP 警告:需要(/home/admin/web/project/www/app/autoload.php):无法打开流:/home/admin/web/project/www/web/app 中不允许操作。第6行的php
PHP 致命错误:require(): 无法打开所需的 '/home/admin/web/project/www/web/../app/autoload.php' (include_path='.:/usr/share/php' ) 在第 6 行的 /home/admin/web/project/www/web/app.php 中
我做错了什么?
【问题讨论】:
标签:
php
symfony
symfony-3.3
vesta
【解决方案1】:
您需要更改 apache 配置中的 open_basedir 参数(/home/admin/conf/web/apache2.conf 和 /home/admin/conf/web/sapache2.conf)以指向您新创建的文件夹 /home/admin/web/project/www:
<Directory /home/admin/web/project/www/web>
AllowOverride All
Options +Includes -Indexes +ExecCGI
php_admin_value open_basedir /home/admin/web/project/www:/home/admin/tmp
php_admin_value upload_tmp_dir /home/admin/tmp
php_admin_value session.save_path /home/admin/tmp
</Directory>
VestaCP 使用open_basedir 限制来进行更安全的默认配置。
另外,如果你打算在你的服务器上添加更多网站,我建议你在路径/usr/local/vesta/data/templates/web/apache2/ 为你的 symfony 项目制作特殊的 apache 配置模板。您可以将默认模板default.tpl 和default.stpl 复制为新文件symfony.tpl 和symfony.stpl,您可以在其中更改open_basedir、DocumentRoot 和Directory 参数。如果您不这样做:每次为您的用户站点添加/更新配置后,VestaCP 都会使用默认模板将您当前的配置替换为新生成的配置,您需要再次对其进行编辑。