J'essaie d'héberger un site Web PHP qui m'a été donné. Je vois cet avertissement:
Attention: Inconnu: Votre script repose peut-être sur un effet secondaire de session qui existait jusqu'à PHP 4.2.3. Veuillez noter que l'extension de session ne prend pas en compte les variables globales comme source de données, sauf si register_globals est activé. Vous pouvez désactiver cette fonctionnalité et cet avertissement en désactivant respectivement session.bug_compat_42 ou session.bug_compat_warn. in nknown on line
Qu'est-ce que ça veut dire? Comment pourrais-je retrouver la source de ce problème dans le code?
fondamentalement, vous avez une variable avec le même nom que votre session. ex:
$_SESSION['var1'] = null;
$var1 = 'something';
qui reproduira cette erreur. vous pouvez empêcher PHP d'essayer de trouver des variables existantes et de vous en avertir en ajoutant ces lignes à votre script:
ini_set('session.bug_compat_warn', 0);
ini_set('session.bug_compat_42', 0);
ces valeurs peuvent également être définies dans php.ini ou .htaccess
Il semble y avoir quelques possibilités problématiques ici:
http://www.spiration.co.uk/post/1231/Your-script-possably-relies-on-a-session-side-effect
dit que des cas comme celui-ci:
$_SESSION['firstname']=$_REQUEST['firstname'];
déclenchera l'avertissement.
De plus, j'interprète le contenu de ce bogue php: http://bugs.php.net/bug.php?id=4154 pour signifier que cette erreur peut également se produire lorsque vous affectez une variable à la session superglobal qui n'est pas encore initialisé, par exemple.
//Start of script
$_SESSION['bob'] = $bob;
C'est une bonne information pour savoir ce qui cause l'avertissement, mais je recommanderais de NE PAS fermer les avertissements mentionnés par Owen. Ces fonctions d'exécution sont supprimées dans PHP 5.4. et le développeur devrait se mettre à la pratique d'éviter une telle utilisation des variables.
Pour résoudre ce problème, cela peut être pénible pour les développeurs, mais si vous avez
$_SESSION["user"]
$user;
renommer la session en
$_SESSION["sessuser"];
Ou vice-versa tant que le nom de session et le nom de variable sont différents. Pensez-y de cette façon: lorsque vous effectuez une mise à niveau vers la dernière version, vous devrez de toute façon déboguer votre code.
Lorsque vous apportez des modifications au .htaccess ini_set ne fonctionne pas. Vous devrez le faire comme:
php_flag session.bug_compat_42 0
php_flag session.bug_compat_warn 0
dans mon cas, php.ini passe de on à off
comme ça :
session.bug_compat_42 = off
session.bug_compat_warn = off
si cela ne fonctionne pas, redémarrez Apache