search
HomeBackend DevelopmentPHP TutorialFatal error: session_start(): Failed to initialize storage m_PHP教程

This article will introduce to you the solution to Fatal error: session_start(): Failed to initialize storage module: files problem.

Original solution: Fatal error: session_start(): Failed to initialize storage module: files problem

The LNMP environment + phpmyamdin4.02 version that was compiled and installed before suddenly appeared this problem today:
Fatal error: session_start(): Failed to initialize storage module: files (path: ) in /data/www/phpmyadmin/libraries/session.inc.php on line 83

The general meaning is that the storage path is wrong when the session is initialized! The first reaction is to check the configuration file of php.ini:

The code is as follows Copy code
 代码如下 复制代码


session.save_path = "/tmp"

session.save_path = "/tmp"

By default, there is a semicolon in front of it, which means it is not enabled. It was already enabled when I configured it before. So why does it still report an error? , so I looked for some information on the Internet, and I felt that they were all the same:

1. Check the error.log (Apache2.2logs) file to see if there is an error report. Not found.

2. Check whether the value of session.save_handler in php.ini is files, if not, change it to files

3. Check whether session.save_path is commented in the php.ini file. If so, remove the preceding ";".

4. Change the path after save_path to an existing path, such as "D:phptemp"

5. Check whether the attributes of the temp folder are readable and writable.

6. Restart the APACHE server. OK
I don’t know if those guys have tried it themselves when they reprinted it (I’m going to spray it here, I hate it the most without even testing it myself, so I just circulate it around. It’s not responsible at all!)

According to the above process, after troubleshooting, it was found that there was no solution at all, but Puyu's server was nginx, not apache.
 代码如下 复制代码
   $r = session_start();  var_dump($r);
Then I wrote a script test.php:

The printed result is:

Warning: session_start(): SAFE MODE Restriction in effect. The script whose uid is 501 is not allowed to access /tmp owned by uid 0 in /data/www/test.php on line 3 Fatal error: session_start() : Failed to initialize storage module: files (path: ) in /data/www/test.php on line 3

It means that there is a bug in the safe mode of php5. The default save_path of the session is the temporary directory of the system, which will require verification of permissions. This script cannot be executed through the /tmp owner whose uid is 0. The uid is 501 and is also the permission of the www user group
There are two solutions to this problem:
1. Turn off safe mode;

2. Change the owner of a file/directory by chowning on the command line

Of course both methods require you to have server permissions.

The following is the configuration file of Puyu php.ini:

 代码如下 复制代码

[Session]
 ; Handler used to store/retrieve data.
 ; http://php.net/session.save-handler
session.save_handler = files; Argument passed to save_handler.  In the case of files, this is the path
 ; where data files are stored. Note: Windows users have to change this
 ; variable in order to use PHP's session functions.
 ;
 ; The path can be defined as:
 ;
 ;     session.save_path = "N;/path"
 ;
 ; where N is an integer.  Instead of storing all the session files in
 ; /path, what this will do is use subdirectories N-levels deep, and
 ; store the session data in those directories.  This is useful if you
 ; or your OS have problems with lots of files in one directory, and is
 ; a more efficient layout for servers that handle lots of sessions.
 ;
 ; NOTE 1: PHP will not create this directory structure automatically.
 ;         You can use the script in the ext/session dir for that purpose.
 ; NOTE 2: See the section on garbage collection below if you choose to
 ;         use subdirectories for session storage
 ;
 ; The file storage module creates files using mode 600 by default.
 ; You can change that by using
 ;
 ;     session.save_path = "N;MODE;/path"
 ;
 ; where MODE is the octal representation of the mode. Note that this
 ; does not overwrite the process's umask.
 ; http://php.net/session.save-path
 session.save_path = "/tmp"
; Whether to use cookies.
 ; http://php.net/session.use-cookies
 session.use_cookies = 1
; http://php.net/session.cookie-secure
 ;session.cookie_secure =
; This option forces PHP to fetch and use a cookie for storing and maintaining
 ; the session id. We encourage this operation as it's very helpful in combatting
 ; session hijacking when not specifying and managing your own session id. It is
 ; not the end all be all of session hijacking defense, but it's a good start.
 ; http://php.net/session.use-only-cookies
 session.use_only_cookies = 1
; Name of the session (used as cookie name).
 ; http://php.net/session.name
 session.name = PHPSESSID
; Initialize session on request startup.
 ; http://php.net/session.auto-start
 session.auto_start = 0
; Lifetime in seconds of cookie or, if 0, until browser is restarted.
 ; http://php.net/session.cookie-lifetime
 session.cookie_lifetime = 0
; The path for which the cookie is valid.
 ; http://php.net/session.cookie-path
 session.cookie_path = /
; The domain for which the cookie is valid.
 ; http://php.net/session.cookie-domain
 session.cookie_domain =
; Whether or not to add the httpOnly flag to the cookie, which makes it inaccessible to browser scripting languages such as JavaScript.
 ; http://php.net/session.cookie-httponly
 session.cookie_httponly =
; Handler used to serialize data.  php is the standard serializer of PHP.
 ; http://php.net/session.serialize-handler
 session.serialize_handler = php
; Defines the probability that the 'garbage collection' process is started
 ; on every session initialization. The probability is calculated by using
 ; gc_probability/gc_divisor. Where session.gc_probability is the numerator
 ; and gc_divisor is the denominator in the equation. Setting this value to 1
 ; when the session.gc_divisor value is 100 will give you approximately a 1% chance
 ; the gc will run on any give request.
 ; Default Value: 1
 ; Development Value: 1
 ; Production Value: 1
 ; http://php.net/session.gc-probability
 session.gc_probability = 1
; Defines the probability that the 'garbage collection' process is started on every
 ; session initialization. The probability is calculated by using the following equation:
 ; gc_probability/gc_divisor. Where session.gc_probability is the numerator and
 ; session.gc_divisor is the denominator in the equation. Setting this value to 1
 ; when the session.gc_divisor value is 100 will give you approximately a 1% chance
 ; the gc will run on any give request. Increasing this value to 1000 will give you
 ; a 0.1% chance the gc will run on any give request. For high volume production servers,
 ; this is a more efficient approach.
 ; Default Value: 100
 ; Development Value: 1000
 ; Production Value: 1000
 ; http://php.net/session.gc-divisor
 session.gc_divisor = 1000
; After this number of seconds, stored data will be seen as 'garbage' and
 ; cleaned up by the garbage collection process.
 ; http://php.net/session.gc-maxlifetime
 session.gc_maxlifetime = 1440
; NOTE: If you are using the subdirectory option for storing session files
 ;       (see session.save_path above), then garbage collection does *not*
 ;       happen automatically.  You will need to do your own garbage
 ;       collection through a shell script, cron entry, or some other method.
 ;       For example, the following script would is the equivalent of
 ;       setting session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes):
 ;          find /path/to/sessions -cmin +24 | xargs rm
; PHP 4.2 and less have an undocumented feature/bug that allows you to
 ; to initialize a session variable in the global scope, even when register_globals
 ; is disabled.  PHP 4.3 and later will warn you, if this feature is used.
 ; You can disable the feature and the warning separately. At this time,
 ; the warning is only displayed, if bug_compat_42 is enabled. This feature
 ; introduces some serious security problems if not handled correctly. It's
 ; recommended that you do not use this feature on production servers. But you
 ; should enable this on development servers and enable the warning as well. If you
 ; do not enable the feature on development servers, you won't be warned when it's
 ; used and debugging errors caused by this can be difficult to track down.
 ; Default Value: On
 ; Development Value: On
 ; Production Value: Off
 ; http://php.net/session.bug-compat-42
 session.bug_compat_42 = Off
; This setting controls whether or not you are warned by PHP when initializing a
 ; session value into the global space. session.bug_compat_42 must be enabled before
 ; these warnings can be issued by PHP. See the directive above for more information.
 ; Default Value: On
 ; Development Value: On
 ; Production Value: Off
 ; http://php.net/session.bug-compat-warn
 session.bug_compat_warn = Off
; Check HTTP Referer to invalidate externally stored URLs containing ids.
 ; HTTP_REFERER has to contain this substring for the session to be
 ; considered as valid.
 ; http://php.net/session.referer-check
 session.referer_check =
; How many bytes to read from the file.
 ; http://php.net/session.entropy-length
 session.entropy_length = 0
; Specified here to create the session id.
 ; http://php.net/session.entropy-file
 ; On systems that don't have /dev/urandom /dev/arandom can be used
 ; On windows, setting the entropy_length setting will activate the
 ; Windows random source (using the CryptoAPI)
 ;session.entropy_file = /dev/urandom
; Set to {nocache,private,public,} to determine HTTP caching aspects
 ; or leave this empty to avoid sending anti-caching headers.
 ; http://php.net/session.cache-limiter
 session.cache_limiter = nocache
; Document expires after n minutes.
 ; http://php.net/session.cache-expire
 session.cache_expire = 180
; trans sid support is disabled by default.
 ; Use of trans sid may risk your users security.
 ; Use this option with caution.
 ; - User may send URL contains active session ID
 ;   to other person via. email/irc/etc.
 ; - URL that contains active session ID may be stored
 ;   in publically accessible computer.
 ; - User may access your site with the same session ID
 ;   always using URL stored in browser's history or bookmarks.
 ; http://php.net/session.use-trans-sid
 session.use_trans_sid = 0
; Select a hash function for use in generating session ids.
 ; Possible Values
 ;   0  (MD5 128 bits)
 ;   1  (SHA-1 160 bits)
 ; This option may also be set to the name of any hash function supported by
 ; the hash extension. A list of available hashes is returned by the hash_algos()
 ; function.
 ; http://php.net/session.hash-function
 session.hash_function = 0
; Define how many bits are stored in each character when converting
 ; the binary hash data to something readable.
 ; Possible values:
 ;   4  (4 bits: 0-9, a-f)
 ;   5  (5 bits: 0-9, a-v)
 ;   6  (6 bits: 0-9, a-z, A-Z, "-", ",")
 ; Default Value: 4
 ; Development Value: 5
 ; Production Value: 5
 ; http://php.net/session.hash-bits-per-character
 session.hash_bits_per_character = 5
; The URL rewriter will look for URLs in a defined set of HTML tags.
 ; form/fieldset are special; if you include them here, the rewriter will
 ; add a hidden field with the info which is otherwise appended
 ; to URLs.  If you want XHTML conformity, remove the form entry.
 ; Note that all valid entries require a "=", even if no value follows.
 ; Default Value: "a=href,area=href,frame=src,form=,fieldset="
 ; Development Value: "a=href,area=href,frame=src,input=src,form=fakeentry"
 ; Production Value: "a=href,area=href,frame=src,input=src,form=fakeentry"
 ; http://php.net/url-rewriter.tags
 url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"

因为这个是在一台VPS上面配置的,上面有多个项目,于是璞玉打开一个项目,发现此项
目的验证码功能是OK的。
于是查看代码如下:

 代码如下
 代码如下 复制代码


$sessSavePath = "/data/sessions/";
 // Session保存路径
 if(is_writeable($sessSavePath) && is_readable($sessSavePath)){ session_save_path($sessSavePath); }
 if(!empty($cfg_domain_cookie)) session_set_cookie_params(0,'/',$cfg_domain_cookie);

复制代码



$sessSavePath = "/data/sessions/";
 代码如下 复制代码


if (! isset($_COOKIE[$session_name])) {
 // on first start of session we check for errors
 // f.e. session dir cannot be accessed - session file not created
 $orig_error_count = $GLOBALS['error_handler']->countErrors();
 //session_save_path('./tmp');
 session_save_path("/data/www/session");
 $r = session_start();
 if ($r !== true
 || $orig_error_count != $GLOBALS['error_handler']->countErrors()
 ) {
 setcookie($session_name, '', 1);
 /*
 * Session initialization is done before selecting language, so we
 * can not use translations here.
 */
 PMA_fatalError('Cannot start session without errors, please check errors given in your PHP and/or webserver log file and configure your PHP installation properly. Also ensure that cookies are enabled in your browser.');
 }
 unset($orig_error_count);
 } else {
 session_save_path("/data/www/session");
 session_start();
 }

 // Session保存路径  if(is_writeable($sessSavePath) && is_readable($sessSavePath)){ session_save_path($sessSavePath); }  if(!empty($cfg_domain_cookie)) session_set_cookie_params(0,'/',$cfg_domain_cookie); 上面这个代码是在session_start() 初始化之前来判断是否存在session会话的文件夹。 于是就在phpmyadmin里面的保存的那个文件/phpmyadmin/libraries/session.inc.php做了下修改:
 代码如下 复制代码
if (! isset($_COOKIE[$session_name])) {  // on first start of session we check for errors  // f.e. session dir cannot be accessed - session file not created  $orig_error_count = $GLOBALS['error_handler']->countErrors();  //session_save_path('./tmp');  session_save_path("/data/www/session");  $r = session_start();  if ($r !== true  || $orig_error_count != $GLOBALS['error_handler']->countErrors()  ) {  setcookie($session_name, '', 1);  /*  * Session initialization is done before selecting language, so we  * can not use translations here.  */  PMA_fatalError('Cannot start session without errors, please check errors given in your PHP and/or webserver log file and configure your PHP installation properly. Also ensure that cookies are enabled in your browser.');  }  unset($orig_error_count);  } else {  session_save_path("/data/www/session");  session_start();  }

Added session_save_path(“/data/www/session”); in front of session_start(); to solve this problem.
Remember to pass @ini_set(‘session.save_path’, ”/data/www/session”); is invalid!
This problem bothered me for a few hours, and I finally solved it, so I recorded it, which may be helpful in the future.
If it helps you, please leave a message. If you have any opinions, please share them!

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/632071.htmlTechArticleThis article will introduce to you the solution to Fatal error: session_start(): Failed to initialize storage module: files problem way. Original solution: Fatal error: session_start(): Faile...
Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
win10打开游戏fatal error怎么办?win10打开游戏fatal error怎么办?Feb 09, 2024 pm 12:54 PM

win10打开游戏fatalerror怎么办?我们在运行软件或者是游戏的时候会出现提示fatalerror错误怎么办?下面就让本站来为用户们来仔细的介绍一下win10打开游戏fatalerror的处理办法吧。win10打开游戏fatalerror怎么办?方法一:游戏客户端存在了问题,例如文件的损坏或者使用了一些破解补丁,都会导致fatalerror错误的出现,大家可以重新下载游戏。方法二:电脑内存太小也会导致fatalerror错误的出现,如果是物理内存足够的话,那么可以尝试设置一下系统的虚拟内

PHP Fatal error: Call to undefined method PDO::prepare() in的解决方法PHP Fatal error: Call to undefined method PDO::prepare() in的解决方法Jun 22, 2023 pm 06:40 PM

PHP作为一种流行的Web开发语言,已经被使用了很长时间。PHP中集成的PDO(PHP数据对象)类是我们在开发Web应用程序过程中与数据库进行交互的一种常用方法。但是,一些PHP开发者经常遇到的问题是,当使用PDO类与数据库进行交互时,他们会收到这样的错误:PHPFatalerror:CalltoundefinedmethodPDO::prep

在Vue应用中使用axios时出现“Uncaught (in promise) Error: Request failed with status code 500”怎么办?在Vue应用中使用axios时出现“Uncaught (in promise) Error: Request failed with status code 500”怎么办?Jun 24, 2023 pm 05:33 PM

在Vue应用中使用axios是十分常见的,axios是一种基于Promise的HTTP客户端,可以用于浏览器和Node.js。在开发过程中,有时会出现“Uncaught(inpromise)Error:Requestfailedwithstatuscode500”的错误提示,对于开发者来说,这个错误提示可能有些难以理解和解决。本文将会探讨这

解决C++代码中出现的“error: incomplete type is not allowed”问题解决C++代码中出现的“error: incomplete type is not allowed”问题Aug 26, 2023 pm 08:54 PM

解决C++代码中出现的“error:incompletetypeisnotallowed”问题在C++的编程过程中,有时候会遇到一些编译错误,其中一个常见的错误是“error:incompletetypeisnotallowed”。这个错误通常是由于在使用不完整的类型进行操作时引起的。本文将介绍这个错误的原因,并提供几种解决方法。首先,我

最终幻想7fatal error怎么解决最终幻想7fatal error怎么解决Mar 07, 2024 pm 04:40 PM

玩家在最终幻想7中进行游戏时,有很多玩家遇到了fatalerror的问题不知道怎么解决,通常是关于内存不能读取的问题,建议玩家尝试重装游戏解决。最终幻想7fatalerror怎么解决1、重装游戏游戏客户端问题,如文件损坏,不完整,使用了一些破解补丁都会导致致命错误的出现,建议重装游戏。2、把所有文件属性的只读去掉某些文件属性不该是只读而设置成了只读,把所有文件属性的只读去掉就行了,比如一款游戏不能玩,那么右键点击该游戏的安装文件夹,取消只读属性。3、设置虚拟内存可能是由于内存太小,如果物理内存足

0271:real time clock error开不开机怎么办0271:real time clock error开不开机怎么办Mar 13, 2023 am 11:30 AM

“0271:real time clock error”开不开机的解决办法:1、按一下F1,在出现的界面中,将选项栏转到第三项“Date/Time”;2、将系统时间手动修改成现在的时间;3、按F10,在弹出的对话框中,选择yes;4、重新打开笔记本即可正常开机。

解决C++代码中出现的“error: expected initializer before 'datatype'”问题解决C++代码中出现的“error: expected initializer before 'datatype'”问题Aug 25, 2023 pm 01:24 PM

解决C++代码中出现的“error:expectedinitializerbefore'datatype'”问题在C++编程中,有时候我们在编写代码时会遇到一些编译错误,其中一种常见的错误是“error:expectedinitializerbefore'datatype'”。这个错误通常在变量声明或函数定义中发生,可能导致程序无法正确编译或

如何解决PHP Warning: fopen(): failed to open stream: No such file or directory如何解决PHP Warning: fopen(): failed to open stream: No such file or directoryAug 19, 2023 am 10:44 AM

如何解决PHPWarning:fopen():failedtoopenstream:Nosuchfileordirectory在使用PHP开发过程中,我们经常会遇到一些文件操作的问题,其中之一就是"PHPWarning:fopen():failedtoopenstream:Nosuchfileordirectory

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

VSCode Windows 64-bit Download

VSCode Windows 64-bit Download

A free and powerful IDE editor launched by Microsoft

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

EditPlus Chinese cracked version

EditPlus Chinese cracked version

Small size, syntax highlighting, does not support code prompt function

MantisBT

MantisBT

Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

mPDF

mPDF

mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),