Funktionsaufruf schlägt fehl obwohl Funktion vorhanden
Egon (klein)
- php
0 Ashura0 Ashura0 Egon (klein)0 at
0 Egon (klein)
0 EisFuX0 Johannes Zeller
Hallo Leute,
ich inkludiere die Datei config.inc.php in der Datei spiele.php. In der config.inc.php wird die functions.inc.php inkludiert. Dort stehen die gesamten benutzerdefinierten Funktionen drin.
Ein Funktionsaufruf aus der Datei spiele.php endet mit einem Fatal Error:
Fatal error: Call to undefined function getvals() in /opt/lampp/htdocs/html/STN4/pages/spiele/spiele.php on line 42
Der Code ist richtig, aber zur Vorsicht (und aus Erfahrung heraus) gebe ich ihn euch trotzdem:
spiele.php:
[..]
<?php require("../../includes/config.inc.php"); ?>
~~~ [..]
~~~php
<?php getvals(); ?>
~~~ [..]
config.inc.php
[..]
~~~php
require($includesdir."functions.inc.php");
~~~ [..]
functions.inc.php:
~~~php
<?php
function getvals(){
return "abc";
}
?>
Ich danke für eure Hilfe
euer kleiner Egon
Hallo Egon.
Ein Funktionsaufruf aus der Datei spiele.php endet mit einem Fatal Error:
Du hast error_reporting auf E_ALL gestellt, um herauszufinden, ob alle Dateien erfolgreich eingebunden werden konnten?
Einen schönen Sonntag noch.
Gruß, Ashura
Hallo Ingrid.
Besser.
Einen schönen Sonntag noch.
Gruß, Ashura
Hallo Ingrid.
Wie kommst du jetzt auf eine Ingrid? ;)
Viele Grüße
euer kleiner Egon
Hallo.
Wie kommst du jetzt auf eine Ingrid? ;)
Klassischerweise durch ihr Schlafgemach.
MfG, at
Hi Ashura
Du hast error_reporting auf E_ALL gestellt, um herauszufinden, ob alle Dateien erfolgreich eingebunden werden konnten?
Geradeeben habe ich diese Zeile hinzugefügt:
<?php error_reporting(E_ALL); ?>
Doch es verändert sich nichts an der Seite, der Fehler bleibt.
Kommt denn nicht immer eine Fehlermeldungen, wenn Dateien nicht eingebunden werden können, aufgrund von einem falschen Pfad? Oder meinst du gar nicht den Pfad?
Viele Grüße
euer kleiner Egon
Hallo Egon (klein),
ich inkludiere die Datei config.inc.php in der Datei spiele.php. In der config.inc.php wird die functions.inc.php inkludiert. Dort stehen die gesamten benutzerdefinierten Funktionen drin.
Ein Funktionsaufruf aus der Datei spiele.php endet mit einem Fatal Error:Fatal error: Call to undefined function getvals() in /opt/lampp/htdocs/html/STN4/pages/spiele/spiele.php on line 42
Der Code ist richtig, aber zur Vorsicht (und aus Erfahrung heraus) gebe ich ihn euch trotzdem:
Das bezweifle ich. Wenn PHP meint, dass die Funktion nicht existiert, existiert sie nicht.
Die Verwendung von require() löst im Fehlerfall laut PHP-Handbuch einen Abbruch des Scripts aus.
Da dein Script anscheinend weiterläuft, und du keine Fehlermeldungen siehst, würde ich an deiner Stelle die Datei functions.inc.php nochmal anschauen. Vielleicht hast du nur einen simplen Tippfehler gemacht oder die Funktionsdefinition steht in irgendeinem if-else-Zweig ...
MffG
EisFuX
Hallo Egon,
Vielleicht versuchst du mal zu überprüfen, ob die Datei wirklich eingebunden und ausgeführt wird:
functions.inc.php:
<?php
echo "Test Bla Blubb Foo Bar\n";
function getvals(){
return "abc";
}?>
Schöne Grüße,
Johannes
--
WM-Tippspiel: <http://zeller-johannes.de/wmtipp/>
ie:% fl:( br:< va:| ls:[ fo:) rl:) n4:? ss:| de:] js:| ch:} sh:) mo:| zu:)
Hallo Egon,
Hi, schön, dass in diesem Thread noch jemand schreibt.
Das Problem hat sich NICHT gelöst bisher, und einen Workaround habe ich auch noch nicht gefunden. Ich habe folgendes festgestellt:
Wenn ich die Datei functions.inc.php einbinde in der spiele.php, und zwar mit folgendem Code:
require("../../includes/functions.php");
(oder eben mit include statt require, ist ja egal), kann die Funktion getvals() aufgerufen werden und alles funktioniert nach meinen Vorstellungen.
Wenn die Datei mit $includesdir vorne dran eingebunden wird, kann die Funktion nicht aufgerufen werden. $includesdir wird in der config.inc.php festgelegt, und variiert je nachdem ob die Datei gerade auf meinem Testserver läuft oder live draußen im Internet.
Wenn ich direkt in der spiele.php die functions.inc.php einbinde (also den Weg über die config.inc.php gar nicht gehe), funktioniert es ebenfalls nicht.
Wenn ich die Funktion getvars() direkt in der spiele.php einprogrammiere, kann sie auch aufgerufen werden.
Vielleicht versuchst du mal zu überprüfen, ob die Datei wirklich eingebunden und ausgeführt wird:
[ CODE ]
Habe ich gemacht, und der Code wird ausgegeben, sprich die Datei eingebunden, nur die Funktion will nicht aufgerufen werden.
Ich verzwacke hier noch. Das ist doch ganz bestimmt ein Bug in PHP!
Ich gebe euch jetzt mal den gesamten Code meiner Programmierung (nicht als Text, der würde zu lang).
config.inc.php
http://img443.imageshack.us/my.php?image=configincphpf7fs.jpg
functions.inc.php
http://img443.imageshack.us/my.php?image=functionsincphpf1kg.jpg
Beide spiele.php
http://img443.imageshack.us/my.php?image=spielephp0f4ku.jpg
http://img443.imageshack.us/my.php?image=spielephp1f4sj.jpg
Ich hoffe das Problem löst sich sobald wie möglich. Das kann doch wohl wirklich nicht sein, sorry, aber dieser Fehler ist mir total unverständlich und suspekt...
Viele Grüße
euer kleiner Egon
Hallo Egon,
Esrtmal als kleiner Hinweis: Code-Beispiele als Text-Datei zu posten ist etwas ungeschickt, weil man dann nicht mal eben schnell den Code per Copy & Paste zum Ausprobieren kopieren kann. Wenn du keinen Online-Webspace hast, um Beispiele hochzuladen, kannst du stattdessen zum Beispiel http://phpfi.com/ verwenden.
Wenn die Datei mit $includesdir vorne dran eingebunden wird, kann die Funktion nicht aufgerufen werden. $includesdir wird in der config.inc.php festgelegt, und variiert je nachdem ob die Datei gerade auf meinem Testserver läuft oder live draußen im Internet.
Das Problem liegt darin, dass bei dir in $includesdir kein lokaler Pfad sondern eine URL steht. Bei PHP kann man einstellen, dass er bei include, etc. nicht nur lokale Dateien öffnet sondern auch entfernte Seiten über HTTP abfragt.
Das Problem dabei ist aber, dass er dann nicht den Inhalt der Datei, sondern die geparste Version erhält.
Zum Beispiel bei deiner Datei functions.inc.php:
<?php
echo "Bla Blubb";
function getvals ()
{
echo "getvals hier!";
}
?>
Wenn du nun die Datei lokal einbindest, ist alles paletti, die echo-Anweisung wird ausgeführt und dir steht die Funktion getvals() zur Verfügungg. Wenn du die Datei aber über HTTP aufrufst, wird der in der Datei enthaltene Code zuerst ausgeführt und für das Programm, in dem du die functions.inc.php einbindest, ist es dann das gleiche, wie wenn du eine lokale Datei mit diesem Inhalt einbinden würdest:
geparste functions.inc.php
Bla Blubb
Da dann auch keine PHP-Tags (<?php ... ?>) mehr enthalten sind, wird dieser Inhalt dann einfach ausgegeben, sodass es scheint, als würde nur die echo-Anweisung ausgeführt.
Langen Rede kurzer Sinn: Rufe deine Dateien nicht mehr über HTTP auf sonder binde sie lokal ein.
$basedir = '/var/www/egons_seite/htdocs/user/stn/';
Was du da genau eintragen musst, erfährst du z.B. aus der PHP-Variable $_SERVER['DOCUMENT_ROOT'].
Schöne Grüße,
Johannes