Antworten auf deine Fragen:
Neues Thema erstellen

Versionsnummer einer PHP-Datei - wie handhabt Ihr das?

lachender_engel

Aktives Mitglied

Hallo, Zusammen.

Es geht mir um eine praktische Frage rund um das Thema "Versionsnummer einer Datei".
Unter z.B. C++ habe ich einer Datei immer eine Versionummer verpasst. Das führe ich bei meinen PHP-Projekten weiter. In jedemProjekt gibt es eine Übersicht aller PHP-Dateien mit Versionnummern.
Bisher pflege ich diese Nummern -a us meiner Sicht - sehr kompliziert, da sie Bestandteil des Dateinamens sind - also zum Beispiel mysql_3_3_4_0.lib.php
Analog dazu gibt es eine Konfigurationsdatei in der alle aktuellen Dateinamen enthalten sind damit innerhalb des Projektes auch immer auf die richtige Datei zugegriffen wird. Zum Beispiel:
PHP:
/* Dateinamen in Konfig-Datei*/
$mysql_lib = "mysql_3_3_4_0.lib.php";

/* Aufruf in PHP-Datei */
include_once ($mysql_lib);
Mittlerweile finde ich die Pflege zu aufwändig, da ich auch mit anderen "Freien" an Projekten arbeite und wir angefangen habe mit Github Repositories aufzubauen.

Nun meine Frage an Euch: Wie handhabt Ihr das mit den Versionsnummern der Dateien?
Idealer Weise suche ich so etwas wie einen "Header" (ähnlich wie bei Wordpress) in dem ich dann etwa so etwa eintrage:
PHP:
<?php
/* Dateiheader
Filename: mysql.lib.php
Version: 3.4.4.0
Last Modify: 29.04.2013 12:14
Last User: Mister Lister
*/
?>
Doch wie lese ich die Versionsnummer aus um sie entweder auszugeben oder in einer anderen Datei zu prüfen (z.B. ob eine Mindestversion vorhanden ist)?

Gibt es dazu z.B. mittlerweile irgendwelche "Standards"?

Es geht mir also darum einer Datei direkt eine neue Versionsnumer zu verpassen und diese auch verwenden (z.B. prüfen) zu können ohne an noch mehr Dateien Änderungen vornehmen zu müssen.
Hat da jemand eine Idee?
 

Duddle

Posting-Frequenz: 14µHz

AW: Versionsnummer einer PHP-Datei - wie handhabt Ihr das?

Sowas läuft, soweit ich weiß, unter der Bezeichnung "Dependency Management". Das Grundprinzip dabei ist immer, dass irgendwo Metadaten über Version und Abhängigkeiten geführt werden, die dann zu einem bestimmten Zeitpunkt gegeneinander geprüft werden.

Persönlich habe ich keine Erfahrung damit, aber wenn du danach googlest wirst du wahrscheinlich bei Maven oder Composer landen. gibt einen kurzen Überblick über das Thema.

Wenn es dir reicht, in deinen Dateien selbst zu prüfen ob die eingebundenen Bibliotheken ausreichend sind, könnte dir diese Antwort auf eine Stack Overflow-Frage hilfreich sein.
Ansonsten kannst du natürlich auch einen Header einführen wie in deinem Beispiel. Das Auslesen per file_get_contents() und preg_match() ist ja kein Ding. Zum Vergleichen bietet sich version_compare() für dein Versions-Schema an.


Duddle
 

DoctorG

Aktives Mitglied

AW: Versionsnummer einer PHP-Datei - wie handhabt Ihr das?

Hm, dieses Pflegeverfahren erscheint mir auch sehr aufwendig. Zudem drohen bei mehrfacher Führung (Dateiname, Dateiheader und in einer Tabelle o.ä.) zwangsläufig irgendwann Inkonsistenzen (ein Datum oder zwei lügt/lügen, weil bei irgendeinem Update eines nicht korrekt mitgezogen wurde).

Versionierung ist heute tatsächlich am besten eine Toolsache, und keine (manuelle) Dateisystem-Sache sowie keine (manuelle) Tabellenpflege. Einen interessanten Kandidaten hast Du mit Git ja auch schon im Blick. Es gibt noch Mercurial, HG und Subversion im Open Source-Bereich sowie den Team Foundation Server von Microsoft, der ebenfalls einen guten Job macht sowie in einer kostenlosen Express-Variante mit Cloud-Speicher zu haben ist.
Git ist momentan das am schnellsten wachsende dieser Systeme.

Man legt einen "Zustand" mit allen Dateien im Projekt an und allen Dateinamen, so wie sie sein sollen (ohne komische Helferli im Dateinamen wie dem Datum oder einer Versionsnummer). Nach erhaltenswerten Änderungen an Dateien macht man ein Update davon (check in/commit/add - blöderweise ist mit der Menge der Tools auch das Vokabular explodiert - die konzeptionell gleichen Operationen heißen nun jeweils anders) und schreibt im jeweiligen Tool möglichst einen Kommentar dazu.
In den Betrachtern dieser Tools kannst Du nun - bei Bedarf - Zustand für Zustand die ganzen eingecheckten Zustände ansehen, wiederherstellen etc.
Zusätzlich kannst Du auch mehrere "Zweige" parallel führen. Etwa wenn Du für Deine laufenden Projekte bestimmte Dateien gleichzeitig nachpflegen musst (WIN/MAC/LINUX, 32-bit/64-bit, falls 5.2/5.3/5.4 etc.).
Wenn Du den Zustand in den Dateiheadern gespiegelt/übertragen haben willst, dann gibt es dafür Variablen, in die die Versionssysteme so etwas automatisch eintragen können. Und dann - wenn es aus einem übergreifend synchronisierenden System kommt - ist es auch ok.

Für die genauen Handgriffe muss man sich für das Tool der Wahl wohl oder über durch eine der Anleitungen durcharbeiten. Und: nimm Dir Zeit, diese Multi-Dimensionalität, die Dateien durch Versionierung plötzlich implizit haben, ist auch für Entwickler anfangs zumindest gewöhnungsbedürftig. Auch Git-Liebhaber räumen ein, dass sie einige Wochen, teilweise auch Monate gebraucht haben, um die Konzepte wirklich zu verinnerlichten. Nichts desto trotz: wenn man Software entwickelt (auch Hobby-mässig), gehören solche Systeme heute dazu, wie das Wissen um Sommer- und Winterreifen, wenn man autofahren will.
 

lachender_engel

Aktives Mitglied

AW: Versionsnummer einer PHP-Datei - wie handhabt Ihr das?

Danke, Duddle. Den Begriff "Dependency Management" kannte ich in diesem Zusammenhang noch nicht. Nach dem ich mich da durchgesucht habe, denke ich auch nicht, dass es das ist, was ich suche.
Die Abhängigkeit der Versionen muss ich direkt, hin und wieder, im Projekt selber prüfen.

Weiter hilft mir da eher der zweite Absatz Deiner Antwort.
Ich überlege mal, ob ich das mit Meta-Tags im Header mache und diese dann - wie von Dir vorgeschlagen - aus der Datei auslese oder, was mir im Moment besser gefällt, mit dem PHP-Befehl define() die Parameter direkt an den Anfang der PHP-Datei setze.
Muss mir mal die Vor- und Nachteile überlegen...
Danke erst mal für den Gedankenaustausch!
 
Zuletzt bearbeitet:

lachender_engel

Aktives Mitglied

AW: Versionsnummer einer PHP-Datei - wie handhabt Ihr das?

Danke, DoctorG. Git und die anderen Tools bringen leider nicht das, was ich brauche. Denn ich MUSS die Versionsnummer in den Dateien mitführen. Wie zum Beispiel in C#; Da kann ich bei jedem Kompilat die Versionsnummer erhöhen lassen. Das passiert automatisch.
Die Versionierung mit Git, Subversion, etc. führt eigene Versionen anhand der Dateibestände. Aber nicht als Versionsnummer in der Datei. Daher hilft mir das nur begrenzt.
 

DoctorG

Aktives Mitglied

AW: Versionsnummer einer PHP-Datei - wie handhabt Ihr das?

Dependency Management ist ein etwas anderes Thema. Es geht dabei eben um Dependencies (Abhängigkeiten). Versionierung betrifft hingegen Dateien - auch dann, wenn es gar keine Abhängigkeiten gibt und ich einfach nur die Schritte meiner Arbeit behalten möchte. Es ist ja Wesen der Entwicklung, dass Ideen in den Code gelangen und womöglich auch wieder rausfliegen. Trotzdem ist ja die eine oder andere Idee nicht per se schlecht gewesen - sie hat womöglich nur im aktuellen File oder Projekt nicht gepasst.
Dann guckt man eben in der Historie nach, wenn man weiß, dass man eine Lösung wie gerade im Stirnlappen schon einmal wo hatte.

Das Dependency-Ding ist eher das Gegenteil: ich habe produktiv laufendes Zeug und muss vor Änderungen möglicherweise herausfinden, was ich wo zerschlage, wenn ich irgendeine Funktion ändere und der Kunde die aktualisierte Datei bei sich einspielt.
 

lachender_engel

Aktives Mitglied

AW: Versionsnummer einer PHP-Datei - wie handhabt Ihr das?

Also, jetzt weiß ich wieder warum ich das mal mit den Dateinamen eingeführt habe: Weil nicht jede Datei in einem Projekt eine PHP-Datei ist :-/
So konnte ich zum Beispiel auch Bilder, Pearl- und PDF-Dateien "versionieren"...
Hmh, das geht mit define() oder 'nem Header in der Datei so natürlich gar nicht.
*grübel*
 

Duddle

Posting-Frequenz: 14µHz

AW: Versionsnummer einer PHP-Datei - wie handhabt Ihr das?

Ich bin mir nicht ganz sicher, warum du das mitführen willst / musst. Es wurde ja schon angesprochen, dass du mit einem VCS automatisch nachvollziehen kannst welche Version vorher oder nachher kam (und nebenbei auch, wer was wann geändert hat).

Ansonsten musst es eben extern speichern, in einer DB oder einer normalen Datei.


Duddle
 

DoctorG

Aktives Mitglied

AW: Versionsnummer einer PHP-Datei - wie handhabt Ihr das?

Denn ich MUSS die Versionsnummer in den Dateien mitführen. Wie zum Beispiel in C#; Da kann ich bei jedem Kompilat die Versionsnummer erhöhen lassen. Das passiert automatisch.
Die Versionierung mit Git, Subversion, etc. führt eigene Versionen anhand der Dateibestände. Aber nicht als Versionsnummer in der Datei. Daher hilft mir das nur begrenzt.
Hochzählen bei C# - klar, in den Dateien - (Header) verstanden ... in den Dateinamen bleibt mir aber seltsam - verstehe ich Dich da richtig? Bei .NET war doch die große Sache, dass im GAC mehrere Versionen einer Datei gültig sein können und der Aufrufer sich seine eben raussuchen muss (im Gegensatz zu früher, wo irgendeine DLL, die eben die erste im System-Pfad war, einfach genommen wurde). Diese vbrun30-, vbrun40- etc.-Nummer wurde doch damit (Tragen einer solchen Nummer im Kompilat, nicht mehr im Dateinamen) eigentlich gelöst.

Bilder und PDFs kannst Du als Binary auch versionieren (würde ich mit Bildern wie Icons in einem Projekt machen - sowas verändert sich ja womöglich ebenso wie Code, nicht mit DEM Foto-Ordner - dafür ist es nicht gemacht und gedacht, versteht sich ...). Weißt Du aber vermutlich. Hab wahrscheinlich das Problem noch nicht erfasst.
 

lachender_engel

Aktives Mitglied

AW: Versionsnummer einer PHP-Datei - wie handhabt Ihr das?

Schlussendlich geht es bei mir um die Minimirung von Support-Anfragen. Ich habe ein Projekt das sehr oft installiert ist und fast immer nur manuell aktualisiert werden kann (da der Server ohne INet-Zugriff auskommen muss - aus Sicherheitsgründen).
Es hat sich am Anfang herausgestellt, dass User Fehler beim Update machen bzw. Dateien an den falschen Ort oder gar nicht kopieren. Wir hatten da seher häufig das Problem herauszufinden welche Datei aktuell ist oder welche fehlt. Erschwerend kam hinzu, dass wir remote nicht auf die Server kamen und so im Blindflug die Ursachen finden und vom User beheben lassen mussten.
Zudem gibt es Funktionen die erst ab bestimmten Versionsnummern möglich sind und mit dem Lizenzschlüssel aktiviert werden. Dieser prüft bei aktiverter Funktion ob überhaupt die benötigte Datei die richtige Version hat. Wenn nicht, kommt eine Meldung mit Updatehinweis. Da die Web-Applikation modular aufgebaut ist, lässt sich auch nicht immer vorgeben, dass alle Dateien kopiert werden.
Also haben wir die Versionsnummern im Dateinamen eingeführt und ein Skript geschrieben dass zwischen Soll und Ist geprüft und den User auf den Fehler aufmerksam gemacht hat. Und das hat das Supportaufkommen in dem Bereich um 90% gesenkt.

Dank der Denkanstöße habe ich es jetzt wie folgt gelöst: Versionsnummern werden weiter im Dateinamen vorgehalten. Beim Aufruf der Applikation scannt eine Funktion das Verzeichnis und erstellt sich selber eine Liste der vorhandenen Dateienamen und Versionsnummern und schreibt die in die Session.
Dadurch spare ich mir das Pflegen der Konfiguationsdatei mit den Dateinamen im Projekt und ändere die Versionsnummer der Datei nur im Dateinamen. Im Code kann ich die Session-Variable abfragen.
Simpel und sehr effektiv - Das müsste ich mir patentieren lassen ;-)

Danke für den (für mich ;-)) sehr hilfreichen Austausch.
 

Curanai

Aktives Mitglied

AW: Versionsnummer einer PHP-Datei - wie handhabt Ihr das?

Hallo, tut mir leid, wenn ich hier mal was angrabe, aber ich bin verwirrt ... :p ... und dann muss ich immer wirre Rückfragen stellen (zuviel Sesamstraße mit "wer nicht fragt, bleibt dumm").

Du sprichst in der Theorie anfänglich von C#, zeigst PHP-Code und sprichst von "installierter Applikation" ... das ist mein kleines Einstiegsproblem.

Folgende Randnotiz von mir, der viel mit PHP, jQuery und JavaScript unterwegs ist: Versionierung im Dateinamen sollte eine Tugend sein, wer sich Supportantworten wie "Drücken Sie im Browser mal STRG + F5!" aufgrund Caching ersparen möchte! Caching ist gut und im immer mehr vordrängenden Mobilsektor immens wichtig. Aber genauso wichtig die Weiterentwicklung, Optimierung etc. Natürlich könntest Du eine htaccess reinwerfen, die das für Dich "automatisch" macht, aber Entwicklung passiert nicht "alle 14 Tage neu abholen".

Ich verwende hier einen eigenen bspw. JavaScript-Loader, der mir per Aufforderung das Script - mit aktueller Versionsnummer - in eine Seite reinschreibt, wo diese benötigt wird. Die Idee ist auch so simpel und effektiv, dass da auch ein Patent zu gehört. ;) Demnach habe ich alles zentralisiert - ändert sich daher bspw. die jQuery von 1.9.1 auf die nächste Version, ändere ich an einer Stelle, alle Seiten nehmen die neue Datei, gzip liefert die neue aus, alle Browser und Proxies erkennen den neuen Krempel ... voila - schöner kann ich nicht ausliefern. Der Folgeaufruf liefert dann die 304 (not modified) für so eine Datei ...

Wenn Du alle "zwingen" willst, dass neue Sachen ausgeliefert/angezeigt werden, könntest Du auch den unästethischen timestamp hinter die Dateiendung - getrennt von einem ? - setzen ... aber wirklich nur "für den Moment" (keine Dauerlösung und nicht cachbar).

Meine innere Stimme sagt was von "> 25 KB konnte das iPhone" damals nicht ... die Dateien werden alle wieder entfernt ... bedenke also auch die Größen Deiner zugeführten Dateien.

Versionierung im PHP hingegen läuft bei mir - zugegeben - "dirty". Alter Bereich wird mit Datum/Uhrzeit auskommentiert - neuer Bereich mit gleichen Angaben und Hinweisen auf Änderungen gegenüber der alten Version werden freigegeben. Je nach Bereich auch direkt mit eigener Version im Namen selbst (nein, ich muss dann nicht quer durch alle Seiten und eine Nummer ändern - das ist mit einem eigenen callScript() wieder "anders" gelöst).

Und: Bei Applikationsstart würde ich "bei mir" (!) nicht die Verzeichnisse auslesen lassen - das dauert deutlich zu lang (sehr umfangreich). Eleganter fände ich hier einen "on-demand"-Befehl seitens User ... noch eleganter: Es gibt eine "Liste" (XML, JSON, Text, ...) mit aktuellen Modulen/Versionen, welche 2x geladen wird: Soll (von euch) und Ist (bei Kunde). Dadurch müssten nur eure Klassen, Methoden etc. versioniert sein.

Das aber nur am Rand - und warum ich subversion o. ä. nicht nehme? Ich krieg es partou nicht zum Laufen hier ... *örks* (soll keinen Hilferuf darstellen!)

IMO ist eine Versionierung, die selbst schon mehrere Versionen alt ist, aber die deutlich bessere Wahl als meine eigene Individuallösung - erst recht, wenn auch noch mehr als eine Person an einem Projekt werkelt oder die böse UV Änderungen vornimmt.

Mit den erstmals sonnigsten Grüße aus meiner Region. *wohoooo*
 

Duddle

Posting-Frequenz: 14µHz

AW: Versionsnummer einer PHP-Datei - wie handhabt Ihr das?

Der Knackpunkt ist
Ich habe ein Projekt das sehr oft installiert ist und fast immer nur manuell aktualisiert werden kann (da der Server ohne INet-Zugriff auskommen muss - aus Sicherheitsgründen).
Da können deine Update-Routinen noch so schön sein; wenn der Server nicht nach draussen kommunizieren kann muss das vor Ort verglichen und mglw. manuell korrigiert werden.

Und: Bei Applikationsstart würde ich "bei mir" (!) nicht die Verzeichnisse auslesen lassen - das dauert deutlich zu lang (sehr umfangreich).
Die Applikation wird wohl etwas sein, dass nur 1x gestartet wird und dann den Arbeitstag lang läuft (wie eine Desktop-Anwendung). Dann sind einmalig 10 Sekunden mehr kein Beinbruch.


Duddle
 

Curanai

Aktives Mitglied

AW: Versionsnummer einer PHP-Datei - wie handhabt Ihr das?

Zwei Knackpunkte, duddle, die nicht böse gemeint sind ...

1. Es war eine Randnotiz von mir und "aus meiner Welt"; quasi ein "so ist es woanders gelöst" - denn die Funktion (hier bei mir - Achtung!) lässt sich auch auslesen, wodurch ich die Versionsnummer von JavaScript und CSS bekomme.

2. Das war ein Konjunktiv - gezielt mit "würde" (aber klein geschrieben) formuliert. Auch das "bei mir (!)" hat da schon seine Daseinsberechtigung. Ich schreibe es gern nochmal: Mir ist nicht klar, was da "installiert" ist und was da letztendlich für ein Typus (Desktop-alike?) läuft ... auch Du, duddle, spekulierst lediglich (= "wird wohl").

Aber vielleicht erlaubt ihr noch eine weitere Randnotiz: Um mit Google besser zu arbeiten, haben die Seiten, die in der späteren Sitemap auftauchen sollen, eine "Markierung" im PHP-Teil (nebst Faktor etc.), welcher dann natürlich bei Sitemap-Erstellung auch ausgelesen wird. Hat eine Seite keine Markierung, taucht diese in der Sitemap auch nicht auf. Auch das wäre zum Mitführen einer Versionsnummer für späteren Abgleich denkbar - das Spiel ließe sich noch weiter treiben (Kommentarzeile je bspw. class, function). Es kommt drauf an, wie präzise die Antwort zu sein hat.

Ansonsten gebe ich Dir recht mit den einmaligen zehn Sekunden ... aber auch wieder nicht, wenn es nicht so ist. ;)
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.613
Beiträge
1.538.346
Mitglieder
67.524
Neuestes Mitglied
BSKGA
Oben