Funktionen aus Datei einbinden
Hallo zusammen,
wie kann ich denn in PHP Funktionen die ich öfters brauche aus einer
datei einbinden.
Datei: functions.php
-----
<?PHP
function hello(
echo 'hello Word';
}
?>
--------------
Warum funktioniert:
<?PHP
require("functions.php"); #oder auch require
hello;
?>
nicht. Irgendwo wird die Erklärung sicherlich stehen, wie man das
handhabt, aber gefunden habe ich sie nicht.
Viele Grüße Knut
Re: Funktionen aus Datei einbinden
Knut Krueger schrieb:
> Hallo zusammen,
> wie kann ich denn in PHP Funktionen die ich öfters brauche aus einer =
> datei einbinden.
>
>
> Datei: functions.php
> -----
> <?PHP
> function hello(
> echo 'hello Word';
> }
> ?>
> --------------
>
> Warum funktioniert:
> <?PHP
> require("functions.php"); #oder auch require
>
> hello;
-------^
Da fehlen die () hinter dem Funktionsnamen. Wenn du das Error_Reporting
entsprechend hoch setzt dann haette dir PHP zumind. schonmal gesagt fuer =
was es dein 'hello' gehalten hat.
> ?>
>
> nicht. Irgendwo wird die Erklärung sicherlich stehen, wie man das
> handhabt, aber gefunden habe ich sie nicht.
K.a wo und obs es so deutlich im Manual irgendwo steht. Aber Funktionen
benutzen () hinter ihrem Namen auch wenn es keien Parameter gibt. Nichts =
destotrotz gibt es "Sprachkonstrukte" wie 'echo,require,include' welche
ohne () auskommen.
Ratschlag:
Schreibe keine Funktionen welche direkt etwas ausgeben sondern benutze
einen Returnwert dazu. Letzteres sollte jede deiner Funktionen haben.
Beispiel:
function hello(
return 'hello Word';
}
echo hello();
Gruss
Joerg
--
TakeNet GmbH, Geschaeftsfuehrer Wolfgang Meier
97080 Wuerzburg Tel: +49 931 903-2243
Alfred-Nobel-Straße 20 Fax: +49 931 903-3025
HRB Wuerzburg 6940 http://www.takenet.de
Re: Funktionen aus Datei einbinden
Hallo, Knut,
Du (knut.krueger) meintest am 01.04.08:
> Hallo zusammen,
> wie kann ich denn in PHP Funktionen die ich öfters brauche aus einer
> datei einbinden.
> Datei: functions.php
> -----
> <?PHP
> function hello(
> echo 'hello Word';
> }
> ?>
Runde linke Klammer, geschweifte rechte Klammer.
Viele Gruesse!
Helmut
Re: Funktionen aus Datei einbinden
Hallo Jörg, da habe ich wohl etwas zu viel vereinfacht ;-)
Ich habe es auch nicht mit hello ausprobiert sondern mit einer längeren
funktion, die ich nicht immer wieder mit copy und paste einbinden will.
Sorry..
aber das Problem habe ich etwas eingegrenzt:
Ist die Include Datei im gleichen Verzeichnis so funktioniert es
require("functions.php");
Was nicht funktioniert ist
require("../test/functions.php");
oder mit Xammp unter Windows:
require("http//:localhost/test/functions.php");
Wobei die Datei gefunden wird, sonst gibt es eine Fehlermeldung ..
failed to open stream: No such file or ...
Viele GRüße Knut
Re: Funktionen aus Datei einbinden
* Knut Krueger wrote:
> Was nicht funktioniert ist
>
> require("../test/functions.php");
Weil dein Ordner nicht "test" heißt oder nicht dein aktueller Ordner ist?
> oder mit Xammp unter Windows:
> require("http//:localhost/test/functions.php");
Weil allow_url_fopen standardmaessig auf 0 steht in deiner php.ini?
G.
--
BM Computer-Services, Bergmannstr. 66, 10961 Berlin
Webdesign, Internet, Layout und Grafik
Tel.: 030/20649400, mobil 0175/7419517, Fax: 030/20649401
Web: http://www.bmservices.de, eMail: kontakt [at] bmservices.de
Re: Funktionen aus Datei einbinden
Knut Krueger schrieb:
>
> Was nicht funktioniert ist
>
> require("../test/functions.php");
Das hier sollte auf jeden Fall funktionieren, sofern die Pfadangabe
korrekt ist. Allerdings ist "require" ein Sprachkonstrukt wie Jörg
bereist schrieb und wird demenstrechend so verwendet:
require "../test/functions.php";
Sollten sich auch nur Funktionen/Klassen(definitionen) in der Datei
befinden, würde ich zu einem require_once raten, dann gibt es, falls das
File 'mal doppelt geladen wird keine Fehler auf Grund von Namenskollisionen.
> oder mit Xammp unter Windows:
> require("http//:localhost/test/functions.php");
>
Das kann bzw. soll _auf keinen Fall_ funktionieren. Abgesehen davon,
dass dafür erst remote Includes in der php.ini erlaubt werden müssten
[php.ini: allow_url_fopen], macht der Apache hier nicht mit. Schließlich
sollte dem Apache (bzw anderem Webserver) beigebracht worden sein,
dass er php-Dateien durch den PHP-Interpreter "jagt". Wenn er das mit
einer Datei macht, die lediglich Funktionsdefintionen enthält wird da
kein einziges Byte Text zurückgegeben (höchstens Leerzeilen vor und nach
den PHP-Tags).
Und das ist selbstverständlich nur zu deinem eigenen Schutz, du willst
ja schließlich nicht, dass jeder die Möglichkeit hat deinen PHP Code
aufzururufen durch die Eingabe der URL zu einem PHP-File. Das wäre ein
*großes* Sicherheitsrisiko. ;)
> Viele GRüße Knut
Grüße
Benjamin
Re: Funktionen aus Datei einbinden
Moin,
Gerome Muent wrote:
> * Knut Krueger wrote:
>
> > Was nicht funktioniert ist
> > [...]
> > oder mit Xammp unter Windows:
> > require("http//:localhost/test/functions.php");
>
> Weil allow_url_fopen standardmaessig auf 0 steht in deiner php.ini?
Oder weil -- je nach Szenario: hoffentlich -- der Server
eine .php-Datei ohnehin nicht im Quellcode ausliefern würde, sondern
brav interpretieren lässt?
-hwh
Re: Funktionen aus Datei einbinden
Gerome Muent schrieb:
> * Knut Krueger wrote:
>
>> Was nicht funktioniert ist
>>
>> require("../test/functions.php");
> Weil dein Ordner nicht "test" heißt oder nicht dein aktueller Ordner ist?
Das habe ich natürlich erst nachgeschaut.
Also wenn ich /test/ in /xxxx/ ändere wird die Datei nicht gefunden
Daher ist wohl davon auszugehen dass sie gefunden wird und der Pfad
richtig ist.
>
>> oder mit Xammp unter Windows:
>> require("http//:localhost/test/functions.php");
>
> Weil allow_url_fopen standardmaessig auf 0 steht in deiner php.ini?
Es ist auf ON Aber das führt jetzt von der Frage weg. Ich möchte
ohnehin nur den relativen Pfad nehmen.
GRüße Knut
Re: Funktionen aus Datei einbinden
Helmut Hullen schrieb:
> Hallo, Knut,
>
> Runde linke Klammer, geschweifte rechte Klammer.
>
Nochmal Sorry das war schlampig hingeschrieben und lenkt vom
eigentlichen Problem ab.
Aber nachdem ich deshalb diese einfache Beispiel wirklich ausprobiert
habe bin ich auf die Ursache gestoßen :-)
Ich kann nur ein Include vom gleichen Verzeichnis einbinden nicht von
einem anderen.
Grüße Knut
Re: Funktionen aus Datei einbinden
Joerg Behrens schrieb:
> destotrotz gibt es "Sprachkonstrukte" wie 'echo,require,include' welche
> ohne () auskommen.
Zusatz: genau deswegen funktionieren diese ja auch ohne Klammern, weil
es keine Funktionen sondern Sprachelemente sind.
--
Mit freundlichen Grüßen,
Christoph Herrmann
http://dragonprojects.de/
Re: Problem gelöst - Funktionen aus Datei einbinden
Da war wohl irgendwie der Apache durcheineander.
Ich hatte die Dateien auf den Webserver geladen und da hat es
funktioniert. Danach habe ich den PC hier neu gestartet und es klappt auch.
Seltsam.
Trotzdem danke für die Mühe Knut
Re: Funktionen aus Datei einbinden
Benjamin Zikarsky wrote:
> bereist schrieb und wird demenstrechend so verwendet:
>
> require "../test/functions.php";
Wenn Dus schon verbessern willst dann doch bitte gleich richtig! :-)
require '../test/functions.php';
Wenn nix für PHP zu parsendes in der Zeichenfolge steht dann brauchste
diese auch nicht in Doublequotes einschließen.
MfG, Ulf
Re: Problem gelöst - Funktionen aus Datei einbinden
Knut Krueger schrieb:
> Da war wohl irgendwie der Apache durcheineander.
> Ich hatte die Dateien auf den Webserver geladen und da hat es
> funktioniert. Danach habe ich den PC hier neu gestartet und es klappt a=
uch.
>
> Seltsam.
>
> Trotzdem danke für die Mühe Knut
*seufz*
Joerg
--
TakeNet GmbH, Geschaeftsfuehrer Wolfgang Meier
97080 Wuerzburg Tel: +49 931 903-2243
Alfred-Nobel-Straße 20 Fax: +49 931 903-3025
HRB Wuerzburg 6940 http://www.takenet.de
Re: Funktionen aus Datei einbinden
Knut Krueger wrote:
> Nochmal Sorry das war schlampig hingeschrieben und lenkt vom
> eigentlichen Problem ab.
Selbst schuld :-)
> Aber nachdem ich deshalb diese einfache Beispiel wirklich ausprobiert
> habe bin ich auf die Ursache gestoßen :-)
> Ich kann nur ein Include vom gleichen Verzeichnis einbinden nicht von
> einem anderen.
Quark. Du kannst aus jedem Verzeichnis einbinden auf das PHP zugriff
hat. Es gibt auch im allgemeinen keinen Grund relative Pfade zu nutzen
und darauf zu hoffen das PHP gerad zufällig auf den erhofften Pfad als
ausführendes Verzeichnis zeigt.
In Deinem einfachen fall wird wohl folgendes der passende Weg sein.
- Definiere eine Konstante, die ein Basisverzeichnis definiert zu
den du alle weiteren Aufrufe relativ angibst.
define ('MY_BASEFOLDER', dirname(__FILE__));
Jetzt kannst Du einfach mittelts
require_once MY_BASEFOLDER.'/myfile.php';
oder require_once dirname(MY_BASEFOLDER).'/otherfile.php';
einbinden.
Alternativ kann man auch die Include-Verzeichnis definitionen anpassen.
$inc_folders = ini_get('include_path');
$my_folder = dirname(dirname(__FILE__));
if (FALSE === strpos($inc_folders,$my_folder))
{
ini_set('include_path', $inc_folders.PATH_SEPARATOR.$my_folder);
}
MfG, Ulf
Re: Funktionen aus Datei einbinden
Ulf Kadner schrieb eine Korrektur:
> require '../test/functions.php';
Okay, Du hast gewonnen. ;-). Darauf habe ich gerade gar nicht geachtet.
Danke :D
> MfG, Ulf
Grüße
Benjamin
Re: Funktionen aus Datei einbinden
Ulf Kadner schrieb:
> Knut Krueger wrote:
>
>
> In Deinem einfachen fall wird wohl folgendes der passende Weg sein.
>
> - Definiere eine Konstante, ...
Hallo Ulf,
das habe ich eigentlich schon lange, damit ich vom localhost (der dann
auch gleich automatisch als localhost erkannt wird) und auch auf dem
Webserver die Seiten austesten kann ohne irgendetwas daran zu verändern.
Damit hatte ich angefangen, dachte aber es hat was damit zu tun dass
Funktionen hier eingebunden wurden, weil es halt gerade jetzt nicht ging.
Ich habe keinen blassen Dunst was sich hier aufgehängt hat
Nachdem der Rechner immer langsamer wurde, es auf dem Webserver
einwandfrei funktionierte habe ich neu gebootet und weg war das Problem
und den *seufz* den Jörg nicht verhindern konnte ;-) den habe ich
mindestens 5 mal herausgelassen und in die Tastatur gebissen
Danke für trotzdem für Deine Mühe Knut