php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2005

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 06.05.2005, 18:59  
Gast
 
Beiträge: n/a
Standard Wie arbeitet PHP require ab ?

Angenommen ich habe ein Script "a.php"

Darin steht

Code:
<?php

if ($x>10) {
   require "b.php";
}
if ($x <= 10) {
   require "c.php";
}

?>
wird b.php bzw. c.php nur dann eingebunden (also physikalisch auf Platte abgegriffen) wenn $x den entsprechenden Wert hat oder werden beim Aufruf von a.php bereits beide Dateien an die entsprechenden Stellen eingebettet (wie ein Platzhalter, der sich vor der eigentlich Interpretation erst das komplette Script zusammenbaut - inklusive b.php und c.php - und erst dann bei der Abarbeitung schaut, welchen Zweig er durchlaufen muß und was eigentlich benötigt wird) ?
Wenn also $x den Wert 5 hat, wird dann nur c.php eingebunden oder b.php und c.php und bei der Abarbeitung wird dann halt nur c.php genutzt, wg. der erfüllten Bedingung (b.php ist aber trotzdem zumindest gelesen worden) ?
 
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 06.05.2005, 19:28  
Gast
 
Beiträge: n/a
Standard

Läßt sich doch ganz einfach selber testen. Du hast sogar schon einen Teil des entsprechenden Testskripts. Warum machst Du es nicht einfach fertig und läßt es laufen?

reuqire wird abgearbeitet, wenn die Ausführung an die entsprechende Code-Stelle kommt. Demnach
Zitat:
und erst dann bei der Abarbeitung schaut, welchen Zweig er durchlaufen muß und was eigentlich benötigt wird
ja
 
Alt 06.05.2005, 19:34  
Gast
 
Beiträge: n/a
Standard

das läßt sich leider nicht selber testen !
Denn ich komme ja logischerweise nur in einen der beiden Zweige (also b.php oder c.php). Ich möchte aber wissen ob der PHP-Interpreter in Wirklichkeit beide Scripte da hinein-merged und dann bei der Abarbeitung erst feststellt, was er braucht (also intern einen Maximal-Code erstellt).

Kern der Frage ist: Wenn ich ein Script mit 100 require Anweisungen habe, wird dann beim Aufruf des Scriptes php-intern erst ein merge der 100 Scripte zu einem großen Script gemacht oder tatsächlich je nach Bedingung der merger (require) gestartet und der Rest brav ignoriert (d.h. auch nicht von Platte gelesen und verarbeitet) ? Es ist also in erster Linie eine Frage, die auf die Performance abzielt.
 
Alt 06.05.2005, 19:48  
Gast
 
Beiträge: n/a
Standard

doch, das könntst Du selber testen - mal angenommen, ich hätte Dir die Frage nicht schon beantwortet


PHP-Code:
<?php
// b.php
echo "hallo, ich bin das Skript B
\n"
;
?>
PHP-Code:
<?php
// c.php
echo "hallo, ich bin das Skript C
\n"
;
?>
Wird ein Skript eingebunden (sei es durch include,include_once,require oder require_once), wird es auch abgearbeitet. D.h. der Code, der "frei rumsteht" - sprich: keine Funktionsdefinition, keinen Klassencode o.ä. - wird ausgeführt. In diesem Fall jeweils das echo.
Und dann siehst Du, dass die Datei nur eingebunden wird, wenn die Ausführung an die entsprechende Stelle kommt.
include/reuqire sind keine Präprozessordirektiven - soetwas gibt es in dieser Form nicht bei php.
 
Alt 06.05.2005, 20:03  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

nein volkerk! wenn angenommen beide dateien würden abgearbeitet werden! stände immernoch eine dieser beiden inhalte (die echos) innerhalb der if schleifw und nur eine datei würde angezeigt werden!

testen kannst dus jedoch trozdem! undzwar fordere doch eien datei an die garnicht existiert! wenn php beide dateien "requiern" will also einbinden will und dann n ur eine abarbeiten will kommen 2 fehlernachrichten! so das beide eingefügt werden sollten, sie aber nicht existieren! wenn nur eine fehlernachricht kommt weißt du das eben nur eine der beiden dateien, je nach if abfrage, eingefügt wurde bzw. das php es verscuht hat!

aber nein es wird nur der teil includet der wirklich rein soll die anderen befehle in der if abfrage werden n icht beachtet!
Flor1an ist offline  
Alt 06.05.2005, 20:09  
Gast
 
Beiträge: n/a
Standard

So ganz hast Du meine Frage wohl nicht verstanden.

PHP-Code:
<?php
if ($x 10)
    require 
"b.php";
else
    require 
"c.php";
?>
Wenn ich Deine Scripte erstelle bekomme ich je nachdem wie $x steht den einen oder anderen Text zu sehen. Ich weiß aber immer noch nicht, ob er beim Aufruf von a.php nicht intern folgendes Script erstellt

PHP-Code:
<?php
if ($x 10)
    echo 
"hallo, ich bin das Skript B
\n"
;
else
    echo 
"hallo, ich bin das Skript B
\n"
;
?>
wobei dann eben nur ein Zweig zur Ausführung kommt aber eben vor der Ausführung b.php und c.php hineingemerged wurden.
 
Alt 06.05.2005, 20:19  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

genau diese frage habe ich eben beantwortet!
Flor1an ist offline  
Alt 06.05.2005, 20:32  
Gast
 
Beiträge: n/a
Standard

ok, danke ! Das ist eine gute Idee gewesen und beantwortet meine Frage. Ich hatte die Antwort nicht lesen können, da sie zum Zeitpunkt meiner eigenen Antwort von Dir hineingestellt wurde.
 
Alt 06.05.2005, 21:28  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von ungelesenes Handbuch
Da include() und require() spezielle Sprachkonstrukte sind, müssen Sie diese innerhalb einer bedingten Anweisung in einen Anweisungsblock setzen.
 
Alt 07.05.2005, 01:20  
Gast
 
Beiträge: n/a
Standard

ja, sorry. Nicht vorhandene Dateien einbinden ist besser, da man ansonsten wissen muss, dass es eben keinen Präprozessor in php gibt.
 
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Apache arbeitet nur Online PHP Tipps 2007 14 14.12.2005 11:08
include vs require PHP Tipps 2005-2 3 20.10.2005 12:20
htaccess und require "seite.php" PHP Tipps 2005-2 4 19.10.2005 18:36
require und include Aris Sung PHP Tipps 2005-2 3 08.09.2005 16:57
include() oder require() -problem PHP Tipps 2005-2 7 01.08.2005 20:13
include - require -> once -> schleife? PHP Tipps 2005-2 3 08.06.2005 08:48
require in Variable? Lia PHP Tipps 2005 2 30.03.2005 10:34
require () aus Unterverzeichnis, und diese wieder ... PHP Tipps 2005 3 08.03.2005 01:15
Was für ein CMS arbeitet am effectivsten? spoi Off-Topic Diskussionen 11 07.03.2005 18:51
.htaccess - require valid-user und trotzdem referer zulassen pixelcut Server, Hosting und Workstations 2 05.01.2005 10:56
require PHP Tipps 2004 6 14.10.2004 16:43
Yast arbeitet nicht mehr Server, Hosting und Workstations 3 05.09.2004 00:52
Unterschied zwischen require() und include() PHP Tipps 2004 3 24.07.2004 19:09
eins script das viel mit zeiten arbeitet... Sclot PHP Tipps 2004 5 21.06.2004 22:55
include() vs. require(). PHP Tipps 2004 4 15.06.2004 21:07

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
require c ../ was ist es?

Alle Zeitangaben in WEZ +2. Es ist jetzt 13:18 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.