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