1199 votes

De référence - Ce qui fait cette erreur signifie en PHP?

Qu'est-ce que cela?

C'est un certain nombre de réponses sur les avertissements, les erreurs et les avis que vous pourriez rencontrer lors de la programmation PHP et n'ont aucune idée de comment le résoudre. C'est aussi une Communauté Wiki, donc tout le monde est invité à participer à l'ajout et le maintien de cette liste.

Pourquoi est-ce?

Des Questions comme "Headers already sent" ou "Appeler un membre d'un non-objet" pop up fréquemment sur un Débordement de Pile. La cause première de ces questions est toujours le même. Si les réponses à ces questions généralement les répéter et de montrer ensuite que l'OP qui ligne à changer dans son cas particulier. Ces réponses ne pas ajouter de la valeur au site parce qu'ils s'appliquent uniquement à l'OP de code particulier. D'autres utilisateurs ayant le même message d'erreur peut pas lire facilement la solution parce qu'ils sont trop localisée. C'est triste, parce qu'une fois que vous avez compris la cause, la fixation de l'erreur est trivial. Par conséquent, cette liste tente d'expliquer la solution d'une manière générale pour s'appliquer.

Que dois-je faire ici?

Si votre question a été marqué comme un double de cette, vous trouverez votre message d'erreur ci-dessous et appliquez le correctif à votre code. Les réponses contiennent généralement plus de liens sont à étudier au cas où il ne devrait pas être du ressort de la réponse générale à lui seul.

Si vous voulez contribuer, s'il vous plaît ajouter vos "favoris" de message d'erreur, d'avertissement ou de l'avis, l'un par réponse, une brève description de ce qu'il signifie (même si c'est seulement en soulignant les conditions de leur page de manuel), une solution possible ou de débogage approche et une liste des existants Q&A qui ont de la valeur. Aussi, n'hésitez pas à améliorer toutes les réponses existantes.

La Liste

Voir aussi

287voto

Gordon Points 156415

Warning: Cannot modify header information - headers already sent

Se produit lorsque votre script essaie d'envoyer un en-tête HTTP pour le client, mais il l'était déjà sortie avant, ce qui a entraîné des en-têtes déjà envoyé au client.

C'est un E_WARNING et il ne sera pas arrêter le script.

Un exemple typique serait un modèle de fichier comme ceci:

<html>
    <?php session_start(); ?>
    <head><title>My Page</title>
</html>
...

L' session_start() fonction tentera d'envoyer des en-têtes avec le cookie de session sur le client. Mais PHP déjà envoyé des en-têtes lorsqu'il écrit l' <html> élément pour le flux de sortie. Vous auriez à déplacer l' session_start() vers le haut.

Vous pouvez résoudre ce problème en passant par les lignes avant le code de déclenchement de l'Alerte et de vérifier où il sorties. Déplacer n'importe quel en-tête de l'envoi de code avant que le code.

On oublie souvent de sortie est de nouvelles lignes après PHP de clôture de l' ?>. Il est considéré comme une norme de pratique pour omettre ?> lorsque c'est la dernière chose dans le fichier. De même, une autre cause fréquente de cet avertissement lors de l'ouverture <?php a un espace vide, une ligne ou un personnage invisible devant elle, ce qui provoque le serveur web pour envoyer les en-têtes et les espaces/newline ainsi, lorsque PHP démarre l'analyse ne sera pas en mesure d'envoyer des en-tête.

Si votre fichier comporte plus d'un <?php ... ?> bloc de code, vous ne devriez avoir aucun espace entre eux. (Note: Vous pourriez avoir plusieurs blocs si vous avez eu un code qui a été construit automatiquement)

Assurez-vous également que vous n'avez pas d'Ordre d'Octet dans votre code, par exemple lors de l'encodage du script est de l'UTF-8 avec BOM.

Questions Connexes:

198voto

hakre Points 102271

Erreur fatale: Appel à une fonction de membre ... sur un non-objet

Il arrive avec un code similaire xyz->method()xyz n'est pas un objet et que par conséquent, method ne peut pas être appelé.

C'est une erreur fatale qui va arrêter le script.

Le plus souvent un signe que le code est manquant vérifie les conditions d'erreur. Valider qu'un objet est en fait un objet avant d'appeler ses méthodes.

Un typique exemple serait

// ... some code using PDO
$statement = $pdo->prepare('invalid query', ...);
$statement->execute(...);

Dans l'exemple ci-dessus, la requête ne peut pas être préparé et prepare() va attribuer false de $statement. Essayez d'appeler l' execute() méthode sera alors le résultat de l'Erreur Fatale, car false est un "non-objet". Il est un booléen.

Même si l' ->prepare est un échec, alors votre $pdo de la base de données de la poignée de l'objet n'a pas obtenir passé dans le champ d'application actuel. Trouver où elle a obtenu défini. Puis le passer en paramètre, magasin de la propriété, ou le partager par le biais de la portée mondiale.

Questions Connexes:

122voto

nalply Points 4675

On ne voit rien. La page est vide et blanc.

Aussi connu comme la Page Blanche De la Mort ou de l' Écran Blanc De la Mort. Cela se produit lorsque les rapports d'erreur est éteint et une erreur fatale (souvent l'erreur de syntaxe).

Si vous avez d'erreur journalisation est activée, vous trouverez le béton message d'erreur dans votre journal des erreurs. Ce sera généralement dans un fichier appelé "php_errors.journal", soit dans un emplacement central (par exemple, /var/log/apache2 sur de nombreux environnements Linux) ou dans le répertoire du script lui-même (parfois utilisé dans un environnement d'hébergement partagé).

Parfois, il peut être plus simple pour activer temporairement l'affichage des erreurs. Le blanc de la page affiche alors le message d'erreur. Prendre soin parce que ces erreurs sont visibles à tout le monde de visiter le site.

Ceci peut être facilement fait par l'ajout en haut du script, le code PHP suivant:

ini_set('display_errors', 1); error_reporting(~0);

Le code activer l'affichage des erreurs et des rapports au plus haut niveau.

Depuis l' ini_set() est exécutée à l'exécution, il n'a pas d'effet sur l'analyse/les erreurs de syntaxe. Ces erreurs apparaissent dans le journal. Si vous souhaitez afficher dans la sortie (par ex. dans un navigateur), vous devez définir l' display_startup_errors directive true. Pour ce faire, soit dans l' php.ini ou en .htaccess ou par toute autre méthode qui affecte la configuration avant d'exécution.

Vous pouvez utiliser les mêmes méthodes pour définir la log_errors et error_log directives de choisir votre propre emplacement du fichier journal.

En regardant dans le journal ou à l'aide de l'écran, vous obtiendrez un bien meilleur message d'erreur et la ligne de code où votre script vient de s'arrêter.

Questions connexes:

Les erreurs liées:

108voto

Gordon Points 156415

Notice: Undefined Index

Qui se passe lorsque vous essayez d'accéder à un tableau par une clé qui n'existe pas dans le tableau.

Un exemple typique pour un Undefined Index avis (démo)

$data = array('foo' => '42', 'bar');
echo $data['spinach'];
echo $data[1];

Les deux spinach et 1 n'existent pas dans le tableau, entraînant un E_NOTICE d'être déclenchée.

La solution est de s'assurer que l'index ou le décalage n'existe pas, soit en utilisant array_key_exists ou isset avant d'accéder à l'indice.

$data = array('foo' => '42', 'bar');
if (array_key_exists('spinach', $data)) {
    echo $data['spinach'];
}
else {
    echo 'No key spinach in array';
}

Si vous avez un code comme:

<?php echo $_POST['message']; ?>
<form method="post" action="">
    <input type="text" name="message">
    ...

ensuite, $_POST['message'] ne seront pas fixés lors de ce premier chargement de la page et vous obtiendrez l'erreur ci-dessus. Uniquement lorsque le formulaire est soumis et ce code est exécuté une seconde fois l'index de tableau existe. Généralement, vous le vérifier avec:

if ($_POST)  ..  // if the $_POST array is not empty
// or
if ($_SERVER['REQUEST_METHOD'] == 'POST') ..  // page was requested with POST

Questions Connexes:

89voto

xdazz Points 85907

Warning: mysql_fetch_array() s'attend à ce paramètre 1 pour être resource, boolean donné

D'abord et avant tout:

S'il vous plaît, n'utilisez pas d' mysql_* fonctions dans le nouveau code. Il n'est plus maintenu et est officiellement obsolète. Voir la zone rouge? Apprendre à propos de déclarations préparées à l'avance au lieu de cela, et d'utiliser PDO ou MySQLi - cet article va vous aider à choisir. Si vous choisissez AOP, voici un bon tutoriel.


Cela se produit lorsque vous essayez d'extraire des données à partir du résultat de l' mysql_query mais l'échec de la requête.

C'est un avertissement, et de ne pas arrêter le script, mais fera de votre programme de faux.

Vous devez vérifier le résultat retourné par mysql_query par

$res = mysql_query($sql);
if (!$res) {
   die(mysql_error());
}
// after checking, do the fetch

Questions Connexes:

Les Erreurs Liées:

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X