【问题标题】:PHP7 + Symfony 3.1.0 + Vagrant: Failed to write session dataPHP7 + Symfony 3.1.0 + Vagrant:无法写入会话数据
【发布时间】:2016-10-09 00:58:43
【问题描述】:

虽然路径 /mnt/my-proj/app/../var/sessions/dev 可供普通用户和我获得的 www-data 访问以下消息:

Warning: session_write_close(): Failed to write session data (user). Please verify that the current setting of session.save_path is correct (/mnt/op-accounting2/app/../var/sessions/dev)

我只在 dev 中收到上述消息,但在 prod 中没有。 /mnt/my-proj/app/../var/sessions/dev/mnt/my-proj/app/../ var/sessions/prod 具有相同的权限:777。

上面的路径挂载如下:

# mount -t vboxsf -o uid=1000,gid=33,umask=000 my-proj /mnt/my-proj;

我做错了什么?

我已阅读以下帖子,但找不到适合我的解决方案:

PHP session handling errors

https://github.com/NewEraCracker/suhosin-patches/issues/3

PHP7 + Symfony 2.8, Failed to write session data

我在 Windows 8.1 Enterprice (64Bit) 上使用 Vagrant 1.8.1,在 Vagrant 中使用 ubuntu-xenial 16.04。提供者是 VirtualBox 5.0.20。这些设置大多是默认设置。上面的路径是使用具有完全访问权限的 VirtualBox GUI 共享的。

亲切的问候,

朱里

【问题讨论】:

    标签: php symfony session vagrant php-7


    【解决方案1】:

    您可以只编辑配置的文件。

    vi /etc/php/7.2/fpm/pool.d/www.conf
    

    然后将 PHP 的所有者角色从 www-data 更改为 vagrant

    user = vagrant
    group = vagrant
    

    【讨论】:

      【解决方案2】:

      除了 Juri Sinitson 之前的回答之外,它还解决了我调整 VM 而不是调整项目基础的问题。

      将这一行添加到我的 Vagrant bash 根配置程序中:

      sed -i "s/www-data/vagrant/g" /etc/apache2/envvars
      service apache2 restart
      

      使 apache 以vagrant 运行。这使 apache 对共享目录有更多的权力,因为它在文件系统看来是用户 vagrant 而不是用户 www-data 碰巧接触到那里。

      也许这与“apparmor”有关。

      【讨论】:

        【解决方案3】:

        已解决! :-)

        设置

        save_path:   "/var/lib/php/sessions"
        

        /mnt/my-proj/app/config/config.yml 中解决了这个问题。不需要对 /etc/php/7.0/ 中的 ini 文件进行任何调整(这些文件仍然只有默认值)。

        但我想知道为什么我没有在 prod 中收到该错误消息?

        【讨论】:

        • 你救了我!! SF3+PHP7+Vagrant发生在我身上,可能与/vagrant与主机共享,主机是windows有关。 -- 注意: 当然,这在开发和生产之间有所不同,因此请考虑将save_path 添加到parameters.yml 中的可参数化事物中,例如分别在开发和生产参数中的session_save_path: "/var/lib/php/sessions"session_save_path: "%kernel.root_dir%/../var/sessions/%kernel.environment%"然后在config.yml 中使用save_path: "%session_save_path%"
        • 我仍然不明白为什么这会有所帮助,因为 var/sessions 的权限也很好。
        猜你喜欢
        • 2016-03-11
        • 2016-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-02
        • 2011-05-14
        • 2011-05-13
        • 1970-01-01
        相关资源
        最近更新 更多