Hi,
Since upgrading my version of PHP from 4.2.3 to 4.3.11 I have been receiving $_SESSION errors.
The site is multilingual and uses the following code at the top of each page to register the session for the language.
<?
// include configuration settings
include("_inc/conf.php");
include("_scr/_classes.php");
include("_inc/func.inc.php");
// _lang/fr.php French translation
// _lang/en.php English translation
// Start session and make $_SESSION variables available
session_start();
// Set default language. Used when we can't determine a language
// or when the page for that language does not exist
$lang_default = 'fr';
$language_key = 'lang';
$env_lang_key = 'HTTP_ACCEPT_LANGUAGE';
// Language change requested
if (true == isset($_GET[$language_key])) {
// Just first 2 characters of language is all we need
$_GET[$language_key] = substr($_GET[$language_key], 0, 2);
// check to make sure languages are valid
if ($_GET[$language_key] == "fr" || $_GET[$language_key] == "en" ) {
// Set language from URL
$lang = $_GET[$language_key];
}
// Language not on URL, so try $_SESSION
} else {
// $_SESSION available, use variable
if (true == isset($_SESSION[$language_key])) {
// Just first 2 characters of language is all we need
$_SESSION[$language_key] = substr($_SESSION[$language_key], 0, 2);
// check to make sure languages are valid
if ($_SESSION[$language_key] == "fr" || $_SESSION[$language_key] == "en" ) {
// Set language from the session
$lang = $_SESSION[$language_key];
}
// Language not availabe from the SESSION - try the browser
} else {
// Get language from browser
$lang = getenv($env_lang_key);
// languages cannot be found from browser
if (false == $lang)
{
// Language not availabe from the environment - use default
$lang = $lang_default;
// language found from browser
} else {
// Just first 2 characters of language is all we need
$lang = substr($lang, 0, 2);
}
}
}
// Now we have the language in $lang
// Save in $_SESSION for other pages
$_SESSION[$language_key] = substr($lang, 0, 2);
// check to make sure languages are valid
if ($_SESSION[$language_key] == "fr" || $_SESSION[$language_key] == "en" ) {
// generate the required filename
$filename = '_lang/' . $lang . '.php';
// check language file exists
if (true == is_file($filename))
{
// required file exists
include ($filename);
// file does not exist, use default
} else {
// include default lang
include ('_lang/' . $lang_default . '.php');
}
// language cannot be found, use default
} else {
// include default lang
$_SESSION[$language_key] = "". $lang_default ."";
include ('_lang/' . $lang_default . '.php');
}
// get form values
if (!get_magic_quotes_gpc()) {
// addslashes to all variables if magic quotes disabled
check_gpc(addslash);
}
?>
I get these errors at the top of the page:
Warning: session_start(): open(C:/phpdev\php\temp\sess_44f1415ea751138e3df732121351964e, O_RDWR) failed: No such file or directory (2) in c:\phpdev\www\dcp\welcome.php on line 11
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\phpdev\www\dcp\welcome.php:11) in c:\phpdev\www\dcp\welcome.php on line 11
And these errors at the bottom:
Warning: Unknown(): open(C:/phpdev\php\temp\sess_44f1415ea751138e3df732121351964e, O_RDWR) failed: No such file or directory (2) in Unknown on line 0
Warning: Unknown(): Failed to write session data (files). Please verify that the current setting of session.save_path is correct (C:/phpdev\php\temp) in Unknown on line 0
Any ideas? Am I registering things incorrectly?
Cheers,
Chris