【问题标题】:Symfony error while moving from local environment to shared hosting从本地环境移动到共享主机时出现 Symfony 错误
【发布时间】:2017-04-15 04:42:52
【问题描述】:

我正在尝试将在本地环境中运行良好的项目转移到实时共享托管平台上。我的内容都没有出现,所以我开始尝试找出问题所在。我在 bootstrap.php 页面上收到 500 错误,所以我跟踪了错误并收到了这条消息:

Warning: SessionHandler::read(): open(/var/php_sessions/sess_5b4077feb9bf47a70ccde805100ae624, O_RDWR) failed: No such file or directory (2) in /hermes/bosnaweb03b/b700/ipg.briangwaltney/YSC-Main/vendor/symfony/symfony/src/Symfony/Component/HttpFoundation/Session/Storage/Proxy/SessionHandlerProxy.php on line 61 Warning: SessionHandler::write(): open(/var/php_sessions/sess_5b4077feb9bf47a70ccde805100ae624, O_RDWR) failed: No such file or directory (2) in /hermes/bosnaweb03b/b700/ipg.briangwaltney/YSC-Main/vendor/symfony/symfony/src/Symfony/Component/HttpFoundation/Session/Storage/Proxy/SessionHandlerProxy.php on line 69

我做了一堆研究,发现一堆老问题建议你更改 app/config/config.yml 文件来解决这个问题。该文件在我的目录中不存在,但 config/framework.yml 在那里,所以我进行了这些建议的更改。以下是更改后的内容:

framework:
    secret: test
    router: { resource: "%kernel.root_dir%/%kernel.test_case%/routing.yml" }
    validation: { enabled: true, enable_annotations: true }
    assets: ~
    csrf_protection: true
    form: true
    test: ~
    default_locale: en
    session:
        handler_id: session.handler.native_file
        save_path: "%kernel.root_dir%/sessions"
    profiler: { only_exceptions: false }

services:
    logger: { class: Psr\Log\NullLogger }

这并没有解决它,所以我完全被卡住了。我不知道还能尝试什么。任何帮助将不胜感激。

对于 ref,这是我的引导和自动加载文件。

bootstrap.php:

<?php

error_reporting(E_ALL);
ini_set('display_errors', '1');

require_once __DIR__ . '/../vendor/autoload.php';
require_once __DIR__ . '/functions.php';
require_once __DIR__ . '/connection.php';



$dotenv = new Dotenv\Dotenv(__DIR__);
$dotenv->load();

$session = new \Symfony\Component\HttpFoundation\Session\Session();
$session->start();

供应商/autoload.php:

<?php

// autoload.php @generated by Composer

require_once __DIR__ . '/composer/autoload_real.php';

return ComposerAutoloaderInit1975f3b1eb8deeaabd9c59cc0a28694b::getLoader();

谢谢。

【问题讨论】:

    标签: php symfony composer-php


    【解决方案1】:

    您将 session.save_path 更新为 "%kernel.root_dir%/sessions",这意味着它将把它放入 /path/to/your/project/app/sessions。通常应用程序文件夹是只读的。在默认项目结构中,有一个 var/ 目录,其中包含日志和 chache 文件,它还有一个用于会话的文件夹。我建议改用它:"%kernel.root_dir%/../var/sessions"。您还必须确保您的网络用户(通常是 www-data)可以写入 var 目录。由于您处于共享托管环境中,您可能必须登录到提供商的 Web ui 并在那里找到文件管理工具。如果您仍然无法使其工作,您可能需要更改会话处理程序,例如到数据库。使用PDO Session StorageRedis session handler

    【讨论】:

    • 感谢您的帮助。我将其更改为 /var/php_sessions 文件夹,因为这是它专门寻找的,但它仍然无法正常工作。我查看了权限并将其设置为可写。出于某种原因,会话仍然没有被写入。你还有其他建议吗?我们走在正确的轨道上;当我注释掉会话代码时,该站点当然会减去需要会话的组件。
    • 对不起,我没有其他想法,一切都指向权限。您可以尝试将dump(posix_getpwuid(posix_geteuid())) 放入脚本中,以确认您为正确的用户设置了文件夹权限。
    • 感谢您一直以来的帮助。我越看这个,我就越想我正在更改错误的文件。我似乎找不到 app/config/config.yml 文件。这是 Symfony 自动创建的吗?原谅我的无知。这是我第一次尝试。
    • 是的,config.yml 在你的 symfony 项目中。我猜完整路径类似于/var/www/html/app/config/config.yml。也可能是您必须清除缓存目录(基本上是在项目根/var/www/html 中执行rm -rf /var/www/html/var/* 或运行php bin/console cache:clear)。
    猜你喜欢
    • 2018-02-07
    • 1970-01-01
    • 1970-01-01
    • 2014-12-05
    • 2013-08-20
    • 1970-01-01
    • 2019-08-24
    • 2015-12-24
    • 1970-01-01
    相关资源
    最近更新 更多