我在由Vagrant 1.8.6 / VirtualBox 5.1.6管理的Ubuntu 14.04,PHP 7.1和Apache 2.4.23堆栈上运行Symfony 3.1.5。我正在尝试使用一个简单的控制器来为我的前端渲染响应:
<?php
namespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\BrowserKit\Response;
class LandingController {
/**
* @Route("/", name="homepage")
*/
public function showAction(){
return new Response('This is the landing page!');
}
}
当我尝试通过/app_dev.php
访问我的Symfony前端时,我看到:
Warning: SessionHandler::read(): Session data file is not created by your uid
500 Internal Server Error - ContextErrorException
我的Apache日志显示:
CRITICAL - Uncaught PHP Exception Symfony\Component\Debug\Exception\ContextErrorException: "Warning: SessionHandler::read(): Session data file is not created by your uid" at /var/www/conan/var/cache/dev/classes.php line 366
Symfony开发日志显示:
==> /var/www/conan/var/logs/dev.log <==
[2016-10-11 14:23:04] request.INFO: Matched route "{route}". {"route":"homepage","route_parameters":{"_controller":"AppBundle\\Controller\\LandingController::showAction","_route":"homepage"},"request_uri":"http://conan.dev/app_dev.php/","method":"GET"} []
[2016-10-11 14:23:04] request.CRITICAL: Uncaught PHP Exception Symfony\Component\Debug\Exception\ContextErrorException: "Warning: SessionHandler::read(): Session data file is not created by your uid" at /var/www/conan/var/cache/dev/classes.php line 366 {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\ContextErrorException(code: 0): Warning: SessionHandler::read(): Session data file is not created by your uid at /var/www/conan/var/cache/dev/classes.php:366)"} []
看来这似乎是与会话相关的问题,我已经提到了Session Management的Symfony文档。它声明:
我Symfony会话与php.ini指令session.auto_start = 1不兼容该指令应在php.ini,webserver指令或.htaccess中关闭。
session.auto_start = 0
中的 php.ini
,该文件归用户和群组root
所有:
$ ls -lta /etc/php/7.1/fpm/php.ini
-rw-r--r-- 1 root root 70584 Sep 30 07:29 /etc/php/7.1/fpm/php.ini
我已尝试根据Symfony文档中的说明创建.htaccess
(我放在我的DocumentRoot
中),但错误仍然存在。
我已经搜索了几个线程和问题以寻找解决方案,但还没有找到任何解决方案。是什么原因引起了这个?
答案 0 :(得分:49)
修改config/config.yml
并将save_path: "%kernel.root_dir%/../var/sessions/%kernel.environment%"
替换为save_path: /var/lib/php/sessions
修复错误。
如果您使用自动将空格转换为标签的编辑器/ IDE,请务必在保存更改之前禁用该功能。如果不这样做,可能会导致“不包含有效的YAML”错误。
答案 1 :(得分:16)
我遇到了同样的问题。对我有用的修复方法是将var/sessions
所有者更改为www-data:www-data
(php-fpm子流程的相同用户/组):
sudo chown -R www-data:www-data var/sessions/
答案 2 :(得分:15)
AVOID更改prod配置以解决仅在开发环境中出现的问题
使用Vagrant(PHP-FPM 7 + Nginx)和同步文件夹(/ vagrant~default)时遇到同样的问题
解决了刚才的问题
session:
save_path: '/tmp'
在 框架 条目中的 config_dev.yml
只需选择Webserver和PHP可以在没有权限问题的情况下读/写的地方。
答案 3 :(得分:7)
如果 Magento 2 生成此警告,
只需删除已在var/session
文件夹中存在的会话及其已修复。
答案 4 :(得分:4)
我遇到了类似的问题,清除浏览器的缓存和存储的数据解决了这个问题。
在chrome和opera上你应该:
Developer tools > Application > Clear Storage > Clear Site Data
答案 5 :(得分:3)
就我而言, *删除浏览器Cookie修复了问题。我没有做上面提到的任何步骤,并尝试更改权限,但不是没有这不是问题。我遇到了关于magento的问题。
答案 6 :(得分:1)
无法写入会话路径,因为会话文件夹中的Web用户和内容所有者不同,因此不会。
解决方案是将/ var或/ var / sessions / ownership设置为Web用户。
chown apache:apache / var / -R * 要么: chown www-data:www-data / var / -R *
最高评价的回应并不是最好的回应。
答案 7 :(得分:0)
我正在使用基于symfony 3的PIMCORE。 要解决此问题,我刚刚清除了浏览器缓存。
我希望这会有所帮助。
答案 8 :(得分:0)
如果您对同步文件夹使用NFS,则其中所有文件的UID和GID将是运行Vagrant的 host 用户的UID和GID,并且可能与UID和vagrant
用户在访客上的GID。例如,我有:
-rw-r--r-- 1 501 dialout 5.1K Oct 29 15:14 Vagrantfile
501
是我的用户在Mac上的UID,来宾上没有相应的用户。 dialout
是与Mac上主要群组staff
匹配的来宾群组。
尽管您有权读写同步文件夹中的所有文件,但是当PHP检查会话文件所有者的UID时,它与运行PHP的用户不匹配,并且出于安全考虑,它阻止了访问
您可以使用vagrant-bindfs
插件解决此问题:
vagrant-bindfs
一个Vagrant插件,用于在VM中自动执行bindfs挂载。这样,您可以更改文件的所有者,组和权限,例如,解决NFS共享权限问题。
这对我有用:
vagrant plugin install vagrant-bindfs
在您的Vagrant文件中:
config.vm.synced_folder '.', '/vagrant', disabled: true
config.vm.synced_folder '.', '/vagrant-nfs', type: 'nfs'
config.bindfs.bind_folder '/vagrant-nfs', '/vagrant'
运行vagrant reload
它有效:
-rw-r--r-- 1 vagrant vagrant 5.1K Oct 29 15:45 Vagrantfile
答案 9 :(得分:0)
就我而言,我使用的是sysfony 2,并且删除了缓存后问题就消失了。
rm -rf /app/cache/*
答案 10 :(得分:-4)
您使用了错误的Response名称空间。
您有use Symfony\Component\BrowserKit\Response;
,应该是use Symfony\Component\HttpFoundation\Response;