PHP On IIS & My Epic Battle (Failed to write session data)

Sharing is Caring

Recently, I have been busy using Windows Server 2003 and IIS to host a web-enabled application written in PHP,using the PEAR modules, and MySQL and MS SQL.

I couldn’t really believe how much messing around is necessary to get PHP to function correctly, and to properly use the PEAR modules. I have probably spent two hours modifying the php.ini file based on what I have found on php.net and around the internet.

My webapp, needed sessions and of course I kept getting warnings and critcal errors from PHP. I found so much information that was just plain wrong and probably never was correct. My latest problem in this epic battle was this warning:

Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct () in Unknown on line 0

Eventually, I read through my PHP.ini file from start to finish and found this information:

; 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.

;
; As of PHP 4.0.1, you can define the path 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.

In conclusion, if you will run your web-enabled application on a Windows PC you must set the session.save_path to something and you must create the directory structure yourself. I am using the session.save_path = “C:temp” and recommend you do something similiar.

Sharing is Caring

Brian is a software architect and technology leader living in Niagara Falls with 13+ years of development experience. He is passionate about automation, business process re-engineering, and building a better tomorrow.

Brian is a proud father of four: two boys, and two girls and has been happily married to Crystal for more than ten years. From time to time, Brian may post about his faith, his family, and definitely about technology.