Zwei Spiele, ein Server, include-paths Überschneidung

Irgendwelche Probleme mit XAMPP für Windows? Dann ist hier genau der richtige Ort um nachzufragen.

Zwei Spiele, ein Server, include-paths Überschneidung

Postby Squall83 » 09. January 2011 22:40

Hallo zusammen,

ich habe folgendes Problem:
Bei einem Online-Spiel (PHP) eines Freundes möchten wir 2 verschiedene Versionen auf demselben Server laufen lassen - eine stabile und eine Beta für Testzwecke. Das Problem ist, dass in der php.ini die Variable include_path ein paar Pfade zu Quellcodeverzeichnissen bekommen hat, damit für die ganzen include-statements keine langen relativen Pfade genommen werden müssen und damit bei Strukturänderungen nur die php.ini angepasst werden muss und nicht jede einzelne Quellcode-Datei.

Jetzt wo 2 Versionen auf dem Server laufen sollen, tritt natürlich das Problem auf, dass man der php.ini nicht einfach die Pfade von beiden Versionen geben kann, weil der Parser immer eine passende Datei aus dem erstbesten Verzeichnis hernimmt.

War es ein grundsätzlicher Fehler, include-Pfade in die php.ini einzutragen und wenn ja, wie macht man es richtig, wenn man keine riesigen relativen Pfade verwenden und Problemem mit Strukturänderungen aus dem Weg gehen will?

Grüße, Squall83
Squall83
 
Posts: 10
Joined: 09. January 2011 22:12

Re: Zwei Spiele, ein Server, include-paths Überschneidung

Postby Altrea » 10. January 2011 01:57

Squall83 wrote:War es ein grundsätzlicher Fehler, include-Pfade in die php.ini einzutragen

Definitiv. In der php.ini haben Projektbezogene Angaben nichts zu suchen sondern nur Einstellungen die global für alle Projekte gelten sollen.

Squall83 wrote:und wenn ja, wie macht man es richtig, wenn man keine riesigen relativen Pfade verwenden [...] will?

Das ist schwer zu sagen ohne das Projekt zu kennen. Vorübergehend ist es vielleicht eine Lösung die include_paths projektbezogen per .htaccess Datei oder der PHP Funktion set_include_path() zu setzen.
Doch wahrscheinlich ist, dass schon in der strukturierung und programmierung des Projektes Fehler gemacht wurden, die letztendlich erst zu dem Problem der langen include Pfade geführt hat.
Manchen Probleme davon kann man vielleicht mit einem vernünftigen MVC-Aufbau mit Autoloader aus dem Weg gehen. Das ist aber mehr als ins blaue geraten.
We don't provide any support via personal channels like PM, email, Skype, TeamViewer!

It's like porn for programmers 8)
User avatar
Altrea
AF Moderator
 
Posts: 11926
Joined: 17. August 2009 13:05
XAMPP version: several
Operating System: Windows 11 Pro x64

Re: Zwei Spiele, ein Server, include-paths Überschneidung

Postby Nobbie » 10. January 2011 09:37

Altrea wrote:
Squall83 wrote:War es ein grundsätzlicher Fehler, include-Pfade in die php.ini einzutragen

Definitiv. In der php.ini haben Projektbezogene Angaben nichts zu suchen sondern nur Einstellungen die global für alle Projekte gelten sollen.


Das ist so nicht richtig, auch wenn die Include-Angabe für ALLE Projekte richtig wäre, träte hier das Problem auf. Denn das Problem liegt nicht am Projekt an sich, sondern an der Version (Status und Version - die typischen Komponenten einer Entwicklungsumgebung).

Squall83 wrote:und wenn ja, wie macht man es richtig, wenn man keine riesigen relativen Pfade verwenden [...] will?


Man könnte mir VirtualHosts arbeiten und dort mit relativen Pfaden. Scheint mir im Moment das einfachste zu sein. Aber generell würde ich auch die Pfade aus der php.ini herausnehmen und in eine zentrale config.php legen. Dann bist Du ganz frei in den Möglichkeiten.
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04

Re: Zwei Spiele, ein Server, include-paths Überschneidung

Postby Squall83 » 10. January 2011 19:30

Puh, so viele Möglichkeiten und ich hab ehrlich gesagt nicht gerade viel Ahnung von Servern etc. :oops:

Ich habe zu euren Ideen mal ein wenig recherchiert und gehe einfach mal von oben nach unten durch.
Altrea wrote:Das ist schwer zu sagen ohne das Projekt zu kennen. Vorübergehend ist es vielleicht eine Lösung die include_paths projektbezogen per .htaccess Datei oder der PHP Funktion set_include_path() zu setzen.

Zur htaccess habe ich einen Artikel unter http://httpd.apache.org/docs/current/ho ... ccess.html gefunden, der einem davon abrät, sie zu benutzen, außer man ist kein Admin und hat keinen Vollzugriff, denn sie sollen den Server arg verlangsamen. Stattdessen werden Directory-Tags empfohlen (siehe http://httpd.apache.org/docs/current/mo ... #directory). Vom Prinzip her klingt das ja schon mal so, als ob man einfach für jedes Root-Verzeichnis eines Spiels (und dessen Unterverzeichnisse) ein eigenes Tag anlegen und dort drin die include-Pfade angeben kann, oder? Ich habe nur nicht verstanden, wo diese Tags hinkommen.

set_include_path() müsste man in jedes einzelne der Skripte einpflanzen, wenn ich das richtig verstanden habe. Das klingt so, als wenn es das Spiel auch arg verlangsamen würde, wenn jede einzelne Nutzeranfrage den include-path überschreibt. Das Ganze muss ja auch noch threadsicher bleiben.

Btw: Das Spiel ist schon älter, also gibt es keinerlei Objektorientierung im ganzen Projekt. Und was ich bisher zum Autoloader gefunden habe, war alles objektorientiert. Kann man den auch irgendwie ohne OO verwenden und wäre es ein großer Aufwand?
Das ganze schön nach MVC umzubauen, wäre er sehr hoher Aufwand und wird vielleicht später noch in Angriff genommen, aber vorerst wollen wir gerne erst mal kleine Änderungen testen.

Nobbie wrote:Man könnte mir VirtualHosts arbeiten und dort mit relativen Pfaden. Scheint mir im Moment das einfachste zu sein. Aber generell würde ich auch die Pfade aus der php.ini herausnehmen und in eine zentrale config.php legen. Dann bist Du ganz frei in den Möglichkeiten.

Wie ist das mit den VirtualHosts gemeint? Wenn man mit relativen Pfaden arbeiten, braucht man keinen DocumentRoot etc. mehr, oder?
Und wie handhabt man eine zentrale config.php? Wenn beide Spielversionen identisch sind abgesehen von ein paar Neuerungen in der Beta, dann müssen ja beide Versionen wissen, auf welchen Teil der Config sie zu greifen müssen.
Squall83
 
Posts: 10
Joined: 09. January 2011 22:12

Re: Zwei Spiele, ein Server, include-paths Überschneidung

Postby Nobbie » 10. January 2011 19:44

Squall83 wrote:Wie ist das mit den VirtualHosts gemeint? Wenn man mit relativen Pfaden arbeiten, braucht man keinen DocumentRoot etc. mehr, oder?


Aua hua - da muss ich ja doch auch mal kurz lachen (ja, ist gemein von mir!). Nein, es ist natürlich genau entgegengesetzt: VirtualHosts haben jeder seinen eigenen DocumentRoot, und wenn man mit relativen Pfaden arbeitet, dann sind sie eben relativ zum aktuellen DocumentRoot und somit absolut gesehen je nach VirtualHost (sprich: je nach Version, jede Version bekommt einen eigenen VirtualHost) in einem anderen Verzeichnis.

Squall83 wrote:Und wie handhabt man eine zentrale config.php?


Neeeeiiiin - eben NICHT nur eine einzige zentrale config.php, das war sooo nicht gemeint, sondern einfach eine config.php im Projekt und wenn man verschiedene Versionen hat, dann hat man auch verschiedene Versionen von config.php (natürlich an verschiedenen Speicherorten, jede Projektversion bekommt einen eigenen Ordner, worunter alles installiert wird) und dort steht dann drin, wo welche Dateien gefunden werden. Das KANN durchaus eine einheitliche config.php werden, muss aber nicht. Dazu kenne ich zu wenig von dem Projekt (nämlich genau genommen gar nichts!). Aber es soll eben nicht in tausend verschiedenen Dateien jeder include() angepasst werden, sondern es gibt nur eine Datei, wo die Pfade definiert werden.

Du denkst viel zu kompliziert - nachher wirst Du sehen, ist alles supereinfach und total logisch. Ganz sicher. Alles wird gut...
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04

Re: Zwei Spiele, ein Server, include-paths Überschneidung

Postby Squall83 » 11. January 2011 06:48

Ach so war das gemeint. :lol:

Dann habe ich nur noch zwei Fragen: Wie sieht die config.php aus und wann wird sie aufgerufen?
Squall83
 
Posts: 10
Joined: 09. January 2011 22:12

Re: Zwei Spiele, ein Server, include-paths Überschneidung

Postby Nobbie » 11. January 2011 10:55

Squall83 wrote:Dann habe ich nur noch zwei Fragen: Wie sieht die config.php aus


Keine Ahnung - ist doch nicht meine Software!?

Squall83 wrote: und wann wird sie aufgerufen?


Am Anfang.
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04

Re: Zwei Spiele, ein Server, include-paths Überschneidung

Postby Squall83 » 11. January 2011 18:27

Ok, anders:
Die config.php soll für mich die Pfade setzen, die ich nicht in die include_paths der php.ini setzen darf. Wie macht man so was in einer php-Datei? Ich weiß, wie man einen String-Array mit den include-Pfaden anlegt, aber ich weiß nicht, wie ich dem Parser klar machen soll, dass er jedes Mal, wenn er ein include-Statement vorfindet, durch genau diese Pfade iterieren soll, um die Datei zu finden.

Außerdem weiß ich nicht, wie man diese Variable persistent macht, wenn man sie nicht gerade in die DB schreibt.

Bzgl. wann sie aufgerufen wird:
Wo genau ist dieser Anfang? Auf das Spiel greifen hunderte Spieler zu und jeder Klick, der ein Skript aktiviert, ist ein Anfang. Und für jeden dieser Anfänge gilt, dass man natürlich nicht auf Variablen zu greifen kann, die im Rahmen anderer Anfänge deklariert wurden.
Squall83
 
Posts: 10
Joined: 09. January 2011 22:12

Re: Zwei Spiele, ein Server, include-paths Überschneidung

Postby Nobbie » 11. January 2011 19:40

Squall83 wrote:Ok, anders:
Die config.php soll für mich die Pfade setzen, die ich nicht in die include_paths der php.ini setzen darf. Wie macht man so was in einer php-Datei?


Bevor wir jetzt weiter im Trüben stochern und um den heißen Brei herum reden: kannst Du überhaupt programmieren, resp. auch in PHP programmieren? An welchem Punkt müssen wir einsteigen, damit Du verstehst, wovon wir reden? Ich vermute fast, ganz bei Null. Ist das so?
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04

Re: Zwei Spiele, ein Server, include-paths Überschneidung

Postby Squall83 » 12. January 2011 06:52

In PHP habe ich Grundkenntnisse, d.h. ich hab mir mal ein Einsteigertutorial angesehen. JAVA und C++ habe ich während meinem Informatikstudium gelernt (ein Studium, in dem ich Netzwerk- und Servergeschichten immer gern aus dem Weg gegangen bin). ;) Also ich weiß, wie man OO programmiert und wie man das gescheit nach MVC macht UML-Diagrammen, Pflichtenheft und allem drum und dran. Wenn man die beiden Sprachen kann, kann man PHP zumindest lesen, verstehen und debuggen und bisher hat mir das auch immer gereicht. Jetzt wo's ans Betatesten geht... reicht es nicht mehr.
Squall83
 
Posts: 10
Joined: 09. January 2011 22:12

Re: Zwei Spiele, ein Server, include-paths Überschneidung

Postby Nobbie » 12. January 2011 10:46

Dann sollte es ja reichen, wenn Du die Funktion

http://de2.php.net/manual/en/function.s ... e-path.php

einmal genauer anschaust. Oder/und die Funktion

http://de2.php.net/manual/en/function.ini-set.php

die ebenso geeignet ist.
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04

Re: Zwei Spiele, ein Server, include-paths Überschneidung

Postby Squall83 » 12. January 2011 19:53

Damit wären wir ja wieder bei der php.ini angelangt. Heißt das, es ist zwar schlecht, projektbezogene Daten in die php.ini zu schreiben, aber es ist kein Problem, die Variablen der php.ini im Nachhinein über Skripte zu ändern?

Ich find das merkwürdig, weil wenn mehrere hundert Spieler auf beiden Systemen spielen, überschreiben sie ja andauernd den include_path. Was passiert dann, wenn zwei Skripte direkt hintereinander eine dieser von dir genannten Methoden aufrufen? Speichert sich jedes Skript irgendwo lokal die include-Pfade, damit sich die Skripte nicht in die Quere kommen können?

Schlägst du mir also vor, in jedes der vielen möglichen Anfänge zu allererst ein include(/relativer/Pfad/zur/config.php) zu setzen, in der dann ein set_include("./";"pfad1";"pfad2"; usw.) steht?

Und danke für deine Geduld. :)
Squall83
 
Posts: 10
Joined: 09. January 2011 22:12

Re: Zwei Spiele, ein Server, include-paths Überschneidung

Postby Nobbie » 12. January 2011 21:40

Squall83 wrote:Damit wären wir ja wieder bei der php.ini angelangt


Blödsinn (sorry).

Squall83 wrote:Heißt das, es ist zwar schlecht, projektbezogene Daten in die php.ini zu schreiben, aber es ist kein Problem, die Variablen der php.ini im Nachhinein über Skripte zu ändern?


Natürlich - das ist ein Unterschied wie Tag und Nacht.

Squall83 wrote:Ich find das merkwürdig, weil wenn mehrere hundert Spieler auf beiden Systemen spielen, überschreiben sie ja andauernd den include_path. Was passiert dann, wenn zwei Skripte direkt hintereinander eine dieser von dir genannten Methoden aufrufen? Speichert sich jedes Skript irgendwo lokal die include-Pfade, damit sich die Skripte nicht in die Quere kommen können?


Das ist so grausam falsch, dass es weh tut. Du hast leider doch Null Programmierkenntnisse. NIemand "überschreibt" andauernd "den" Include_Path, weil es "den" Include_Path in diesem Scope so nicht gibt. Jeder Prozess (= jeder HTTP Request) hat seine eigene Konfiguration.

Squall83 wrote:Schlägst du mir also vor, in jedes der vielen möglichen Anfänge zu allererst ein include(/relativer/Pfad/zur/config.php) zu setzen, in der dann ein set_include("./";"pfad1";"pfad2"; usw.) steht?


Ja. Das machen diese vielen möglichen Anfänge sowieso und es gibt darüber hinaus die Möglichkeit, das automatisch zu veranlassen, egal welches Script startet.

Squall83 wrote:Und danke für deine Geduld. :)


Die ist nun leider an diesem Punkt erschöpft. Ich kann definitiv nicht fehlende Programmiererfahrung ersetzen - das ist zuviel verlangt für ein Forum. Du kennst doch deutlich weniger, als ich es gehofft hatte. Das ist nichts schlimmes, das wirst Du alles sicherlich lernen - aber das ist nicht die Aufgabe des Forum (oder meine Aufgabe), Dir diese Programmiererfahrung zu vermitteln. Lies Dir in einem Jahr noch einmal diesen Thread durch, bin gespannt, was Du selbst dann darüber denken wirst. Ich jedenfalls gebe an dieser Stelle auf - das ist mir zu anstrengend und zu aufwändig für ein singuläres Problem.
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04

Re: Zwei Spiele, ein Server, include-paths Überschneidung

Postby Squall83 » 13. January 2011 09:32

Ja. Das machen diese vielen möglichen Anfänge sowieso und es gibt darüber hinaus die Möglichkeit, das automatisch zu veranlassen, egal welches Script startet.

Schade, ich müsste nur noch wissen, wie man diesen Aufruf der config.php automatisch veranlasst und das Problem wäre gelöst.
Squall83
 
Posts: 10
Joined: 09. January 2011 22:12


Return to XAMPP für Windows

Who is online

Users browsing this forum: No registered users and 37 guests