Das ist ganz einfach: Die autoload.php
wird mit der Ausführung von Composer automatisch für dich angelegt und kümmert sich automatisch um die Inkludierung der Dateien.
Du hast in simpelster Form in dem Verzeichnis deiner Anwendung (also per SSH, FTP, oder was auch immer dein Hoster anbietet irgendein /var/www/…/sonstwas
) irgendwo:|- index.php
|- composer.json
Mit "composer install" wird das dann zu|- vendor/
|- autoload.php
|- <verschiedene Ordner>
|- index.php
|- composer.json
Deine index.php braucht jetzt nur noch "require 'vendor/autoload.php';
" und hat dann dadurch Zugriff alle per Composer installierte Bibliotheken. Das heißt, du solltest dann genau die Beispielzeilen Code nutzen können, die in Sulphurs Readme sind.
>Ich würde einfach nur gerne wie auf der CMC-Seite sowas für meine Seite einrichten.
Das ist auch eine tolle Sache, ich will das auch bald mit Sulphur machen. Aktuell ist das noch ein stark zusammengehacktes Script, weil Sulphur noch nicht Sub-Felder aus den Referenzen auslesen kann (d.h. z.B. Spielernamen gehen noch nicht). Das will ich aber demnächst einbauen, und dann landet der ganze Code dazu hier.
>Mit "composer install" wird das dann zu [...]
Also als erstes "composer require beheh/sulphur" in den Terminal eingeben, dann die erstellte composer.json in das Zielverzeichnis kopieren / verschieben und als letztes "composer install" ausführen? Da nochmal mit beheh/sulphur oder nur install?
Und zum Verständnis, wofür wird jetzt diese composer(.phar (ich hab's ja umbenannt))-Datei gebraucht?
>Also als erstes "composer require beheh/sulphur" in den Terminal eingeben, dann die erstellte composer.json in das Zielverzeichnis kopieren / verschieben und als letztes "composer install" ausführen? Da nochmal mit beheh/sulphur oder nur install?
Nicht ganz, das sind zwei Wege um das gleiche zu erzielen.
Entweder du legst die
composer.json
per Hand an. Dann nimmst du die, die ich dir oben gegeben habe.Oder du lässt Composer die
composer.json
selbst anlegen (da kommt das gleiche bei raus). Dazu führst du erst "composer init
", und dann "composer require beheh/sulphur
" aus.Nach einem der beiden Wege führst du einfach nur noch "
composer install
" aus. Jetzt weiß Composer ja dank der existierenden composer.json
, welche Bibliotheken heruntergeladen werden sollen, du brauchst also nichts weiter anzugeben.>Und zum Verständnis, wofür wird jetzt diese composer(.phar (ich hab's ja umbenannt))-Datei gebraucht?
Die
composer(.phar)
ist das eigentliche Composer-Programm. Das kennt sich mit der composer.json aus und macht eben diese ganzen Dinge, wie vendor/-Verzeichnis erstellen, die gewünschten Bibliotheken aus require herunterzuladen und autoload.php zu erstellen.Also nochmal zusammengefasst: Composer ist das eigentliche Programm, und braucht zur eigentlichen Funktion für dein Projekt eine
composer.json
. Die kannst du entweder selbst schreiben, oder Composer für dich anlegen lassen.
Ich habe gestern composer init
probiert und dann abgebrochen, da ich nicht wusste, was ich da jeweils reinschreiben sollte. Deshalb hab ich auch gefragt, ob ich die composer.init von GitHub verwenden kann, da die Inhalte so ziemlich gleich waren. Hab dann composer require beheh/sulphur
ausgeführt und habe die daraus produzierte composer.json
in mein Hauptverzeichnis (/var/www/) verschoben (Script kommt vsl. auf die Hauptseite). Aber ok, dann nehm mal dein Beispiel weiter unten und führe dann composer install
aus.
Edit:
>Du machst also jetzt nur noch "require vendor/autoload.php" und kannst dann alle Klassen von Sulphur (oder jeder anderen geladenen Bibliothek) mit Präfix nutzen, also etwa "new Sulphur\ResponseFactory"…
<?php require("vendor/autoload.php"); ?>
, oder?Und kannst du nochmal den Teil mit dem Präfix erklären?
>Hauptverzeichnis (/var/www/) verschoben
Ich versuche bei meinen persönlichen Projekten so Miniseiten in Verzeichnisse abzukapseln - dann gibt es auf lange Sicht keine Konflikte. So entspricht das aber einfach einem riesigem Projekt, nämlich alles in deinem Webroot (geht natürlich auch).
><?php require("vendor/autoload.php"); ?>, oder?
Genau.
>Und kannst du nochmal den Teil mit dem Präfix erklären?
Das ist jetzt einfach eine Idee, die sich durchgesetzt hat: da dank Composer jetzt jeder Pakete einfach veröffentlichen kann gibt es natürlich Fälle, in denen mehrere Entwickler ihre Klassen gleich benennen (z.B. ist Sulphurs "ResponseFactory" nicht wirklich ein einzigartiger Name). Falls du jetzt mehrere Bibliotheken verwenden solltest, kannst du jetzt ganz einfach mithilfe des Präfixes festlegen, was du genau meinst. In Sulphur ist der Präfix einfach "Sulphur", das entspricht dem PHP-Namespace.
Zur Nutzung setzt du den einfach mit einem Backslash davor:
$foo = new Sulphur\ResponseFactory...
>Zur Nutzung setzt du den einfach mit einem Backslash davor: $foo = new Sulphur\ResponseFactory...
Ist doch genau das, was oben eh schon steht, oder?
>// fetch masterserver response
>$response = Sulphur\ResponseFactory::fromUrl('league.clonkspot.org');
datei.php {
include autoload
restscript
}
Mehr nicht, oder?
pi@dPi ~ $ composer install
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Nothing to install or update
Generating autoload files
pi@dPi ~ $
Aber ich sehe keinen neuen Ordner, der erstellt wurde. Hab glaube ich 2x composer.json, vllt. wurde nur beim ersten was erzeugt?
Jo. Es wurde im /home/pi/-Verzeichnis erstellt. Kann ich composer.lock und /vendor ins eigentliche Verzeichnis verschieben?
Wenn ich statt der Haupt-Adresse meine Adresse verwende, dann wird mir angezeigt, dass genau 0 Spiele laufen. Mein Server inkludiert den Haupt-Server aber es wird immer als Zahl 0 ausgegeben, auch wenn etwas auf meinem Server gehostet wird.
Außerdem wird nicht angezeigt, wenn etwas offen ist / oder etwas läuft.
Bsp:0 games are currently running.
Ein Clonk is now open!
Anbei ein paar Fehler im Log, die nur dann auftauchen, wenn mein Server im Response steht.[Sat Dec 20 13:49:07 2014] [error] PHP Notice: Undefined variable: result in /var/www/vendor/beheh/sulphur/src/FilterableList.php on line 36
[Sat Dec 20 13:49:07 2014] [error] PHP Notice: Undefined variable: result in /var/www/vendor/beheh/sulphur/src/FilterableList.php on line 36
[Sat Dec 20 13:49:07 2014] [error] PHP Fatal error: Uncaught exception 'InvalidArgumentException' with message 'Passed variable is not an array or object, using empty array instead' in /var/www/vendor/beheh/sulphur/src/FilterableList.php:50\nStack trace:\n#0 /var/www/vendor/beheh/sulphur/src/FilterableList.php(50): ArrayIterator->__construct(NULL)\n#1 /var/www/clonkserver.php(10): Sulphur\FilterableList->getIterator()\n#2 {main}\n thrown in /var/www/vendor/beheh/sulphur/src/FilterableList.php on line 50
Und wenn ich schon da bin, Umlaute werden trotz UTF-8 als Kästchen angezeigt und Spiele mit Umlauten werden auch nicht richtig dargestellt. Kann ich das irgendwie ändern? Luchs hat das doch auch in der Liga geschafft, wie?
Hast du das nicht für die CMC-Seite gebaut?
Die meisten Kommandozeilen-Tools arbeiten irgendwie mit dem aktuellen Ordner zusammen. Wenn du also composer install
in deinem Home-Verzeichnis ausführst (angezeigt im Prompt durch die Tilde ~), dann sucht es in diesem Verzeichnis nach einer composer.json und erstellt dort die Dateien. Wenn du es woanders willst, dann wechsle zuerst in den richtigen Ordner mit cd
.
Ja, aber der Code ist noch sehr viel hackiger - ich wollte das endlich mal sauber und wiederverwendbar zusammenbauen.
Ich habe deinen Post eben erst gesehen, die Fehler sollten in der Version 2.0.0 (die ich wahrscheinlich noch heute releasen werde) behoben sein. Falls es immer noch Fehler gibt hilft es, wenn du den Fehler direkt auf GitHub meldest (dann bekomme ich eine Mail), und deinen Code dazu postest. Aber wie gesagt, mit der neuen Version sollte das nochmal deutlich besser laufen (die Initialisierung ändert sich ein wenig, daher die große neue Versionsnummer).
Umlaute sind ein Featurewunsch, die werde ich demnächst konvertieren.
Naja, immer noch pünktlicher als die Deutsche Bahn. ^^
Für das Update muss ich nur in der composer.json ' "beheh/sulphur": ">1"' auf ">2" ändern, oder?
~2.0 wirds dann auch tun.
Version 2.0.0 ist nun draußen! Changelog hier.
Durch den Subsection-Access sollte nun endgültig eine Anzeige wie bei CMC nachgebaut werden können. Ich werde mittelfristig noch das alte System auf Sulphur 2.0.0 portieren und dann auf beheh/cmcgames hochladen, falls das jemand für seine Projektseite möchte.
beheh/cmcgames ist nun die Live-Version, die auch auf cmc.clonkforge.net sichtbar ist. Im Prinzip ist es ein Beispielprojekt für die Nutzung von Sulphur.
Wenn ich fragen dürfte, was ist jetzt mit "Live-Version" gemeint? Sulphur ist doch auch live.
Sulphur ist die Bibliothek. CMCGames ist die Applikation, die Sulphur nutzt, um die Referenzen zu parsen. CMCGames ruft im Endeffekt den Masterserver auf, gibt das Ergebnis an Sulphur, und filtert die Rückgabe von Sulphur nach CMC-Spielen.
Mit Live-Version meine ich einfach, davor lieferte eine unabhängige (und unveröffentlichte) Applikation die CMC-Spiele. Inzwischen liefert das wirklich CMCGames, eben mit Sulphur.
>CMCGames ruft im Endeffekt den Masterserver auf, gibt das Ergebnis an Sulphur
Sry dass ich so blöd frage, aber kann dann Sulphur nicht mehr alleine den Masterserver aufrufen?