Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

[PHP] auto-update

ANNErd
10 antwoorden
  • Ik ben momenteel een systeem in PHP aan het bouwen dat nu lokaal gedraait wordt. De "klant"/opdrachtgever zal hetzelfde doen als ik een eerste release uitgeef.
    Ik zou het mooi vinden als ik een auto-update systeem in zou komen. Hij moet dan dus contoleren op mijn server(tje) aanstaat en of er een nieuwe versie beschikbaar is,en indien ja, die downloaden en uitpakken/instaleren.

    Hoe zouden jullie dit technisch aanpakken?
    Hoe legt hij bijv verbinding met mijn server(tje)?
    Hoe controleerd hij op nieuwe versies?

    PS: Dit is geen SR. Ik vraag om hulp bij het technisch invullen van systemen, maar de code kan ik zelf wel schrijven…
  • Op je server een tekstbestand (version.txt ofzo) aanbieden, en die laten downloaden lezen. In dat tekstbestand zet je dan het huidige versienummer. En dan zoiets:
    [code:1:a53cefb166]
    if ($newversion > $oldversion) {
    echo 'Er is een nieuwe versie beschikbaar.';
    } else {
    return false;
    }
    [/code:1:a53cefb166]
  • …en dan moet in dat bestand ook een naam staan van het zipbestand met de update, neem ik aan, of zou jij dat anders oplossen. Ik zou namelijk een array kunnen serializen met daarin het versienr en bestandsnaam vd zip.

    Hoe onderdruk je dan de fout die optreedt als mijn server uitstaat?
  • Als je per sé met PHP en ZIP aan de slag wilt, bedenk dan wel dat alle gebruikers dat moeten ondersteunen.

    Je zou het pad naar het ZIP-bestand ook kunnen opnemen, en dan via een linkje aanbieden, of moet het écht helemaal automatisch? Dan krijg je het probleem dat je niet op de eigen server blijft, maar via het internet te werk gaat. Dat is lastiger met PHP.
  • ZIP: ik heb een script al die zipjes kan uitpakken… daarvoor is bij de klant dus geen winzip of winrar (of anders) nodig
    het mooiste zou zijn als het automatisch gaat, zodat er bij de klant zo min mogelijk mis kan gaan…
  • Volgens mij werken dingen als fopen() en headers niet lekker via internet. Misschien dat het kan via een FTP-server waar je de updates op zet, maar wacht eerst even de antwoorden van PHP-kenners af. :)
  • Ik doe iets gelijkwaardigs, maar het tekstbestandje met de versies, etc. en de nieuwe versie staan op mijn Home Page.
    Het programma bij de gebruiker maakt 1 minuut na het opstarten verbinding met mijn Home Page en downloadt het bestandje versions.dat.
    Vervolgens vergelijk het programma het versienummer uit het tekstbestandje met het eigen versienummer. Is er een nieuwe versie, dan wordt die gedownload, het lopende programma gestopt en de nieuwe versie geïnstalleerd.
    Tekstbestand
  • Je kunt bijvoorbeeld een php scriptje maken op je server waarmee de clients kunnen kijken of er een nieuwere versie is. Dan denk ik aan zoiets:
    [list:ccb2cbcf99]
    [*:ccb2cbcf99] Client wil weten of er een nieuwe versie is (1x per week of zo).
    [*:ccb2cbcf99] Client vraagt http://update.jouwserver.com/update.php?currentversion=1&app=mijnprogramma op. Dit kan de client gewoon doen met fopen.
    [*:ccb2cbcf99] Indien er een update beschikbaar is antwoord de server met de url van de update.
    [*:ccb2cbcf99] De client download het door de server gegeven bestand.
    [*:ccb2cbcf99] De gedownloadde update wordt uitgepakt en in een aparte map geplaatst. De update kan bijvoorbeeld een tarball (.tar) zijn. Dit is een vrij eenvoudig bestandsformaat en die kun je met deze class uitpakken (geen extra php-modules nodig): Pear: Tar file management class. Meer info over tar: Wikipedia: tar (file format)
    [*:ccb2cbcf99] Pas als alles in orde bevonden is zal de client de oude bestanden backuppen en vervolgens overschrijven met de nieuwe bestanden. Zo kun je in het geval van een niet werkende installatie toch altijd een "rollback" uitvoeren naar de oude installatie.
    [*:ccb2cbcf99] En klaar!
    [/list:u:ccb2cbcf99]
    Er zijn zeker een aantal dingen waar je over moet nadenken. Moet je een digitale handtekening van de server controleren? Hoe zorg je ervoor dat tijdens het updaten niemand het systeem gebruikt? Denk ook aan schrijfrechten dat het update-script op de client moet hebben en de mogelijke veiligheidsrisico's.
  • ik heb dit lopen brainstormen:
    [quote:c807438b58]Een serialized bestand maken, met steeds "naam", "timestamp", "nr" en "bestanden". Voor het invoersysteem een mapje maken, dan een form die verzameld welke bestanden het zijn en waar je zelf naam en nr kan ingeven, vervolgens de bestanden in een algemene map wegschrijven. Er kan dan aan de hand van timestamp-vergelijk een update-zipje gemaakt worden met alle bestanden die bij de client down-to-date zijn[/quote:c807438b58]Zou dit kunnen, in combinatie met wat de SHARK voorstelde?
  • [quote:b8f7b0ee91="ANNErd"]ik heb dit lopen brainstormen:
    [quote:b8f7b0ee91]Een serialized bestand maken, met steeds "naam", "timestamp", "nr" en "bestanden". Voor het invoersysteem een mapje maken, dan een form die verzameld welke bestanden het zijn en waar je zelf naam en nr kan ingeven, vervolgens de bestanden in een algemene map wegschrijven. Er kan dan aan de hand van timestamp-vergelijk een update-zipje gemaakt worden met alle bestanden die bij de client down-to-date zijn[/quote:b8f7b0ee91]Zou dit kunnen, in combinatie met wat de SHARK voorstelde?[/quote:b8f7b0ee91]

    Ik denk dat je beter kunt werken met hele releases in één bestand dan alle afzonderlijke bestanden apart bij te houden. Je kunt dan alle bestanden vervangen door de bestanden in de nieuwe release ook al is er misschien in sommige bestanden niets veranderd. Zie de quote in de signature van Chris Kruidenier: "Everything should be made as simple as possible, but not simpler." :D

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.