VestaCP:使用 app/autoload 时的 open_basedir 限制。php

VestaCP: open_basedir restriction while using app/autoload.php

我在服务器上部署了 Symfony3 项目(Ubuntu 16.04,PHP 7.0.18)。 我使用 VestaCP,创建 symlinl public_shtml -> www/web 并将项目放在 www 目录中。

我执行以下命令:

在错误日志中我看到消息:

PHP Warning: require(): open_basedir restriction in effect. File(/home/admin/web/project/www/app/autoload.php) is not within the allowed path(s): (/home/admin/web/project/public_shtml:/home/admin/tmp) in /home/admin/web/project/www/web/app.php on line 6

PHP Warning: require(/home/admin/web/project/www/app/autoload.php): failed to open stream: Operation not permitted in /home/admin/web/project/www/web/app.php on line 6

PHP Fatal error: require(): Failed opening required '/home/admin/web/project/www/web/../app/autoload.php' (include_path='.:/usr/share/php') in /home/admin/web/project/www/web/app.php on line 6

我做错了什么?

您需要更改 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.tpldefault.stpl 复制为新文件 symfony.tplsymfony.stpl,您可以在其中更改 open_basedirDocumentRootDirectory 参数。如果您不这样做:每次为您的用户站点配置 adding/updating 后,VestaCP 将使用默认模板将您当前的配置替换为新生成的配置,您将需要再次编辑它。