/ / Reference - Was bedeutet dieser Fehler in PHP? - PHP, MySQL, Debugging, Warnungen

Referenz - Was bedeutet dieser Fehler in PHP? - PHP, MySQL, Debugging, Warnungen

Was ist das?

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

Warum ist das?

Fragen wie "Header bereits gesendet" oder "Ein Mitglied eines Nicht-Objekts aufrufen" Popup häufig auf Stack Overflow. 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 bestimmten Code des OP gelten. Andere Benutzer, die den gleichen Fehler haben, können die Lösung nicht einfach auslesen, weil sie zu lokal sind. Das ist traurig, weil Sie einmal verstanden die Ursache, die Behebung des Fehlers ist trivial.Deshalb versucht diese Liste, die Lösung in einer allgemeinen Weise zu erklären, zu gelten.

Was soll ich hier machen?

Wenn Ihre Frage als Duplikat markiert wurdeBitte 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 allein nicht klar sein sollte.

Wenn Sie etwas beitragen möchten, fügen Sie bitte Ihre hinzu"Favorit" 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 Liste der vorhandenen Q & A, die von Wert sind . Fühlen Sie sich auch frei, vorhandene Antworten zu verbessern.

Die Liste

Siehe auch

Antworten:

226 für die Antwort № 1

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

Dies 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.

Das 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>
...

Das session_start() Die Funktion wird versuchen, Header mit dem Sitzungscookie an den Client zu senden. Aber PHP hat bereits Header gesendet, als es das geschrieben hat <html> Element zum Ausgabestrom. Du müßtest die. Bewegen session_start() Zum Seitenanfang.

Sie können dies lösen, indem Sie durch die Linien gehen Vor der Code, der die Warnung auslöst und überprüft, 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 Standardübung, die man weglassen sollte ?> wenn es das Letzte in der Datei ist. Ebenso ist eine andere häufige Ursache für diese Warnung beim Öffnen <?php hat ein leeres Leerzeichen, eine Zeile oder ein unsichtbares Zeichen davor, was dazu führt, dass der Webserver die Header und die Whitespace / Newline sendet, also wenn PHP mit dem Parsen beginnt, kann er keine Header senden.

Wenn Ihre Datei mehrere hat <?php ... ?> Code-Block in, sollten Sie keine Leerzeichen zwischen ihnen haben. (Hinweis: Sie könnten mehrere Blöcke haben, wenn Sie Code hatten, der automatisch konstruiert wurde)

Stellen Sie außerdem sicher, dass Sie keine Byte Order Marks in Ihrem Code haben, zum Beispiel wenn die Codierung des Scripts utf-8 mit BOM ist.

Verwandte Fragen:


157 für die Antwort № 2

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

Passiert mit ähnlichem Code xyz->method() woher xyz ist kein Objekt und deshalb auch nicht method kann nicht angerufen werden.

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 typisch 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() wird zuweisen false zu $statement. Versuche, die execute() Methode wird dann zu dem schwerwiegenden Fehler führen, weil false ist ein "Nicht-Objekt", da der Wert ein boolescher Wert ist.

Herausfinden Warum Ihre Funktion hat einen booleschen Wert anstelle eines Objekts zurückgegeben. Zum Beispiel, überprüfen Sie die $pdo Objekt für den letzten Fehler, der aufgetreten ist. 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 auch die ->prepare scheitert dann dein $pdo Datenbank-Handle-Objekt wurde nicht in den aktuellen Umfang ü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:


102 für die Antwort № 3

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

Auch bekannt als die Weiße Seite des Todes oder Weißer Bildschirm des Todes. 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 mit dem Namen "php_errors.log" entweder an einer zentralen Stelle (z.B. /var/log/apache2 in vielen Linux-Umgebungen) oder im Verzeichnis des Skripts selbst (manchmal in einer Shared-Hosting-Umgebung verwendet).

Manchmal könnte es einfacher seinvorübergehend die Anzeige von Fehlern 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.

Seit der ini_set() Wird zur Laufzeit ausgeführt, 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 Option display_startup_errors Richtlinie zu true. Tun Sie dies entweder in der php.ini oder in einem .htaccess oder von jede andere Methode, die sich auf die Konfiguration auswirkt Vor Laufzeit.

Sie können die gleichen Methoden verwenden, um das zu setzen log_fehler und Fehlerprotokoll Anweisungen, 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:


90 für die Antwort № 4

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 eine Undefined Index Hinweis wäre (Demo)

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

Beide spinach und 1 existiert nicht im Array, was zu einem E_NOTICE ausgelöst werden.

Die Lösung besteht darin, den Index oder Offset sicherzustellenexistiert vor dem Zugriff auf diesen Index. 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 existieren 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 $_POST["message"] wird nicht eingestellt, wenn diese Seite zum ersten Mal geladen wirdund Sie werden den obigen Fehler erhalten. 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:


76 für die Antwort № 5

Warnung: mysql_fetch_array () erwartet Parameter 1 als Ressource, boolean gegeben

Zuallererst:

Bitte, benutze es nicht mysql_* Funktionen in neuem Code. Sie werden nicht mehr gepflegt und sind offiziell veraltet. Siehe die rote Box? Lernen vorbereitete Aussagen stattdessen und verwenden PDO oder MySQLi - Dieser Artikel wird Ihnen helfen zu entscheiden, welche. Wenn Sie PDO wählen, Hier ist ein gutes Tutorial.


Dies geschieht, wenn Sie versuchen, Daten aus dem Ergebnis von zu holen mysql_query aber die Abfrage ist fehlgeschlagen.

Dies ist eine Warnung und wird das Skript nicht stoppen, sondern Ihr Programm falsch machen.

Sie müssen das Ergebnis überprüfen, das von zurückgegeben wird mysql_query durch

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

Verwandte Fragen:

Zugehörige Fehler:

Andere mysql* Funktionen, die ebenfalls eine mysql-Ergebnisressource als Parameter erwarten, erzeugen aus dem gleichen Grund den gleichen Fehler.


70 für die Antwort № 6

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

$this ist eine spezielle Variable in PHP welche nicht zugeordnet werden können. 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 repariert man: Überprüfen Sie Ihren Code erneut, $this kann nur im Objektkontext verwendet werden und sollte niemals in einer statischen Methode verwendet werden. Außerdem sollte eine statische Methode nicht auf die nicht statische Eigenschaft zugreifen. Benutzen self::$static_property um auf die statische Eigenschaft zuzugreifen.

  2. Wenn Code aus einer Klassenmethode in eine normale Funktion oder nur in den globalen Bereich kopiert wurde und das behalten $this spezielle Variable.
    Wie repariert man: Überprüfen Sie den Code und ersetzen Sie ihn $this mit einer anderen Substitutionsvariablen.

Verwandte Fragen:

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

67 für die Antwort № 7

Schwerwiegender Fehler: Aufruf zu undefinierter Funktion XXX

Es passiert, wenn Sie versuchen, eine Funktion aufzurufennoch nicht definiert. 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, fn() wird nie erklärt, weil $someCondition ist nicht wahr.

Beispiel 2 - Funktion in der Funktionserklärung

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

In diesem Fall, fn wird nur einmal deklariert createFn() wird angerufen. Beachten Sie, dass nachfolgende Aufrufe an createFn() wird einen Fehler bei der Rückmeldung einer bestehenden Funktion auslösen.

Sie können dies auch für eine integrierte PHP-Funktion sehen. Suchen Sie nach der Funktion in das offizielle Handbuchund prüfen, zu welcher "Erweiterung" (PHP-Modul) es gehört und welche PHP-Versionen es unterstützen.

Im Falle einer fehlenden Erweiterung installieren Sie dasErweiterung und aktivieren Sie es in php.ini. Informationen zu der Erweiterung, in der Ihre Funktion angezeigt wird, finden Sie in den Installationsanweisungen im PHP-Handbuch. Möglicherweise können Sie die Erweiterung auch mit Ihrem Paketmanager aktivieren oder installieren (z. apt in Debian oder Ubuntu, yum in Red Hat oder CentOS) oder ein Control Panel in einer Shared Hosting-Umgebung.

Wenn die Funktion in einer neueren Version eingeführt wurdevon PHP, von dem, was Sie verwenden, 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:


66 für die Antwort № 8

Parse-Fehler: Syntaxfehler, unerwarteter T_XXX

Passiert wenn du hast T_XXX Zeichen an unerwarteter Stelle, unausgewogene (überflüssige) Klammern, Verwendung von Short-Tags, ohne sie in php.ini zu aktivieren, und viele mehr.

Verwandte Fragen:

Für weitere Hilfe siehe:


61 für die Antwort № 9

Schwerwiegender Fehler: Kann den Funktionsrückgabewert im Schreibkontext nicht verwenden

Dies passiert normalerweise, wenn eine Funktion direkt mit verwendet wird empty.

Beispiel:

if (empty(is_null(null))) {
echo "empty";
}

Das ist weil empty ist ein Sprachkonstrukt und keine Funktion, es kann nicht mit einem Ausdruck als Argument in PHP-Versionen vor 5.5 aufgerufen werden. Vor PHP 5.5, das Argument zu empty() muss ein sein Variable, aber ein beliebiger Ausdruck (wie der Rückgabewert einer Funktion) ist in PHP 5.5+ zulässig.

emptyüberprüft trotz seines Namens nicht, ob eine Variable "leer" ist. Stattdessen prüft es, ob eine Variable nicht existiert, oder == false. Ausdrücke (wie is_null(null) im Beispiel) wird immer als existent angesehen, also hier empty prüft nur, ob es gleich falsch ist. Sie könnten ersetzen empty() hier mit !, z.B. if (!is_null(null))oder explizit mit falsch vergleichen, z.B. if (is_null(null) == false).

Verwandte Fragen:


57 für die Antwort № 10

MySQL: Sie haben einen Fehler in Ihrer SQL-Syntax. Überprüfen Sie das Handbuch, das Ihrer MySQL-Server-Version entspricht, um die richtige Syntax in der Nähe von ... in Zeile zu verwenden ...

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

Ein Beispiel von was nicht zu tun (die "schlechte Idee"):

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

Dieser Code kann in einer Seite mit einem Formular zum Übermitteln mit einer URL wie z http://example.com/edit.php?id=10 (um den Beitrag Nr. 10 zu bearbeiten)

Was passiert, wenn der eingereichte Text einfache Anführungszeichen enthält? $query wird enden 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 MUSS entkomme die Daten immer vor der Verwendung in einer Abfrage.

Escape-Daten vor der Verwendung in einer SQL-Abfrage ist auchsehr wichtig, denn wenn Sie das nicht tun, wird Ihr Skript für SQL-Injektionen offen sein. Eine SQL-Injektion kann zu Änderungen, Verlusten oder Änderungen eines Datensatzes, einer Tabelle oder einer ganzen Datenbank führen. Dies ist ein sehr ernstes Sicherheitsproblem!

Dokumentation:


49 für die Antwort № 11

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 Speichergrenze kann entweder in der konfiguriert werden php.ini Datei oder mit ini_set("memory_limit", "128 M"); im Skript (wodurch der in. definierte Wert überschrieben wird 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 zu minimierender Speicher benötigt Ihr Skript. Wenn Sie beispielsweise eine große Datei in eine Variable einlesen oder viele Datensätze aus einer Datenbank abrufen und sie alle in einem Array speichern, kann dies viel Speicher belegen. Ändern Sie den Code, um die Datei Zeile für Zeile zu lesen oder Datenbankeinträge einzeln abrufen, ohne sie alle im Speicher zu speichern.Dies erfordert ein wenig konzeptuelles Bewusstsein darüber, was sich hinter den Kulissen abspielt und wann 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. Das memory_get_usage Funktion ist dein Freund.

Verwandte Fragen:


45 für die Antwort № 12

Parse-Fehler: Syntaxfehler, unerwarteter T_ENCAPSED_AND_WHITESPACE

Dieser Fehler tritt am häufigsten auf, wenn versucht wird, einen Array-Wert mit a zu referenzieren zitierter Schlüssel für die Interpolation innerhalb einer Zeichenfolge mit doppelten Anführungszeichen, wenn das gesamte komplexe Variablenkonstrukt nicht eingeschlossen ist {}.

Der Fehlerfall:

Dies führt zu Unexpected T_ENCAPSED_AND_WHITESPACE:

echo "This is a double-quoted string with a quoted array key in $array["key"]";
//---------------------------------------------------------------------^^^^^

Mögliche Korrekturen:

In einer Zeichenfolge mit doppelten Anführungszeichen erlaubt PHP die Verwendung von Array-Schlüsselzeichenfolgen nicht aufgeführtund wird kein E_NOTICE. Also könnte das oben geschrieben werden als:

echo "This is a double-quoted string with an un-quoted array key in $array[key]";
//------------------------------------------------------------------------^^^^^

Die gesamte komplexe Array-Variable und Schlüssel können eingeschlossen werden {}In diesem Fall sollte zitiert werden, um zu vermeiden E_NOTICE. Die PHP-Dokumentation empfiehlt diese Syntax für komplexe Variablen.

echo "This is a double-quoted string with a quoted array key in {$array["key"]}";
//--------------------------------------------------------------^^^^^^^^^^^^^^^
// Or a complex array property of an object:
echo "This is a a double-quoted string with a complex {$object->property->array["key"]}";

Natürlich, die Alternative zu irgendein des oben genannten besteht darin, die Array-Variable in zu verketten, statt sie zu interpolieren:

echo "This is a double-quoted string with an array variable " . $array["key"] . " concatenated inside.";
//----------------------------------------------------------^^^^^^^^^^^^^^^^^^^^^

Als Referenz finden Sie im Abschnitt über Variables Parsen im die PHP Strings Handbuchseite


39 für die Antwort № 13

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 setzen :: in deinem Code.

Verwandte Fragen:

Dokumentation:


37 für die Antwort № 14

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

Schwerwiegender Fehler: Kann nicht neu deklariert werden [Funktionsname]

Das bedeutet, dass Sie entweder den gleichen Funktions- / Klassennamen zweimal verwenden und einen von ihnen umbenennen müssen oder weil Sie ihn verwendet haben require oder include wo du verwenden solltest require_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 Anruf an do_stuff() wird den obigen Fehler erzeugen. Durch Austausch require zu require_oncekönnen wir sicher sein, dass die Datei mit der Definition von MyClass wird nur einmal geladen, und der Fehler wird vermieden.


37 für die Antwort № 15

Warnung: [Funktion]: Fehler beim Öffnen des Streams: [Grund]

Es passiert, wenn Sie eine Datei normalerweise durch aufrufen include, require oder fopen und PHP konnte die Datei nicht finden oder nicht genug Berechtigung haben, um die Datei zu laden.

Dies kann aus verschiedenen Gründen geschehen:

  • Dateipfad ist falsch
  • Dateipfad ist relativ
  • Include-Pfad ist falsch
  • Berechtigungen sind zu restriktiv
  • SELinux ist in Kraft
  • und viele mehr ...

Ein häufiger Fehler besteht darin, keinen absoluten Pfad zu verwenden. Dies kann leicht durch Verwendung eines vollständigen Pfades oder gelöst werden magische Konstanten mögen __DIR__ oder dirname(__FILE__):

include __DIR__ . "/inc/globals.inc.php";

oder:

require dirname(__FILE__) . "/inc/globals.inc.php";

Sicherzustellen, dass der richtige Weg verwendet wird, ist ein Schritt inBei der Behebung dieser Probleme kann sich dies auch auf nicht vorhandene Dateien beziehen, Rechte des Dateisystems, die den Zugriff verhindern oder durch PHP selbst offene Beschränkungen aufheben.

Der beste Weg, um dieses Problem schnell zu lösen, ist die folgende Checkliste zur Fehlerbehebung.

Verwandte Fragen:

Zugehörige Fehler:


36 für die Antwort № 16

Hinweis: Undefinierte Variable

Es passiert, 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 nicht definiert haben $counter zuvor 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:


35 für die Antwort № 17

Hinweis: Verwendung von undefinierter Konstante XXX - angenommen "XXX"

oder, in PHP 7.2 oder später:

Warnung: Verwendung von undefinierter Konstante XXX - angenommen "XXX" (dies wird einen Fehler in einer zukünftigen Version von PHP auslösen)

Dieser Hinweis tritt auf, wenn ein Token im Code verwendet wird und scheinbar eine Konstante ist. Eine Konstante mit diesem Namen ist jedoch nicht definiert.

Eine der häufigsten Ursachen für diese Benachrichtigung ist die fehlende Angabe einer Zeichenfolge, die als assoziativer Array-Schlüssel verwendet wird.

Beispielsweise:

// Wrong
echo $array[key];

// Right
echo $array["key"];

Eine andere häufige Ursache ist eine fehlende $ (Dollar) Zeichen vor einem Variablennamen:

// Wrong
echo varName;

// Right
echo $varName;

Oder vielleicht haben Sie eine andere Konstante oder ein Keyword falsch geschrieben:

// Wrong
$foo = fasle;

// Right
$foo = false;

Es kann auch ein Zeichen sein, dass eine benötigte PHP-Erweiterung oder -Bibliothek fehlt, wenn Sie versuchen, auf eine von dieser Bibliothek definierte Konstante zuzugreifen.

Verwandte Fragen:


28 für die Antwort № 18

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 das Ändern der PHP-Konfiguration, wird die zugehörige Einstellung aufgerufen open_basedir.

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

Verwandte Fragen:


28 für die Antwort № 19

Hinweis: Nicht initialisierter String-Offset: *

Wie der Name andeutet, tritt ein solcher Fehlertyp auf, wenn Sie höchstwahrscheinlich versuchen, eine Iteration durchzuführen oder einen Wert von einem Array mit einem nicht vorhandenen Schlüssel zu finden.

Betrachten Sie, versuchen Sie, jeden Buchstaben von zu zeigen $string

$string = "ABCD";
for ($i=0, $len = strlen($string); $i <= $len; $i++){
echo "$string[$i] n";
}

Das obige Beispiel erzeugt (Online-Demo):

A
B
C
D
Notice: Uninitialized string offset: 4 in XXX on line X

Und sobald das Skript beendet ist D du wirst den Fehler bekommen, weil in der for() Schleife, haben Sie PHP gesagt, um Ihnen die erste bis fünfte Zeichenkette aus zu zeigen "ABCD" Which, exists, aber da fängt die Schleife an zu zählen 0 und Echos D bis es soweit ist 4, wird es einen Offset-Fehler werfen.

Ähnliche Fehler:


27 für die Antwort № 20

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 Fehler: Ein Problem mit der Syntax Ihres Programms, z. B. ein Semikolon am Ende einer Anweisung zu lassen oder, wie im obigen Fall, fehlt die . 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 du machen solltest Überprüfen Sie sorgfältig an den Zeilen, wo der Fehler für einfache Fehler ist.

Diese Fehlermeldung bedeutet, dass in der Zeile x der Datei der PHP-Interpreter eine offene Klammer erwartet hat, aber stattdessen auf etwas gestoßen ist T_VARIABLE. Das T_VARIABLE Ding heißt a token. Es ist die Ausdrucksweise des PHP-Interpretersverschiedene grundlegende Teile von Programmen. Wenn der Interpreter ein Programm einliest, übersetzt er das, was Sie in eine Liste von Tokens geschrieben haben. Wo immer Sie eine Variable in Ihr Programm einfügen, gibt es einT_VARIABLE Token in der Liste des Interpreters.

Gut zu lesen: Liste der Parser-Token

Stellen Sie also sicher, dass Sie mindestens aktivieren E_PARSE in deinem 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 liebt das: P, bezahlter Plan, enthält proprietäre und freie Software)
  3. Finsternis (Schöne und das Biest, freie Software)

Verwandte Fragen:


25 für die Antwort № 21

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.


23 für die Antwort № 22

Hinweis: Versuch, die Eigenschaft eines Nicht-Objektfehlers zu erhalten

Tritt auf, wenn Sie versuchen, auf eine Eigenschaft eines Objekts zuzugreifen, während kein Objekt vorhanden ist.

Ein typisches Beispiel für eine Nicht-Objekt-Benachrichtigung wäre

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

In diesem Fall, $users ist ein Array (also kein Objekt) und hat keine Eigenschaften.

Dies entspricht dem Zugriff auf einen nicht vorhandenen Index oder Schlüssel eines Arrays (siehe Hinweis: Undefinierter Index).

Dieses Beispiel ist sehr vereinfacht. Meistens signalisiert eine solche Nachricht einen ungeprüften Rückgabewert, z. wenn eine Bibliothek zurückkehrt NULL wenn ein Objekt nicht existiert oder nur einunerwarteter Nicht-Objektwert (z. B. in einem Xpath-Ergebnis, JSON-Strukturen mit unerwartetem Format, XML mit unerwartetem Format usw.), der Code prüft jedoch nicht auf eine solche Bedingung.

Da diese Nicht-Objekte oft weiter bearbeitet werden, passiert oft als nächstes ein schwerwiegender Fehler beim Aufruf einer Objekt-Methode auf einem Nicht-Objekt (siehe: Schwerwiegender Fehler: Aufruf einer Member-Funktion ... bei einem Nicht-Objekt) Anhalten des Skripts.

Dies kann leicht verhindert werden, indem nach Fehlerbedingungen gesucht wird und / oder eine Variable einer Erwartung entspricht. Hier eine solche Nachricht mit einem DOMXPath Beispiel:

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

Das Problem ist Zugriff auf nodeValue Eigenschaft (Feld) des ersten Eintrags, während nicht geprüft wurde, ob sie in der Liste vorhanden ist oder nicht $result Sammlung. Stattdessen lohnt es sich, den Code expliziter zu machen, indem Sie den Objekten, auf die der Code angewendet wird, Variablen zuweisen:

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

Ähnliche Fehler:


22 für die Antwort № 23

Warnung: [Funktion] erwartet, dass Parameter 1 als Ressource, Boolean gegeben ist

(Eine allgemeinere Variante von Warnung: mysql_fetch_array () erwartet Parameter 1 als Ressource, boolean gegeben)

Ressourcen sind ein Art in PHP (wie Strings, Ganzzahlen 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 die Mysql-Erweiterung definiert zwei Ressourcentypen:

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 cURL-Erweiterung definiert eine andere zwei Ressourcentypen:

... ein cURL-Handle und ein cURL-Multi-Handle.

Wann var_dumped, die Werte sehen so aus:

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

resource(1) of type (curl)

Das heißt, die meisten Ressourcen sind ein numerischer Bezeichner ((1)) eines bestimmten Typs ((curl)).

Sie tragen diese Ressourcen herum und geben sie anverschiedene Funktionen, für die eine solche Ressource etwas bedeutet. Normalerweise ordnen diese Funktionen bestimmte Daten im Hintergrund zu und eine Ressource ist nur eine Referenz, mit der sie diese Daten intern nachverfolgen.


Das "... erwartet, dass Parameter 1 eine Ressource ist, die boolean ist"error ist normalerweise das Ergebnis einer ungeprüften Operation, die eine Ressource erstellen sollte, aber zurückgegeben wurde false stattdessen. Zum Beispiel die fopen Funktion hat diese Beschreibung:

Rückgabewerte

Gibt bei Erfolg eine Dateizeigerressource zurück, oder FALSE auf Fehler.

Also in diesem Code, $fp wird entweder ein sein resource(x) of type (stream) oder false:

$fp = fopen(...);

Wenn Sie nicht prüfen, ob die fopen Operation erfolgreich oder fehlgeschlagen und daher ob $fp ist eine gültige Ressource oder false und passiere $fp zu einer anderen Funktion, die eine Ressource erwartet, können Sie den obigen Fehler erhalten:

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

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

Sie müssen immer den Rückgabewert von Funktionen überprüfen, die versuchen, eine Ressource zuzuweisen und kann fehlschlagen:

$fp = fopen(...);

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

$data = fread($fp, 1024);

Zugehörige Fehler:


18 für die Antwort № 24

Warnung: Ungültiger String-Offset "XXX"

Dies geschieht, wenn Sie versuchen, mit der eckigen Klammer-Syntax auf ein Array-Element zuzugreifen, dies jedoch für eine Zeichenfolge und nicht für ein Array, also die Operation eindeutig macht keinen Sinn.

Beispiel:

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

Wenn Sie der Meinung sind, dass die Variable ein Array sein sollte, prüfen Sie, woher sie stammt und beheben Sie das Problem dort.


17 für die Antwort № 25

Code läuft nicht / es sieht so aus, als ob Teile meines PHP-Codes ausgegeben werden

Wenn Sie kein Ergebnis aus Ihrem PHP-Code sehenWie auch immer und / oder Sie sehen Teile Ihres wörtlichen PHP-Quellcodes auf der Webseite, Sie können ziemlich sicher sein, dass Ihr PHP nicht wirklich ausgeführt wird PHP-Quellcodedatei, wie sie ist. Da PHP-Code in eingebettet ist <?php ?> Tags versucht der Browser, diese als HTML-Tags zu interpretieren, und das Ergebnis kann etwas verwirrt aussehen.

Um Ihre PHP-Skripts tatsächlich ausführen zu können, benötigen Sie:

  • ein Webserver, der Ihr Skript ausführt
  • um die Dateierweiterung auf .php zu setzen, sonst interpretiert der Webserver sie nicht als solche *
  • um auf Ihre .php-Datei über den Webserver zuzugreifen

* Wenn Sie es nicht neu konfigurieren, kann alles konfiguriert werden.

Letzteres ist besonders wichtig. Durch einen Doppelklick auf die Datei wird sie wahrscheinlich in Ihrem Browser mit folgender Adresse geöffnet:

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

Dies umgeht jeden Webserver, den Sie möglicherweise ausgeführt haben, und die Datei wird nicht interpretiert. Sie müssen die URL der Datei auf Ihrem Webserver aufrufen.

http://localhost/my/file.php

Vielleicht möchten Sie auch prüfen, ob Sie kurze offene Tags verwenden <? Anstatt von <?php und Ihre PHP-Konfiguration hat kurze offene Tags deaktiviert.

Siehe auch PHP-Code wird nicht ausgeführt, stattdessen wird Code auf der Seite angezeigt


16 für die Antwort № 26

Warnung: mysql_connect (): Zugriff für Benutzer "name" @ "host" verweigert

Diese Warnung wird angezeigt, wenn Sie sich mit einem MySQL / MariaDB-Server mit ungültigen oder fehlenden Anmeldeinformationen (Benutzername / Kennwort) verbinden. Das ist also typisch nicht ein Code-Problem, aber ein Server-Konfigurationsproblem.

  • Siehe die Handbuchseite auf mysql_connect("localhost", "user", "pw") zum Beispiel.

  • Prüfen Sie, ob Sie tatsächlich eine $username und $password.

    • Es ist ungewöhnlich, dass Sie Zugang ohne Passwort erhalten - was bei der Warnung: passiert ist (using password: NO).
    • Nur der lokale Testserver erlaubt normalerweise die Verbindung mit dem Benutzernamen root, kein Passwort und die test Name der Datenbank.

    • Sie können testen, ob sie es sind wirklich richtig mit dem Befehlszeilen-Client:
      mysql --user="username" --password="password" testdb

    • Benutzername und Passwort sind Groß- und Kleinschreibung und Leerraum ist nicht ignoriert Wenn Ihr Passwort Metazeichen wie enthält $, entgehen Sie ihnen oder geben Sie das Passwort ein Einzelzitate.

    • Die meisten Shared-Hosting-Provider geben mysql vorKonten in Bezug auf das Unix-Benutzerkonto (manchmal nur Präfixe oder zusätzliche numerische Suffixe). In den Dokumenten finden Sie ein Muster oder eine Dokumentation sowie CPanel oder eine andere Schnittstelle zum Festlegen eines Kennworts.

    • Siehe das MySQL-Handbuch auf Benutzerkonten hinzufügen über die Befehlszeile. Wenn verbunden als Admin-Benutzer Sie können eine Abfrage wie:
      CREATE USER "username"@"localhost" IDENTIFIED BY "newpassword";

    • Oder benutzen Admin oder Werkbank oder ein anderes grafisches Werkzeug zum Erstellen, Prüfen oder Korrigieren von Kontodetails.

    • Wenn Sie Ihre Anmeldeinformationen nicht korrigieren können, hat das Internet die Bitte, "Bitte helfen", dass dies keine Auswirkungen hat. Nur Sie und Ihr Hosting-Provider haben Berechtigungen und ausreichenden Zugriff auf die Diagnose und Behebung von Problemen.

  • Überprüfen Sie das könnte erreichen den Datenbankserver mit dem von Ihrem Provider angegebenen Hostnamen:
    ping dbserver.hoster.example.net

    • Überprüfen Sie dies von einer SSH-Konsole direkt auf Ihrem Webserver. Das Testen von Ihrem lokalen Entwicklungsclient auf Ihrem gemeinsam genutzten Hosting-Server ist selten sinnvoll.

    • Oft möchten Sie nur den Servernamen "localhost", die normalerweise einen lokalen benannten Socket verwendet, wenn verfügbar. Ansonsten kannst du es versuchen "127.0.0.1" als Rückfall.

    • Sollte Ihr MySQL / MariaDB-Server einen anderen Port abhören, verwenden Sie "servername:3306".

    • Wenn dies fehlschlägt, gibt es möglicherweise ein Problem mit der Firewall. (Off-Topic, keine Programmierfrage. Keine Hilfe beim Erraten von Remote-Adressen.)

  • Beim Benutzen Konstanten wie z.B. DB_USER oder DB_PASSWORDÜberprüfen Sie, ob sie tatsächlich sind definiert.

    • Wenn Sie eine bekommen "Warning: Access defined for "DB_USER"@"host"" und ein "Notice: use of undefined constant "DB_PASS""Dann ist das dein Problem.

    • Stellen Sie sicher, dass Ihr z. xy/db-config.php war eigentlich enthalten und was auch.

  • Überprüfen Sie, ob die Einstellung richtig ist GRANT Berechtigungen.

    • Es reicht nicht aus, eine zu haben username+password Paar.

    • Jedes MySQL / MariaDB-Konto kann über Berechtigungen verfügen.

    • Diese können einschränken, zu welchen Datenbanken Sie eine Verbindung herstellen dürfen, von welchem ​​Client / Server die Verbindung stammen darf und welche Abfragen zulässig sind.

    • Die Warnung "Zugriff verweigert" kann daher ebenfalls angezeigt werden mysql_query Anrufe, wenn Sie keine Berechtigungen haben SELECT aus einer bestimmten Tabelle oder INSERT/UPDATEund häufiger DELETE etwas.

    • Sie können Kontoberechtigungen anpassen bei Verbindung per Befehlszeilenclient über die Admin-Konto mit einer Abfrage wie:
      GRANT ALL ON yourdb.* TO "username"@"localhost";

  • Wenn die Warnung zuerst mit erscheint Warning: mysql_query(): Access denied for user ""@"localhost" dann hast du vielleicht eine php.ini-vorkonfiguriertes Konto / Passwort-Paar.

    • Prüfe das mysql.default_user= und mysql.default_password= haben sinnvolle Werte.

    • Oft ist dies eine Provider-Konfiguration. Wenden Sie sich daher an ihre Unterstützung für Unstimmigkeiten.

  • Finden Sie die Dokumentation Ihres Shared Hosting Providers:

  • Beachten Sie, dass Sie möglicherweise auch haben der verfügbare Verbindungspool erschöpft. Bei zu vielen gleichzeitigen Verbindungen erhalten Sie Zugriffswarnungen mit verweigertem Zugriff. (Sie müssen das Setup untersuchen. Dies ist ein Problem mit der Konfiguration von Servern außerhalb des Themas, keine Programmierfrage.)

  • Ihr libmysql-Client Version ist möglicherweise nicht kompatibel mit dem Datenbankserver. Normalerweise sind MySQL- und MariaDB-Server mit im Treiber kompilierten PHPs erreichbar. Wenn Sie ein benutzerdefiniertes Setup oder eine veraltete PHP-Version und einen wesentlich neueren oder erheblich veralteten Datenbankserver haben, kann der Versionskonflikt Verbindungen verhindern. (Nein, Sie müssen sich selbst untersuchen. Niemand kann Ihr Setup erraten).

Weitere Referenzen:

Übrigens, Sie möchten wahrscheinlich nicht verwenden mysql_* funktioniert mehr. Newcomer migrieren oft nach mysqliwas aber genauso langweilig ist. Stattdessen lesen Sie weiter GU und vorbereitete aussagen.
$db = new PDO("mysql:host=localhost;dbname=testdb", "username", "password");


14 für die Antwort № 27

Hinweis: Array zu String-Konvertierung

Dies geschieht einfach, wenn Sie versuchen, ein Array als Zeichenfolge zu behandeln:

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

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

Ein Array kann nicht einfach sein echo"d oder verkettet mit einer Zeichenfolge, weil dieErgebnis ist nicht gut definiert. PHP verwendet den String "Array" anstelle des Arrays und löst die Meldung aus, dass dies wahrscheinlich nicht das ist, was beabsichtigt ist, und dass Sie Ihren Code hier überprüfen sollten. Stattdessen möchten Sie wahrscheinlich Folgendes:

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

Oder das Array schleifen:

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

Wenn dieser Hinweis irgendwo erscheint, dann nichtErwarten Sie, es bedeutet, dass eine Variable, die Sie für eine Zeichenfolge halten, tatsächlich ein Array ist. Das bedeutet, dass Sie einen Fehler in Ihrem Code haben, der diese Variable zu einem Array anstelle der erwarteten Zeichenfolge macht.


11 für die Antwort № 28

Warnung: Division durch Null

Die Warnmeldung "Division by zero" ist eine vondie am häufigsten gestellten Fragen unter neuen PHP-Entwicklern. Dieser Fehler verursacht keine Ausnahmebedingung. Daher unterdrücken einige Entwickler gelegentlich die Warnung, indem sie den Fehlerunterdrückungsoperator @ vor dem Ausdruck hinzufügen. Zum Beispiel:

$value = @(2 / 0);

Aber wie bei jeder Warnung der beste Ansatzwäre die Ursache der Warnung aufzuspüren und sie zu beheben. Die Ursache der Warnung wird von einer Instanz kommen, in der Sie versuchen, durch 0 zu teilen, eine Variable gleich 0 oder eine nicht zugewiesene Variable (weil NULL == 0), da das Ergebnis "undefined" ist.

Um diese Warnung zu korrigieren, sollten Sie Ihr neu schreibenAusdruck, um zu überprüfen, dass der Wert nicht 0 ist. Wenn dies der Fall ist, tun Sie etwas anderes. Wenn der Wert Null ist, sollten Sie den Wert nicht teilen oder in 1 ändern und dann teilen, so dass die Unterteilung das Äquivalent ergibt, nur durch die zusätzliche Variable geteilt zu werden.

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:


8 für die Antwort № 29

Strenge Standards: Nicht-statische Methode [<Klasse> :: <Methode>] sollte nicht statisch aufgerufen werden

Tritt auf, wenn Sie versuchen, eine nicht statische Methode für eine Klasse als statisch aufzurufen, und Sie haben auch die E_STRICT Flagge in Ihrem error_reporting() die Einstellungen.

Beispiel:

class HTML {
public function br() {
echo "<br>";
}
}

HTML::br() oder $html::br()

Sie können diesen Fehler tatsächlich vermeiden, indem Sie nicht hinzufügen E_STRICT zu error_reporting(), z.B

error_reporting(E_ALL & ~E_STRICT);

da wie für PHP 5.4.0 und höher, E_STRICT ist enthalten in E_ALL [ref]. Das ist aber nicht ratsam. Die Lösung besteht darin, Ihre beabsichtigte statische Funktion als tatsächlich zu definieren static :

public static function br() {
echo "<br>";
}

oder rufen Sie die Funktion konventionell auf:

$html = new HTML();
$html->br();

Verwandte Fragen:


2 für die Antwort № 30

Schwerwiegender Fehler: [TraitA] und [TraitB] definieren dieselbe Eigenschaft ([$ x]) in der Zusammensetzung von [ClassC]

Tritt auf, wenn eine Klasse versucht, dies zu tun use mehrere Eigenschaftenwo zwei oder mehr dieser Eigenschaften vorhanden sind eine Eigenschaft definiert mit dem gleichen Namen und mit der Eigenschaft, die unterschiedliche Anfangswerte hat.

Beispiel:

<?php
trait TraitA
{
public $x = "a";
}
trait TraitB
{
public $x = "b";
}
class ClassC
{
use TraitA, TraitB;
}

Problematisch: Während es möglich ist, Konflikte zwischen zu lösen konkurrierende MethodenDerzeit gibt es keine Syntax, die einen Konflikt zwischen zwei konkurrierenden Eigenschaften auflösen würde. Die einzige Lösung zu diesem Zeitpunkt ist zu Refaktor; d. h. einen Konflikt zwischen Eigenschaftennamen vermeiden, der einen schwerwiegenden Fehler verursacht.


Verwandte Fragen: