try - Referenz-Was bedeutet dieser Fehler in PHP?




php user error (20)

Was ist das?

Dies ist eine Anzahl von Antworten auf Warnungen, Fehler und Hinweise, die Sie beim Programmieren von PHP kennen lernen können und keine Ahnung haben, wie Sie diese beheben können. Dies ist auch ein Community-Wiki, so dass jeder eingeladen wird, diese Liste hinzuzufügen und zu pflegen.

Warum ist das?

Fragen wie "Bereits gesendete Header" oder "Aufruf eines Mitglieds eines Nicht-Objekts" werden häufig in Stack Overflow angezeigt. Die Ursache dieser Fragen ist immer dieselbe. Die Antworten auf diese Fragen wiederholen sie in der Regel und zeigen dann die OP, welche Zeile in ihrem speziellen Fall geändert werden soll. Diese Antworten fügen der Site keinen Wert hinzu, da sie nur für den jeweiligen Code des OP gelten. Andere Benutzer mit dem gleichen Fehler können die Lösung nicht einfach auslesen, da sie zu lokal sind. Das ist traurig, denn sobald Sie die Ursache erkannt haben, ist das Beheben des Fehlers trivial. Daher versucht diese Liste, die Lösung allgemein zu erklären.

Was soll ich hier machen?

Wenn Ihre Frage als ein Duplikat markiert wurde, finden Sie unten Ihre Fehlermeldung und wenden Sie das Update auf Ihren Code an. Die Antworten enthalten in der Regel weitere Links, die zu untersuchen sind, falls die allgemeine Antwort nicht klar sein sollte.

Wenn Sie etwas beitragen möchten, fügen Sie bitte Ihre "Lieblings" -Fehlermeldung, Warnung oder Hinweis, eine pro Antwort, eine kurze Beschreibung, was es bedeutet (auch wenn es nur Begriffe auf ihre Handbuchseite hervorhebt), eine mögliche Lösung oder Debugging-Ansatz und eine Auflistung vorhandener Q & A, die wertvoll sind. Fühlen Sie sich auch frei, vorhandene Antworten zu verbessern.

Die Liste

Siehe auch

https://code.i-harness.com


Error: Syntax Error, unerwartet '['

Dieser Fehler tritt in zwei Varianten auf:

Variante 1

$arr = [1, 2, 3];

Diese Array-Initialisierersyntax wurde nur in PHP 5.4 eingeführt; Es wird einen Parser-Fehler auf Versionen davor auslösen. Wenn möglich, aktualisieren Sie Ihre Installation oder verwenden Sie die alte Syntax:

$arr = array(1, 2, 3);

Siehe auch dieses Beispiel aus dem Handbuch.

Variante 2

$suffix = explode(',', 'foo,bar')[1];

Die Ergebnisse der Array-Dereferenzierung wurden auch in PHP 5.4 eingeführt. Wenn es nicht möglich ist, ein Upgrade durchzuführen, müssen Sie eine (temporäre) Variable verwenden:

$parts = explode(',', 'foo,bar');
$suffix = $parts[1];

Siehe auch dieses Beispiel aus dem Handbuch.


Fataler Fehler: Erlaubte Speichergröße von XXX Byte erschöpft (versuchte XXX Bytes zuzuweisen)

Es ist nicht genügend Speicher vorhanden, um das Skript auszuführen. PHP hat das Speicherlimit erreicht und beendet die Ausführung. Dieser Fehler ist fatal, das Skript stoppt. Der Wert des Speicherlimits kann entweder in der Datei php.ini oder mit ini_set('memory_limit', '128 M'); konfiguriert werden ini_set('memory_limit', '128 M'); im Skript (wodurch der in php.ini definierte Wert php.ini ). Der Zweck des Speicherlimits besteht darin, zu verhindern, dass ein einzelnes PHP-Skript den gesamten verfügbaren Speicher verschlingt und den gesamten Webserver herunterbringt.

Das erste, was zu tun ist, ist die Menge an Speicher, die Ihr Skript benötigt, zu minimieren. Wenn Sie beispielsweise eine große Datei in eine Variable einlesen oder viele Datensätze aus einer Datenbank abrufen und alle in einem Array speichern, benötigt dies möglicherweise viel Speicher. Ändern Sie den Code, um stattdessen die Datei Zeile für Zeile zu lesen oder Datenbankdatensätze nacheinander zu holen, ohne sie alle im Speicher abzulegen. Dies erfordert ein gewisses konzeptionelles Bewusstsein, was hinter den Kulissen passiert und wenn Daten im Speicher vs. anderswo gespeichert werden.

Wenn dieser Fehler aufgetreten ist, während Ihr Skript keine speicherintensive Arbeit ausgeführt hat, müssen Sie Ihren Code überprüfen, um festzustellen, ob ein Speicherverlust vorliegt. Die Funktion memory_get_usage ist dein Freund.

Verwandte Fragen:

  • Alle "Fataler Fehler: Erlaubte Speichergröße von XXX Bytes erschöpft" Fragen zu

Hinweis: Undefinierte Variable

Tritt auf, wenn Sie versuchen, eine Variable zu verwenden, die zuvor nicht definiert wurde.

Ein typisches Beispiel wäre

foreach ($items as $item) {
    // do something with item
    $counter++;
}

Wenn Sie $counter nicht zuvor definiert haben, löst der obige Code die Benachrichtigung aus.

Der richtige Weg wäre, die Variable vor ihrer Verwendung zu setzen, auch wenn es nur eine leere Zeichenfolge ist

$counter = 0;
foreach ($items as $item) {
    // do something with item
    $counter++;
}

Verwandte Fragen:


Hinweis: Undefinierter Index

Tritt auf, wenn Sie versuchen, auf ein Array mit einem Schlüssel zuzugreifen, der nicht im Array vorhanden ist.

Ein typisches Beispiel für einen Undefined Index Hinweis wäre ( demo )

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

Sowohl spinach als auch 1 sind nicht im Array vorhanden, wodurch ein E_WARNING ausgelöst wird.

Die Lösung besteht darin, sicherzustellen, dass der Index oder Offset vor dem Zugriff auf diesen Index existiert. Dies kann bedeuten, dass Sie einen Fehler in Ihrem Programm beheben müssen, um sicherzustellen, dass diese Indizes vorhanden sind, wenn Sie dies erwarten. Oder es kann bedeuten, dass Sie testen müssen, ob die Indizes mit array_key_exists oder isset :

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

Wenn Sie Code wie haben:

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

dann wird $_POST['message'] nicht gesetzt, wenn diese Seite zum ersten Mal geladen wird, und Sie erhalten den obigen Fehler. Nur wenn das Formular übergeben wird und dieser Code ein zweites Mal ausgeführt wird, existiert der Array-Index. Normalerweise überprüfen Sie dies mit:

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

Verwandte Fragen:


MySQL: Sie haben einen Fehler in Ihrer SQL-Syntax. Überprüfen Sie das Handbuch, das Ihrer MySQL-Server-Version entspricht, für die richtige Syntax, die in der Nähe von ... at line verwendet werden soll ...

Dieser Fehler wird häufig dadurch verursacht, dass Sie vergessen haben, die an eine MySQL-Abfrage übergebenen Daten ordnungsgemäß zu umgehen.

Ein Beispiel dafür, was nicht zu tun ist (die "schlechte Idee"):

$query = "UPDATE `posts` SET my_text='{$_POST['text']}' WHERE id={$_GET['id']}";
mysqli_query($db, $query);

Dieser Code könnte in eine Seite mit einem Formular zum Einreichen mit einer URL wie http://example.com/edit.php?id=10 (um den Beitrag Nr. 10 zu bearbeiten) http://example.com/edit.php?id=10

Was passiert, wenn der eingereichte Text einfache Anführungszeichen enthält? $query endet mit:

$query = "UPDATE `posts` SET my_text='I'm a PHP newbie' WHERE id=10';

Und wenn diese Abfrage an MySQL gesendet wird, wird es sich beschweren, dass die Syntax falsch ist, weil es ein zusätzliches einfaches Anführungszeichen in der Mitte gibt.

Um solche Fehler zu vermeiden, MÜSSEN Sie die Daten immer vor der Verwendung in einer Abfrage ausschließen.

Es ist auch sehr wichtig, dass Daten vor der Verwendung in einer SQL-Abfrage entschlüsselt werden. Wenn Sie dies nicht tun, ist Ihr Skript für SQL-Injektionen offen. Eine SQL-Injektion kann zu Änderungen, Verlusten oder Änderungen eines Datensatzes, einer Tabelle oder einer gesamten Datenbank führen. Dies ist ein sehr ernstes Sicherheitsproblem!

Dokumentation:


Nichts ist zu sehen. Die Seite ist leer und weiß.

Auch bekannt als die Weiße Seite des Todes oder White Screen Of Death . Dies geschieht, wenn die Fehlerberichterstattung deaktiviert ist und ein schwerwiegender Fehler (häufig Syntaxfehler) aufgetreten ist.

Wenn Sie die Fehlerprotokollierung aktiviert haben, finden Sie die konkrete Fehlermeldung in Ihrem Fehlerprotokoll. Dies wird normalerweise in einer Datei namens "php_errors.log" sein, entweder an einem zentralen Ort (zB /var/log/apache2 in vielen Linux-Umgebungen) oder im Verzeichnis des Skripts selbst (manchmal in einer Shared-Hosting-Umgebung).

Manchmal kann es einfacher sein, die Anzeige von Fehlern vorübergehend zu aktivieren. Die weiße Seite zeigt dann die Fehlermeldung an. Seien Sie vorsichtig, denn diese Fehler sind für jeden sichtbar, der die Website besucht.

Dies kann leicht durch Hinzufügen des folgenden PHP-Codes am Anfang des Skripts erfolgen:

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

Der Code wird die Anzeige von Fehlern aktivieren und die Berichterstattung auf die höchste Stufe setzen.

Da das ini_set() zur Laufzeit ausgeführt wird, hat es keine Auswirkungen auf Syntax- / Syntaxfehler. Diese Fehler werden im Protokoll angezeigt. Wenn Sie sie auch in der Ausgabe anzeigen möchten (z. B. in einem Browser), müssen Sie die Anweisung display_startup_errors auf true . Tun Sie dies entweder in der php.ini oder in einem .htaccess oder mit einer anderen Methode, die die Konfiguration vor der Laufzeit beeinflusst .

Sie können dieselben Methoden verwenden, um die Direktiven log_errors und error_log , um Ihren eigenen Speicherort für Protokolldateien auszuwählen.

Wenn Sie im Protokoll suchen oder das Display verwenden, erhalten Sie eine viel bessere Fehlermeldung und die Codezeile, in der Ihr Skript zum Stillstand kommt.

Verwandte Fragen:

Ähnliche Fehler:


Parse-Fehler: Syntaxfehler, unerwarteter T_PAAMAYIM_NEKUDOTAYIM

Der Scope-Resolution-Operator wird auch "Paamayim Nekudotayim" aus dem Hebräischen פעפעיםם נקנקדדיםם genannt. was "doppelter Doppelpunkt" oder "doppelter Doppelpunkt" bedeutet.

Dieser Fehler tritt normalerweise auf, wenn Sie versehentlich :: in Ihren Code einfügen.

Verwandte Fragen:

Dokumentation:


Parse-Fehler: Syntaxfehler, unerwarteter T_VARIABLE

Mögliches Szenario

Ich kann nicht finden, wo mein Code falsch gelaufen ist. Hier ist mein voller Fehler:

Parse-Fehler: Syntaxfehler, unerwarteter T_VARIABLE in Zeile x

Was ich versuche

$sql = 'SELECT * FROM dealer WHERE id="'$id.'"';

Antworten

Parse error: Ein Problem mit der Syntax Ihres Programms, z. B. das Lassen eines Semikolons am Ende einer Anweisung oder, wie im obigen Fall, das Fehlen der . Operator. Der Interpreter beendet das Programm, wenn ein Parse-Fehler auftritt.

In einfachen Worten ist dies ein Syntaxfehler, was bedeutet, dass etwas in Ihrem Code verhindert, dass es korrekt analysiert wird und daher ausgeführt wird.

Was Sie tun sollten, ist sorgfältig zu überprüfen, wo der Fehler für einfache Fehler liegt.

Diese Fehlermeldung bedeutet, dass der PHP-Interpreter in der Zeile x der Datei eine offene Klammer erwartet hat, aber stattdessen auf etwas namens T_VARIABLE . Diese T_VARIABLE Sache wird als token . Es ist die Art und Weise, wie der PHP-Interpreter verschiedene grundlegende Teile von Programmen ausdrückt. Wenn der Interpreter ein Programm einliest, übersetzt er das, was Sie geschrieben haben, in eine Liste von Token. Wo immer Sie eine Variable in Ihr Programm T_VARIABLE , gibt es in der Liste des Interpreters ein T_VARIABLE Token.

Gut zu lesen: Liste der Parser-Token

Stelle also sicher, dass du mindestens E_PARSE in deiner php.ini . Parse-Fehler sollten in Produktionsskripten nicht vorhanden sein.

Ich habe immer empfohlen, die folgende Aussage hinzuzufügen, während ich codiere:

error_reporting(E_ALL);

PHP Fehlerberichte

Es ist auch eine gute Idee, eine IDE zu verwenden, mit der Sie während der Eingabe Fehler parsen können. Sie können verwenden:

  1. NetBeans (schöne Schönheit, kostenlose Software) (meiner Meinung nach das Beste)
  2. PhpStorm (Onkel Gordon liebe das: P, bezahlter Plan, enthält proprietäre und freie Software)
  3. Eclipse (Schöne und das Biest, freie Software)

Verwandte Fragen:

  • Referenz: PHP Parse / Syntax Fehler; und wie man sie löst?

Schwerwiegender Fehler: Aufruf einer Member-Funktion ... bei einem Nicht-Objekt

Es passiert mit einem Code ähnlich wie xyz->method() wobei xyz kein Objekt ist und daher diese method nicht aufgerufen werden kann.

Dies ist ein schwerwiegender Fehler, der das Skript stoppt (Vorwärtskompatibilitätshinweis: Es wird ein abfangbarer Fehler, der mit PHP 7 beginnt).

In den meisten Fällen ist dies ein Zeichen dafür, dass der Code keine Überprüfungen auf Fehlerbedingungen enthält. Überprüfen Sie, ob ein Objekt tatsächlich ein Objekt ist, bevor Sie seine Methoden aufrufen.

Ein typical Beispiel wäre

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

Im obigen Beispiel kann die Abfrage nicht vorbereitet werden, und prepare() weist false der $statement . Der Versuch, die execute() -Methode aufzurufen execute() führt dann zum Fatal Error, weil false ein "Nicht-Objekt" ist, weil der Wert ein boolescher Wert ist.

Finden Sie heraus, warum Ihre Funktion einen booleschen Wert anstelle eines Objekts zurückgegeben hat. Überprüfen Sie zum Beispiel das $pdo Objekt auf den letzten aufgetretenen Fehler. Details darüber, wie Sie dies debuggen können, hängen davon ab, wie Fehler für die jeweilige Funktion / das fragliche Objekt / die betroffene Klasse gehandhabt werden.

Wenn sogar die ->prepare fehlschlägt, dann wurde Ihr $pdo Datenbank-Handle-Objekt nicht in den aktuellen Bereich übernommen . Finde heraus, wo es definiert wurde. Dann übergeben Sie es als Parameter, speichern Sie es als Eigenschaft, oder teilen Sie es über den globalen Bereich.

Ein anderes Problem kann bedingt sein, ein Objekt zu erstellen und dann zu versuchen, eine Methode außerhalb dieses bedingten Blocks aufzurufen. Beispielsweise

if ($someCondition) {
    $myObj = new MyObj();
}
// ...
$myObj->someMethod();

Wenn Sie versuchen, die Methode außerhalb des bedingten Blocks auszuführen, ist Ihr Objekt möglicherweise nicht definiert.

Verwandte Fragen:

  • Ruft eine Member-Funktion für ein Nicht-Objekt auf
  • Listet alle PHP auf "Fataler Fehler: Aufruf einer Member-Funktion ... auf einem Nicht-Objekt" Fragen zu

Schwerwiegender Fehler: Aufruf zu undefinierter Funktion XXX

Tritt auf, wenn Sie versuchen, eine Funktion aufzurufen, die noch nicht definiert ist. Häufige Ursachen sind fehlende Erweiterungen und Includes, bedingte Funktionsdeklarationen, Funktion in der Funktionsdeklaration oder einfache Tippfehler.

Beispiel 1 - Conditional Function Declaration

$someCondition = false;
if ($someCondition === true) {
    function fn() {
        return 1;
    }
}
echo fn(); // triggers error

In diesem Fall wird fn() niemals deklariert, weil $someCondition nicht wahr ist.

Beispiel 2 - Funktion in der Funktionserklärung

function createFn() 
{
    function fn() {
        return 1;
    }
}
echo fn(); // triggers error

In diesem Fall wird fn erst deklariert, wenn createFn() aufgerufen wird. Beachten Sie, dass nachfolgende Aufrufe von createFn() einen Fehler bei der Deklaration einer vorhandenen Funktion auslösen.

Sie können dies auch für eine integrierte PHP-Funktion sehen. Versuchen Sie im offiziellen Handbuch nach der Funktion zu suchen und prüfen Sie, welcher "Erweiterung" (PHP-Modul) sie angehört und welche PHP-Versionen sie unterstützen.

Im Fall einer fehlenden Erweiterung installiere diese Erweiterung und aktiviere sie in der php.ini. In den Installationsanweisungen im PHP-Handbuch finden Sie die Erweiterung, in der Ihre Funktion angezeigt wird. Möglicherweise können Sie die Erweiterung auch mit Ihrem Paketmanager aktivieren oder installieren (z. B. apt in Debian oder Ubuntu, yum in Red Hat oder CentOS) oder a Systemsteuerung in einer Shared Hosting-Umgebung.

Wenn die Funktion in einer neueren Version von PHP von dem, was Sie verwenden, eingeführt wurde, finden Sie möglicherweise Links zu alternativen Implementierungen in dem Handbuch oder seinem Kommentarabschnitt. Wenn es aus PHP entfernt wurde, suchen Sie nach Informationen zu den Gründen, da dies möglicherweise nicht mehr erforderlich ist.

Stellen Sie bei fehlenden Includes sicher, dass die Datei, die die Funktion deklariert, vor dem Aufruf der Funktion eingefügt wird.

Im Falle von Tippfehlern, korrigieren Sie den Tippfehler.

Verwandte Fragen:

  • https://.com/search?q=Fatal+error%3A+Call+to+undefined+function

Schwerwiegender Fehler: Klasse kann nicht neu deklariert werden [Klassenname]

Schwerwiegender Fehler: Kann [Funktionsname] nicht erneut deklarieren

Dies bedeutet, dass Sie entweder den gleichen Funktions- / Klassennamen zweimal verwenden und einen davon umbenennen müssen, oder weil Sie require_once oder include_once oder include_once .

Wenn eine Klasse oder eine Funktion in PHP deklariert wird, ist sie unveränderlich und kann später nicht mit einem neuen Wert deklariert werden.

Betrachten Sie den folgenden Code:

Klasse.php

<?php

class MyClass
{
    public function doSomething()
    {
        // do stuff here
    }
}

index.php

<?php

function do_stuff()
{
   require 'class.php';
   $obj = new MyClass;
   $obj->doSomething();
}

do_stuff();
do_stuff();

Der zweite Aufruf von do_stuff() wird den obigen Fehler erzeugen. Durch das Ändern von require in require_once können wir sicher sein, dass die Datei, die die Definition von MyClass , nur einmal geladen wird und der Fehler vermieden wird.


Schwerwiegender Fehler: Verwenden von $ this, wenn nicht im Objektkontext

$this ist eine spezielle Variable in PHP, die nicht zugewiesen werden kann. Wenn auf einen Kontext zugegriffen wird, in dem er nicht existiert, wird dieser schwerwiegende Fehler ausgegeben.

Dieser Fehler kann auftreten:

  1. Wenn eine nicht statische Methode statisch aufgerufen wird. Beispiel:

    class Foo {
       protected $var;
       public function __construct($var) {
           $this->var = $var;
       }
    
       public static function bar () {
           // ^^^^^^
           echo $this->var;
           //   ^^^^^
       }
    }
    
    Foo::bar();
    

    Wie zu beheben: überprüfen Sie Ihren Code erneut, $this kann nur im Objektkontext verwendet werden, und sollte nie in einer statischen Methode verwendet werden. Außerdem sollte eine statische Methode nicht auf die nicht statische Eigenschaft zugreifen. Verwenden Sie self::$static_property um auf die statische Eigenschaft zuzugreifen.

  2. Wenn Code aus einer Klassenmethode in eine normale Funktion oder nur in den globalen Gültigkeitsbereich kopiert wurde und die Variable $this special beibehalten wird.
    So beheben Sie das Problem: Überprüfen Sie den Code und ersetzen Sie $this durch eine andere Substitutionsvariable.

Verwandte Fragen:

  1. Rufen Sie die nicht statische Methode als statisch auf: PHP Fataler Fehler: Verwenden Sie $ this, wenn Sie nicht im Objektkontext sind
  2. Kopieren Sie den Code: Schwerwiegender Fehler: Verwenden Sie $ this, wenn Sie nicht im Objektkontext sind
  3. Alles "Using $ this, wenn nicht im Objektkontext" Fragen zu

Warnung: [Funktion] erwartet Parameter 1 als Ressource, boolscher Wert

(Eine allgemeinere Variante von Warning: mysql_fetch_array () erwartet, dass Parameter 1 als Ressource, Boolean gegeben ist )

Ressourcen sind ein type in PHP (wie Strings, Integer oder Objekte). Eine Ressource ist ein undurchsichtiger Blob ohne eigenen Wert. Eine Ressource ist spezifisch und definiert durch bestimmte PHP-Funktionen oder -Erweiterungen. Zum Beispiel definiert die Mysql-Erweiterung zwei Arten von Ressourcen :

Im MySQL-Modul werden zwei Ressourcentypen verwendet. Die erste ist die Verbindungskennung für eine Datenbankverbindung, die zweite eine Ressource, die das Ergebnis einer Abfrage enthält.

Die Erweiterung cURL definiert zwei weitere Ressourcentypen :

... ein CURL-Griff und ein CURL-Mehrfachgriff.

Wenn var_dump ed ist, sehen die Werte wie var_dump :

$resource = curl_init();
var_dump($resource);

resource(1) of type (curl)

That's all most resources are, a numeric identifier ( (1) ) of a certain type ( (curl) ).

You carry these resources around and pass them to different functions for which such a resource means something. Typically these functions allocate certain data in the background and a resource is just a reference which they use to keep track of this data internally.

The " ... expects parameter 1 to be resource, boolean given " error is typically the result of an unchecked operation that was supposed to create a resource, but returned false instead. For instance, the fopen function has this description:

Return Values

Returns a file pointer resource on success, or FALSE on error.

So in this code, $fp will either be a resource(x) of type (stream) or false :

$fp = fopen(...);

If you do not check whether the fopen operation succeed or failed and hence whether $fp is a valid resource or false and pass $fp to another function which expects a resource, you may get the above error:

$fp   = fopen(...);
$data = fread($fp, 1024);

Warning: fread() expects parameter 1 to be resource, boolean given

You always need to error check the return value of functions which are trying to allocate a resource and may fail :

$fp = fopen(...);

if (!$fp) {
    trigger_error('Failed to allocate resource');
    exit;
}

$data = fread($fp, 1024);

Related Errors:


Warnung: Header-Informationen können nicht geändert werden - bereits gesendete Header

Das passiert, wenn Ihr Skript versucht, einen HTTP-Header an den Client zu senden, aber bereits zuvor ausgegeben wurde, was dazu führte, dass die Header bereits an den Client gesendet wurden.

Dies ist ein E_WARNING und es wird das Skript nicht stoppen.

Ein typisches Beispiel wäre eine Vorlagendatei wie diese:

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

Die Funktion session_start() versucht, Header mit dem Sitzungscookie an den Client zu senden. Aber PHP hat bereits Header gesendet, als es das <html> -Element in den Ausgabestream geschrieben hat. Sie session_start() nach oben verschieben.

Sie können dies lösen, indem Sie die Zeilen vor dem Code durchgehen, der die Warnung auslöst, und prüfen, wo sie ausgegeben wird. Verschieben Sie einen Header, der Code vor diesem Code sendet.

Eine oft übersehene Ausgabe sind neue Zeilen nach dem Schließen von PHP ?> . Es ist eine Standardmethode, um sie wegzulassen ?> Wenn es das Letzte in der Datei ist. Eine andere häufige Ursache für diese Warnung ist, wenn die öffnung <?php ein leeres Leerzeichen, eine Zeile oder ein unsichtbares Zeichen davor hat, was dazu führt, dass der Webserver die Header und die Whitespace / Newline sendet, wenn PHP das Parsen startet um einen Header zu senden.

Wenn Ihre Datei mehr als einen <?php ... ?> Codeblock enthält, sollten Sie keine Leerzeichen dazwischen haben. (Hinweis: Sie könnten mehrere Blöcke haben, wenn Sie Code hatten, der automatisch konstruiert wurde)

Stellen Sie außerdem sicher, dass in Ihrem Code keine Byte-Bestellmarkierungen vorhanden sind, z. B. wenn die Codierung des Skripts UTF-8 mit BOM lautet.

Verwandte Fragen:


Warnung: open_basedir-Einschränkung in Kraft

Diese Warnung kann bei verschiedenen Funktionen angezeigt werden, die sich auf den Datei- und Verzeichniszugriff beziehen. Es warnt vor einem Konfigurationsproblem.

Wenn es angezeigt wird, bedeutet dies, dass für einige Dateien der Zugriff verboten wurde.

Die Warnung selbst unterbricht nichts, aber meistens funktioniert ein Skript nicht richtig, wenn der Dateizugriff verhindert wird.

Der Fix ist normalerweise, um die PHP-Konfiguration zu ändern, die zugehörige Einstellung heißt open_basedir .

Manchmal werden die falschen Datei- oder Verzeichnisnamen verwendet, die Lösung besteht dann darin, die richtigen zu verwenden.

Verwandte Fragen:


Code doesn't run/what looks like parts of my PHP code are output

If you see no result from your PHP code whatsoever and/or you are seeing parts of your literal PHP source code output in the webpage, you can be pretty sure that your PHP isn't actually getting executed. If you use View Source in your browser, you're probably seeing the whole PHP source code file as is. Since PHP code is embedded in <?php ?> tags, the browser will try to interpret those as HTML tags and the result may look somewhat confused.

To actually run your PHP scripts, you need:

  • a web server which executes your script
  • to set the file extension to .php, otherwise the web server won't interpret it as such*
  • to access your .php file via the web server

* Unless you reconfigure it, everything can be configured.

This last one is particularly important. Just double clicking the file will likely open it in your browser using an address such as:

file://C:/path/to/my/file.php

This is completely bypassing any web server you may have running and the file is not getting interpreted. You need to visit the URL of the file on your web server, likely something like:

http://localhost/my/file.php

You may also want to check whether you're using short open tags <? instead of <?php and your PHP configuration has turned short open tags off.

Also see PHP code is not being executed, instead code shows on the page


Notice: Array to string conversion

This simply happens if you try to treat an array as a string:

$arr = array('foo', 'bar');

echo $arr;  // Notice: Array to string conversion
$str = 'Something, ' . $arr;  // Notice: Array to string conversion

An array cannot simply be echo 'd or concatenated with a string, because the result is not well defined. PHP will use the string "Array" in place of the array, and trigger the notice to point out that that's probably not what was intended and that you should be checking your code here. You probably want something like this instead:

echo $arr[0];  // displays foo
$str = 'Something ' . join(', ', $arr); //displays Something, foo, bar

Or loop the array:

foreach($arr as $key => $value) {
    echo "array $key = $value";
    // displays first: array 0 = foo
    // displays next:  array 1 = bar
}

If this notice appears somewhere you don't expect, it means a variable which you thought is a string is actually an array. That means you have a bug in your code which makes this variable an array instead of the string you expect.


Notice: Trying to get property of non-object error

Happens when you try to access a property of an object while there is no object.

A typical example for a non-object notice would be

$users = json_decode('[{"name": "hakre"}]');
echo $users->name; # Notice: Trying to get property of non-object

In this case, $users is an array (so not an object) and it does not have any properties.

This is similar to accessing a non-existing index or key of an array (see Notice: Undefined Index ).

This example is much simplified. Most often such a notice signals an unchecked return value, eg when a library returns NULL if an object does not exists or just an unexpected non-object value (eg in an Xpath result, JSON structures with unexpected format, XML with unexpected format etc.) but the code does not check for such a condition.

As those non-objects are often processed further on, often a fatal-error happens next on calling an object method on a non-object (see: Fatal error: Call to a member function ... on a non-object ) halting the script.

It can be easily prevented by checking for error conditions and/or that a variable matches an expectation. Here such a notice with a DOMXPath example:

$result  = $xpath->query("//*[@id='detail-sections']/div[1]");
$divText = $result->item(0)->nodeValue; # Notice: Trying to get property of non-object

The problem is accessing the nodeValue property (field) of the first item while it has not been checked if it exists or not in the $result collection. Instead it pays to make the code more explicit by assigning variables to the objects the code operates on:

$result  = $xpath->query("//*[@id='detail-sections']/div[1]");
$div     = $result->item(0);
$divText = "-/-";
if ($div) {
    $divText = $div->nodeValue;
}
echo $divText;

Related errors:

  • Hinweis: Undefinierter Index
  • Fatal error: Call to a member function ... on a non-object

Warning: Division by zero

The warning message 'Division by zero' is one of the most commonly asked questions among new PHP developers. This error will not cause an exception, therefore, some developers will occasionally suppress the warning by adding the error suppression operator @ before the expression. Beispielsweise:

$value = @(2 / 0);

But, like with any warning, the best approach would be to track down the cause of the warning and resolve it. The cause of the warning is going to come from any instance where you attempt to divide by 0, a variable equal to 0, or a variable which has not been assigned (because NULL == 0) because the result will be 'undefined'.

To correct this warning, you should rewrite your expression to check that the value is not 0, if it is, do something else. If the value is zero you should not divide, or change the value to 1 and then divide so the division results in the equivalent of having divided only by the additional variable.

if ( $var1 == 0 ) { // check if var1 equals zero
    $var1 = 1; // var1 equaled zero so change var1 to equal one instead
    $var3 = ($var2 / $var1); // divide var1/var2 ie. 1/1
} else {
    $var3 = ($var2 / $var1); // if var1 does not equal zero, divide
}

Verwandte Fragen:


Warning: Illegal string offset 'XXX'

This happens when you try to access an array element with the square bracket syntax, but you're doing this on a string, and not on an array, so the operation clearly doesn't make sense .

Beispiel:

$var = "test";
echo $var["a_key"];

If you think the variable should be an array, see where it comes from and fix the problem there.





warnings