PHP Update-Funktion programmieren

  • Ersteller Ersteller Janniboy
  • Erstellt am Erstellt am
J

Janniboy

Gast
Hallo liebe Community,

ich stehe gerade vor einem kleinen Problem und komme nicht mehr weiter.
Ich habe ein System auf mehreren Servern laufen. Wenn ich nun mein Script aktualisiere, muss ich dies auf allen Servern per FTP mühselig einspielen und das wird bei steigender Zahl wirklich zeitaufwändig und nervig.

Ich habe mir nun ein Script geschrieben, was auf einem Update-Server eine TXT-Datei ausliest in der die aktuelle Versionsnummer steht und per version_compare() schaut, ob ein Update nötig ist oder nicht. Wenn nein, ist das Script an der Stelle zu Ende, wenn doch, dann geht es los.
Das Script lädt sich dann das aktuelle ZIP-Paket herunter per file_get_contents() und entpackt es in einem temp-Ordner.

Bis hier hin ist alles wunderbar, das läuft echt klasse.

Mein Problem ist nun das verschieben und ersetzen der ganzen Dateien. Wenn ich mit PHP direkt das ZIP-Archiv im Stammverzeichnis entpacke überschreibt er alles und es läuft. Auf manchen Servern allerdings läuft PHP nicht als Modul und ich bekomme immer die Meldung Permission denied!.
Nun dachte ich mir, verschiebe ich die Dateien halt mit PHP-FTP und der Funktion ftp_rename(). Doch hier ist das Problem, das diese Funktion Ordner umbenennen kann aber schon bestehende Ordner nicht überschreibt und genau das soll das Script aber machen, um alte Dateien gegen die neuen zu ersetzen.

Hat vielleicht jemand eine Idee, wie ich das in den Griff kriege?

Ich danke im Voraus!
 
Zuletzt bearbeitet: (Beitrag wieder hergestellt.)
Git repository irgendwo einrichten, auf allen Servern per cronjob auf changes im repo pollen und gegebenenfalls dann updaten (git pull). Verbindung zum repo per SSH.
 
Hey,

danke für deine Antwort!
Habe von diesen ganzen Versionierungssystemen keine Ahnung und das lohnt sich auch nicht für mein kleines Script.

Weißt du denn vielleicht, wie andere Scripts das machen, wie z.B. Joomla, Wordpress etc?
Die haben ja auch so Updater drin und laufen auch auf allen Servern.

Danke nochmals!
 
Zuletzt bearbeitet: (Beitrag wieder hergestellt.)
Janniboy schrieb:
Hey,

danke für deine Antwort!
Habe von diesen ganzen Versionierungssystemen keine Ahnung und das lohnt sich auch nicht für mein kleines Script.

Weißt du denn vielleicht, wie andere Scripts das machen, wie z.B. Joomla, Wordpress etc?
Die haben ja auch so Updater drin und laufen auch auf allen Servern.

Danke nochmals!

Die vergleichen die Versionsnummer, wenn neuer wird die ZIP Datei runtergeladen und entpackt, vorhandene dateien überschrieben.

Du willst aber nicht auf jedem server da raufklicken sondern es automatisieren, richtig?
 
blockx schrieb:
Die vergleichen die Versionsnummer, wenn neuer wird die ZIP Datei runtergeladen und entpackt, vorhandene dateien überschrieben.

Du willst aber nicht auf jedem server da raufklicken sondern es automatisieren, richtig?

Hey,

danke für deine Antwort.

Ne, das habe ich schon so weit. Ich jetzt an dem Punkt, wo ich die ZIP-Datei entpackt auf dem Server liegen habe und nun die neuen Dateien die alten überschreiben sollen. Leider geht dies nicht auf jedem Server und suche nun eine Lösung, wie ich es auf allen schaffe. Sonst kriege ich halt immer "Permission denied".

Auf Update können die Leute dann selbst oder ich mache das per Cronjob für alle Server. Mir geht es halt nur um das Ersetzen der alten gegen die neuen Dateien.

Danke!
 
Zuletzt bearbeitet: (Beitrag wieder hergestellt.)
Es ist ein bisschen schwierig zu beurteilen, wo das Problem liegt, ohne das Setup der Server zu kennen. Ich meine, wenn da permission denied kommt, warum sorgst du dann nicht für die permissions? Ist das ein root server oder hast du nur web space mit PHP oder wie sieht das aus?

Versionskontrolle lohnt sich so ziemlich immer, denn der Aufwand ist zumindest bei Git gering und du wirst es zu schätzen wissen, wenn du dir dein Script mal zerschießt und zurückspringen kannst zu einem Stand, der noch funktioniert hat.

Das Updaten der Applikation würde ich auch nicht innerhalb der Applikation machen, sondern über shell scripts (o.ä.), die daneben liegen.
 
Huhu,

Ich meine, wenn da permission denied kommt, warum sorgst du dann nicht für die permissions?
Ist ein kleiner gemieteter Webspace, wo es halt nicht mehr Rechte gibt, außer halt per FTP oder wenn ich den Verzeichnissen und Dateien CHMOD 777 gebe.

Das Updaten der Applikation würde ich auch nicht innerhalb der Applikation machen, sondern über shell scripts (o.ä.), die daneben liegen.
Ja, das würde ich gern, ist auf manchen Spaces allerdings nicht möglich. Sonst würde ich das immer so machen, da das am einfachsten ist.

Mir fehlen halt einfach die Schreibrechte, die Dateien zu überschreiben/zu verändern. Deshalb habe ich es auch schon per FTP gemacht und mich mit PHP auf den Server eingeloggt und dann versucht alles zu verschieben, doch das klappt irgendwie auch nicht, weil er nicht überschreiben kann.

Dieses Script läuft ja auf XAMPP beispielsweise wunderbar:
PHP:
<?php

error_reporting(E_ALL);
ini_set('display_errors', true);


$zip = new ZipArchive;
$res = $zip->open('test.zip');
$zip->extractTo(dirname(__FILE__));
$zip->close();

?>
Danach ist das Update drauf. Auf einem Server wo PHP als Modul läuft, klappt das aufgrund der Rechte nicht.

Warning: ZipArchive::extractTo(/www/htdocs/test/hallo/test.php): failed to open stream: Permission denied on line 9

Ich hoffe, man versteht jetzt, wo ich hänge :D

Danke euch!
 
Zuletzt bearbeitet: (Beitrag wieder hergestellt.)
Zurück
Oben