PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : wget mit Kontrolle ob alles komplett geladen wurde


sysop
07.06.2013, 12:23:34
Ich möchte regelmässig mit einem PHP-Script eine Zip-Datei per wget herunterladen, die Datei kann unterschiedliche Grössen haben. Die Datei wird dann entpackt und weiter verarbeitet.

Nun möchte ich sicher sein, dass die Datei komplett geladen ist, bevor ich den nächsten Schritt mache, da steckt mein Problem!
wget generiert ja keine wirkliche Ausgabe und mit passthru($cmd) bekomme ich keine Anzeige.

Eine spontane andere Idee wäre:
Zuerst die md5 Prüfsumme zu laden und mit dem Download zu vergleichen, erst bei Gleichheit nächster Schritt. Das gefällt mir aber nicht, da ich ja praktisch in einer Schleife die Prüfsumme errechnen müsste.

Kennt jemand eine vernünftige Möglichkeit die Vollständigkeit eines Downloads zu prüfen um im Script weiter machen zu können, also die weitere Verarbeitung zu starten?

Ckaos
08.06.2013, 10:07:37
Hi,

PHP-Script eine Zip-Datei per wget herunterladen
Hmm, also entweder lade ich die Datei mit PHP-Bordmitteln z.B. file_get_contents
oder ich machs gleich per Batch!

Ich halte nix von exec !

MfG

CKaos

sysop
10.06.2013, 09:03:16
Hallo

Das ist ja nicht eine Frage, ob es einem gefällt oder nicht.
file_get_contents() unterliegt den Beschränkungen der php.ini (Memory) und ob das geeignet ist, eine Binärdatei zu laden, darüber kann man diskutieren. Mal abgesehen davon dauert es länger....

Batch/Shell würde bedeuten, ich muss einen SSH-Zugriff auf den Server haben, das kommt aber nicht in Frage. Starte ich ein Shell-Script aus PHP heraus, habe ich letztendlich das selbe Problem wie jetzt.

Was bleibt ist exec.

Tatsache ist, dass der Download funktioniert, aber kontrolliert werden soll, ob er bereits erfolgreich beendet ist!

Xor
12.09.2013, 13:36:35
Hi

wget generiert ja keine wirkliche Ausgabe und mit passthru($cmd) bekomme ich keine Anzeige.
Warum generiert wget keine Ausgabe? Bzw. warum ist dir der Rückgabe-Wert nicht genug?

Rückgabewerte von wget:
http://www.gnu.org/software/wget/manual/html_node/Exit-Status.html

Du könntest also z.b.

passthru("wget ....",$returnValues);
if($returnValues[0] == 0)
{
.....vlt trotzdem md5?....
}


Wenn du wirklich mit der ausgabe von wget arbeiten willst musst du exec verwenden und versuchen wget dazu zu bringen, das rauszuschreiben, was du brauchst.
z.B.: wget -q -S, und dann den Server-Code parsen

Lg

Ckaos
12.09.2013, 14:10:30
Hi,

Das ist ja nicht eine Frage, ob es einem gefällt oder nicht.
Richtig, ich benutze es einfach nicht! Ich benutze ja auch nicht nur PHP oder versuche mit PHP alles anzusprechen / zu kontrollieren. Mir fallen auch nur 1-2 Situationen ein wo ich mir im entferntesten vorstellen könnte es benutzen zu wollen.

file_get_contents() unterliegt den Beschränkungen der php.ini
Ich lade damit ja auch keine 100mb Dateien :/

Batch/Shell würde bedeuten, ich muss einen SSH-Zugriff auf den Server haben
Wo ist das Problem?
Starte ich ein Shell-Script aus PHP heraus, habe ich letztendlich das selbe Problem wie jetzt.
Nein per Cron und der holt sich die Infos aus der DB welches das PHP Script kontrolliert.

Ich habe anscheinend eine andere Vorstellung was man mit PHP umsetzt ;)

Viel Erfolg noch.

MfG

CKaos

sysop
12.09.2013, 17:41:19
Batch/Shell würde bedeuten, ich muss einen SSH-Zugriff auf den Server haben
Wo ist das Problem?

Dass Problem liegt darin, dass ich keinen Zugriff auf meinen Server an Fremde hergebe ;-)

Das Script wird von (mir vollkommen unbekannten) Leuten ausgeführt, denen ich ein Online-Update für ein Open Source PHP-Projekt zur Verfügung stelle.

Das Problem ist aber mittlerweile keines mehr, da ich mir nun doch eine Kontrollroutine geschrieben habe, die die MD5 Summe vergleicht und so den kompletten Download vor der Weiterverarbeitung sicher stellt.
Natürlich prüfe ich vorher, ob wget überhaupt installiert ist...

Aber danke nochmal.