Zur Navigation

Skript aufteilen?

1 Ranma (Gast)

In so mancher Anleitung habe ich gelesen, daß es sich bewährt hat, so Dinge wie ein Formular und dessen Auswertung in dieselbe Datei zu schreiben. Aus viel mehr besteht ein PHP-Skript nicht. Warum bestehen viele PHP-Skripte aus so um die hundert Dateien?

Wäre es schlimm, wenn man zum Beispiel den CSS-Teil im Seitenquelltext sehen kann? Oder wenn man einzelne Abschnitte eines Skriptes (verschiedene Formulare) durch per GET übertragenen Parameter identifizieren würde?
Ranma

10.04.2016 07:52

2 Jörg Kruse

Warum bestehen viele PHP-Skripte aus so um die hundert Dateien?

Ab einer bestimmten Größe macht es Sinn, das Script zu strukturieren und diese Struktur kann man in einer Dateistruktur abbilden. Klassen und Templates sollten beispielsweise in eigenen Dateien untergebracht werden.

Wäre es schlimm, wenn man zum Beispiel den CSS-Teil im Seitenquelltext sehen kann?

Nein. Wenn CSS in mehreren verschiedenen HTML-Dokumenten verwendet wird, ist es aber sinnvoll, dieses auszulagern. Dann ist der CSS-Teil leichter zu warten.

Oder wenn man einzelne Abschnitte eines Skriptes (verschiedene Formulare) durch per GET übertragenen Parameter identifizieren würde?

Das verstehe ich jetzt nicht, was meinst du mit identifizieren?

11.04.2016 10:58

3 Piet1337

Da kennst sich jemand unheimlich gut aus!=)

11.04.2016 11:19

4 Ranma (Gast)

Das verstehe ich jetzt nicht, was meinst du mit identifizieren?

Beim Aufteilen auf verschiedene Dateien werden die über den Dateinamen identifiziert. Sonst wüßten include() oder require() nicht, was eingebunden werden soll. Wenn ich die Abschnitte stattdessen alle in einer Datei habe, dann will ich die trotzdem nicht ständig kopieren, sondern sie immer wieder aufrufen können. Das ginge, indem ich das Skript mit einem Parameter (GET-Variable) aufrufe und darüber den richtigen Abschnitt finde.

Wenn ich mir ein professionelles Skript aus mehreren Dateien ansehe, dann finde ich das nämlich garnicht übersichtlich. Oft finde ich nichtmal die Stellen, an denen die Dateien eingebunden werden. Meistens scheint das nicht eine zentrale Datei zu übernehmen, sondern es wird in langen Ketten irgendetwas eingebunden und dort wieder etwas eingebunden und so weiter. Würde ich an einer Stelle etwas ändern, dann ginge mir gleich der Überblick verloren, auf welche Teile sich das noch auswirkt und wenn ich sie finde, dann müßte ich trotzdem noch mehrere Dateien gleichzeitig bearbeiten.
Ranma

12.04.2016 06:04

5 Ranma (Gast)

Ich würde es einfach per GET-Variable machen, wenn man die nicht generell vermeiden sollte, weil die von jedem manipuliert werden können. Aber bei include() oder require() sollte das nicht der Fall sein, weil man die Dateinamen verbergen kann. Falls man sie tatsächlich sicher verbergen kann?
Ranma

12.04.2016 06:31

6 Jörg Kruse

Würde ich an einer Stelle etwas ändern, dann ginge mir gleich der Überblick verloren, auf welche Teile sich das noch auswirkt

Deswegen kapselt man bei größeren Projekten seinen Code in Funktionen und Klassen. Wenn man die Schnittstellen nur erweitert, aber ansonsten stabil hält, wirken sich Änderungen nicht an Stellen im Code aus, die man grad nicht im Blick hat.

Ich würde es einfach per GET-Variable machen, wenn man die nicht generell vermeiden sollte, weil die von jedem manipuliert werden können. Aber bei include() oder require() sollte das nicht der Fall sein, weil man die Dateinamen verbergen kann. Falls man sie tatsächlich sicher verbergen kann?

Problematisch wäre es, wenn du die Dateinamen per GET übermittelst, und diese ungefiltert in include() oder require() verwendest. Dann kann ein User durch Änderung der URL beliebige Dateien, auf die der Webserver Zugriff hat, inkludieren lassen.

12.04.2016 15:46 | geändert: 12.04.2016 15:49

7 Ranma (Gast)

Wäre es sicher, jeder Datei eine Nummer zuzuweisen und die Nummer per GET zu übermitteln?
Ranma

14.04.2016 05:35

8 Jörg Kruse

Ja, das wäre eine Möglichkeit, ein solches Array zu definieren. So z.B. sollte es es sicher sein:

$files = array(
    1 => 'foo.php',
    2 => 'bar.php'
);
$file = (empty($_GET['file'])) ? 0 : intval($_GET['file']);
if (array_key_exist($file)) {
    require($files[$file]);
} else {
    // Fehlermeldung ausgeben
}

Es ginge auch, den Dateinamen per GET zu übermitteln, und mit in_array() zu überprüfen, ob der Dateiname im vordefinierten Array enthalten ist.

14.04.2016 12:30 | geändert: 14.04.2016 12:32

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]