2017-09-05 2 views
0

Ich habe folgendes ProblemPHP überspringt Funktionsaufruf Ausgang

require('drawchart.php'); 

if (file_exists('drawchart.php')){ cwrapper();} 

Befehl 'chart.png' von cwrapper verwendet;

Der Cwrapper ist eine Funktion in der drawchart.php, die auf ein MySQL zugreift und ein Diagramm zeichnet. Diese Funktion funktioniert alleine und in einer test.php völlig einwandfrei, aber sie beendet die Erstellung des Diagramms in meinem Hauptprogramm und ich bin verblüfft, warum es dort einfach nicht funktionieren wird.

Ich habe versucht, einen Schlaf (30) einzuführen, um zu sehen, ob es warten muss, dass die Datei geschrieben wird, um erfolgreich zu sein. Aber das hilft auch nicht. Der folgende 2. Befehl nimmt niemals die Ausgabedatei chart.png auf. Verzeichnisse sind in beiden Fällen absolute Pfade, das ist also kein Problem.

Es wird zwar ein existierendes chart.png übernommen, aber eben nicht das aktualisierte, das vom if-Aufruf generiert werden soll. Es scheint diesen Aufruf an Cwrapper zu überspringen.

Der Cwrapper verwendet das Diagramm, um das Diagramm zu zeichnen. Und das macht es perfekt in einem Testskript.

Wie löse ich dieses Problem? Gibt es einen besseren Weg, dies zu erreichen?

+0

Zunächst einmal sicher, dass die 'cwrapper()' Funktion ** ** wird aufgerufen. – axiac

+0

Was meinst du? Echo etwas, das mir zeigt, dass es gelaufen ist? – NoobPython

+0

Oder echo etwas auf dem 'else'-Zweig, um Sie wissen zu lassen, dass die' cwrapper() '-Funktion nicht aufgerufen wurde. Lesen Sie auch meine Antwort unten. – axiac

Antwort

0

Zuerst stellen Sie sicher, dass die cwrapper() Funktion aufgerufen wird.

Weil Sie nicht den Weg des drawchart.php liefern, wenn es nicht im aktuellen Verzeichnis existiert, require() sucht es in den in include_path in php.ini angegebenen Pfaden (es während der Laufzeit verändert werden kann).

file_exist() ist nicht so glücklich, es kann die Datei nur finden, wenn sie im aktuellen Verzeichnis existiert.

Der beste Weg, um diese Situation zu handhaben ist zu überprüfen nicht, ob die Datei vorhanden ist (wer kümmert sich um sie require() Griff lassen ?, es), aber wenn die Funktion, die Sie existiert anrufen möchten zu überprüfen:

require 'drawchart.php'; 

if (function_exists('cwrapper')) { 
    cwrapper(); 
} 

In der Tat, weil require das Skript beendet, wenn die Datei nicht geladen werden kann, müssen Sie nicht einmal überprüfen, ob die Funktion existiert. Wenn es in der erforderlichen Datei definiert ist, ist es vorhanden, nachdem die Anweisung require() zurückgegeben wurde (oder das Skript wurde abgebrochen).

Der Code sollte so einfach sein wie:

require 'drawchart.php'; 

cwrapper(); 
+0

Wenn ich eine Funktion aufrufen, die eine Ausgabe chart.png zum Beispiel erzeugt. Gibt es einen Grund, warum diese Datei beim nächsten Funktionsaufruf übersprungen oder nicht verfügbar sein sollte? Vielleicht im Schreiben der Datei oder etwas in der Art? In der Zwischenzeit werde ich versuchen, ohne die file_exists – NoobPython

+0

Sie haben Recht. Ich habe versucht, den folgenden Befehl innerhalb der if-Anweisung mit {} zu setzen. Und es erreichte nicht einmal diesen Befehl. Das bedeutet, dass die if-Anweisung FALSE annimmt, obwohl die PHP-Datei im selben Verzeichnis wie das Runtime-PHP existiert. Einen Schritt näher!!Danke – NoobPython

+0

Jetzt laufe ich es einfach so, wie du es sehr einfach sagst ohne das if shebang. Ich werde Ihnen Bescheid geben. Der Code braucht Ewigkeiten, um abgeschlossen zu werden. Danke für all deine Antworten. Ihr Jungs seid toll! – NoobPython