2008-10-06 19 views
42

J'essaye d'héberger un site web PHP qui m'a été donné. Je vois cet avertissement:Avertissement de l'effet secondaire de la session PHP avec les variables globales comme source de données

Attention: Unknown: Votre script peut repose sur une session effet secondaire qui existait jusqu'à PHP 4.2.3. S'il vous plaît être conseillé que l'extension de session ne considère pas les variables globales comme une source de données, sauf si register_globals est activé. Vous pouvez désactiver cette fonctionnalité et cet avertissement en définissant session.bug_compat_42 ou session.bug_compat_warn sur off, respectivement. dans inconnu en ligne

Qu'est-ce que cela signifie? Comment puis-je retrouver la source de ce problème dans le code?

Répondre

98

fondamentalement vous avez une variable avec le même nom que votre session. ex:

$_SESSION['var1'] = null; 
$var1 = 'something'; 

qui va reproduire cette erreur. vous pouvez arrêter PHP d'essayer de trouver des variables existantes et vous avertir à leur sujet en ajoutant ces lignes à votre script:

ini_set('session.bug_compat_warn', 0); 
ini_set('session.bug_compat_42', 0); 

ces valeurs peuvent être définies dans le php.ini ou .htaccess ainsi

+0

fonctionne comme un charme! Pouces vers le haut! – Anunay

+2

Pour les personnes qui ne sont pas géniales pour modifier les fichiers php.ini, le format ci-dessus n'est pas ce que vous utilisez. Il devrait être "session.bug_compat_42 = 0" sur une ligne et "session.bug_compat_warn = 0" sur une autre (sans guillemets). Faites d'abord une recherche dans votre fichier php.ini. Il est probable que les deux ont déjà été définis comme 1 et vous avez juste besoin de passer à 0 – rgbflawed

6

Il semble être quelques possibilités problématiques ici:

http://www.spiration.co.uk/post/1231/Your-script-possibly-relies-on-a-session-side-effect

dit que les cas comme celui-ci:

$_SESSION['firstname']=$_REQUEST['firstname']; 

déclenchera l'avertissement.

En outre, j'interprète ce contenu de bogue php: http://bugs.php.net/bug.php?id=41540 pour indiquer que cette erreur peut également se produire lorsque vous affectez une variable à la superglobale de session qui n'est pas encore initialisée, par ex.

//Start of script 
$_SESSION['bob'] = $bob; 
2

Lorsque vous modifiez le fichier .htaccess, ini_set ne fonctionne pas. Vous devez faire comme:

php_flag session.bug_compat_42 0 
php_flag session.bug_compat_warn 0 
5

Ceci est une bonne information sur la recherche de ce qui cause l'avertissement, mais je ne recommande pas d'arrêter les avertissements Owen mentionne. Ces fonctions d'exécution sont removed in PHP 5.4.0 et le développeur devrait entrer dans la pratique d'éviter une telle utilisation de variables.

Pour résoudre ce problème, il peut être une douleur à la fin des développeurs, mais si vous avez

$_SESSION["user"] 
$user; 

renommer la session

$_SESSION["sessuser"]; 

ou vice-versa aussi longtemps que la session nom et le nom de la variable sont différents.Pensez-y de cette façon: lorsque vous mettez à niveau vers la dernière version, vous devrez déboguer votre code de toute façon.

1

dans mon cas, le changement de php.ini sur off

comme ceci:

session.bug_compat_42 = off 
session.bug_compat_warn = off 

si ne fonctionne pas, redémarrez apache