Depuis un certain temps, nous rencontrons un problème très étrange avec notre serveur d'hébergement. Une fois par moment (semble aléatoire), les variables dans PHP deviennent NULL.Les variables PHP deviennent aléatoirement
En général, tout fonctionne parfaitement bien, mais une fois que cela arrive. Tous les comptes sur le serveur sont affectés et toutes les applications PHP (y compris PHPMyAdmin, Wordpress nos propres scripts). Nous avons contacté notre hébergeur, mais ils ne trouvent aucune solution. J'ai eu peu d'idées, la plus prometteuse était un problème avec Suhosin. Mais je n'obtiens aucun message directement dans le journal.
Nous avons fait un script le plus simple possible de reproduire l'erreur:
<?php
class Example
{
protected $stringVar = 'this is a string value';
public function accessParameter()
{
$error = false;
if (isset($this->stringVar) && !is_null($this->stringVar)) {
echo "string var : " . $this->toStringWithType($this->stringVar) . "\n";
} else {
echo "string var is not set\n";
$error = true;
}
if ($error) {
$logfile = dirname(__FILE__)."/random_bug_log.log";
file_put_contents($logfile, date('Y-m-d H:i:s')."\n", FILE_APPEND);
file_put_contents($logfile, $this->toStringWithType($this->stringVar) . "\n", FILE_APPEND);
}
}
public function toStringWithType($var)
{
$type = gettype($var);
return "($type) '$var'";
}
}
$e = new Example();
$e->accessParameter();
Sortie normale:
string var : (string) 'this is a string value'
sortie lorsque la chose étrange se produit:
string var is not set
J'ouvert à tout idées ou suggestions comment résoudre ce problème. Je suppose que la solution ultime est de changer la société d'hébergement. Je n'ai pas réussi à créer ce problème sur localhost ou sur un autre serveur.
Éprouvette qui ont été faites, y compris vos suggestions:
<?php
class Example
{
protected $stringVar = 'this is a string value';
public function accessParameter() {
$error = false;
if(isset($this->stringVar) && !is_null($this->stringVar)) {
echo "string var : "
.$this->toStringWithType($this->stringVar)
."\n";
} else {
echo "string var is not set\n";
$error = true;
}
if($error) {
$logfile = dirname(__FILE__)."/random_bug_log.log";
file_put_contents($logfile, date('Y-m-d H:i:s')." ", FILE_APPEND);
file_put_contents($logfile,
$this->toStringWithType($this->stringVar) . "\n",
FILE_APPEND);
}
}
public function writeParameter() {
$this->stringVar="variable assigned";
if(isset($this->stringVar) && !is_null($this->stringVar)) {
echo "string var : "
.$this->toStringWithType($this->stringVar)
."\n";
} else {
echo "string var is not set\n";
$error = true;
}
}
public function toStringWithType($var)
{
$type = gettype($var);
return "($type) '$var'";
}
}
$e = new Example();
$e->accessParameter();
$e->writeParameter();
La sortie alors que la chose se produit:
string var is not set
string var is not set
C'est un cas très étrange. Je suggère de voir si elles peuvent changer votre serveur plutôt que de changer de compagnie, cela pourrait être le signe d'une défaillance matérielle intermittente ou d'une défaillance imminente d'une puce mémoire par exemple – Anigel
'isset - Détermine si une variable est définie et n'est pas NULL' [voir ici] (http://ir2.php.net/manual/fr/function.isset.php). vous n'avez donc pas besoin de vérifier 'is_null'. – Amir
J'ai également rencontré un problème étrange, comme aléatoirement 'strpos' renvoie' false' ... – mpyw