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
knut.krueger [ Di, 01 April 2008 15:42 ] [ ID #1933170 ]

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
Joerg Behrens [ Di, 01 April 2008 15:56 ] [ ID #1933171 ]

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
helmut [ Di, 01 April 2008 16:16 ] [ ID #1933172 ]

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
knut.krueger [ Di, 01 April 2008 16:21 ] [ ID #1933173 ]

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
Gerome Muent [ Di, 01 April 2008 16:28 ] [ ID #1933174 ]

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
Benjamin Zikarsky [ Di, 01 April 2008 16:37 ] [ ID #1933175 ]

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
Hans-Werner Hilse [ Di, 01 April 2008 16:36 ] [ ID #1933176 ]

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
knut.krueger [ Di, 01 April 2008 16:47 ] [ ID #1933177 ]

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
knut.krueger [ Di, 01 April 2008 16:49 ] [ ID #1933178 ]

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/
Christoph Herrmann [ Di, 01 April 2008 16:55 ] [ ID #1933179 ]

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
knut.krueger [ Di, 01 April 2008 17:02 ] [ ID #1933180 ]

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
Ulf Kadner [ Di, 01 April 2008 18:04 ] [ ID #1933181 ]

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
Joerg Behrens [ Di, 01 April 2008 18:12 ] [ ID #1933182 ]

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
Ulf Kadner [ Di, 01 April 2008 18:17 ] [ ID #1933183 ]

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
Benjamin Zikarsky [ Di, 01 April 2008 18:27 ] [ ID #1933184 ]

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
knut.krueger [ Di, 01 April 2008 23:24 ] [ ID #1933194 ]
PHP » de.comp.lang.php.misc » Funktionen aus Datei einbinden

Vorheriges Thema: erste Zahl finden
Nächstes Thema: Transparenz fuer mehrere Palettenwerte vom Ausgangsbild.