2016-08-26 8 views
1

Cs Cart Multi vendor가 있습니다. PHP 5.5를 PHP 7.0으로 업그레이드했습니다. 그리고이 오류 :session_start() : 세션 콜백은 true/false 반환 값을 나타냅니다.

865 FastCGI sent in stderr: "PHP message: PHP Warning: session_start(): Session callback expects true/false return value in /var/www/cscart/app/Tygh/Session.php on line 341 PHP message: PHP Fatal error: session_start(): Failed to initialize storage module: user (path: /var/lib/php/sessions) in /var/www/cscart/app/Tygh/Session.php on line 341" while reading response header from upstream, client: 49.189.136.11, server:

디렉토리는/var/lib 디렉토리/PHP/세션은 다른 사이트에 0777. 세션이 잘 작동 있습니다.

파일 Session.php :

/** 
* Starts session 
* @param array $request Request data 
*/ 
public static function start($request = array()) 
{ 
    // Force transfer session id to cookies if it passed via url 
    if (!empty($request[self::$_name])) { 
     self::setId($request[self::$_name], false); 
    } elseif (empty($_COOKIE[self::$_name])) { 
     self::setId(self::_generateId()); 
    } 

    session_name(self::$_name); 
    session_start(); 


    // Session checker (for external services, returns "OK" if session exists, empty - otherwise) 
    if (!empty($request['check_session'])) { 
     die(!empty($_SESSION) ? 'OK' : ''); 
    } 

    // Validate session 
    if (!defined('SKIP_SESSION_VALIDATION')) { 
     $validator_data = self::getValidatorData(); 
     if (!isset($_SESSION['_validator_data'])) { 
      $_SESSION['_validator_data'] = $validator_data; 
     } else { 
      if ($_SESSION['_validator_data'] != $validator_data) { 
       session_regenerate_id(); 
       $_SESSION = array(); 
      } 
     } 
    } 

    // _SESSION superglobal variable populates here, so remove it from global scope if needed 
    if (Bootstrap::getIniParam('register_globals')) { 
     Bootstrap::unregisterGlobals('_SESSION'); 
    } 

} 

서버 : Nginx에, PHP7.0-FPM

답변

1

session_start()는 이전 session_set_save_handler(...)으로 설정 한 모든 처리기 및 그 핸들러 (또는 개별 기능)를 사용 성공 또는 실패를 알리기 위해서는 참/거짓 결과를 반환해야합니다. true/false 결과를 반환하지 않는 핸들러가 있습니다.

요약하면; 실제 오류는 session_start()을 호출하는 코드가 아니라 세션 처리기의 구현입니다.

0

사용자 session_handler, for_example, SessionRedisHandler 클래스의 경우 open 함수가 true를 반환해야합니다.이 문제는 php7.0에서 해결됩니다.