Teil von  SELFPHP
Professional CronJob-Service

Suche

International PHP Conference


WebTech Conference


:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: SELFPHP Forum ::

Fragen rund um die Themen PHP?
In über 130.000 Beiträgen finden Sie sicher die passende Antwort!  

 
PHP Summit


Software Architecture Summit


:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 
HTML5 Days


JavaScript Days


:: Qozido ::

Die Bilderverwaltung mit Logbuch für Taucher und Schnorchler.   

 
 
Download mit wget

Am Ende der Seite finden Sie das komplette Beispiel als Download.

Systemvoraussetzung

  • Linux
  • PHP 4 >= 4.2.0
  • PHP 5
  • TAR
  • GZIP

Datei(en)

wget.php

Problem


Sie kennen sicher das Problem: Sie wollen Ihr neues Forum oder eine Administrationssoftware für Ihre Datenbank installieren, und alleine der Upload aller Dateien von Ihrem lokalen Rechner auf den Server dauert eine Ewigkeit. Anhand des Datenbankadministrationstools phpMyAdmin kann man sehr schön darstellen, wie häufig vorgegangen wird.


  • Download der gepackten Software von der Homepage
  • Auf dem eigenen Clientrechner entpacken
  • Per FTP alle entpackten Dateien zum Server hochladen.

Diese Vorgehensweise ist immer noch stark verbreitet. Je nach Geschwindigkeit kann dieser Weg aber sehr lange dauern. In der Regel geht zwar der Download sehr schnell, dafür zieht sich der Upload umso länger.

Denn die Uploadgeschwindigkeit ist in der Regel sehr viel kleiner als beim Download. Zudem müssen Hunderte von Dateien per FTP hochgeladen und einzeln geprüft werden. Als Beispiel soll hier wieder phpMyAdmin herhalten. Der komplette Inhalt von phpMyAdmin umfasst insgesamt ca. 620 Dateien und Verzeichnisse.

Dieser Vorgang kann schon mal gute 20 bis 30 Minuten dauern! Stellen Sie sich aber vor, wie viel Zeit Sie sich sparen, wenn Sie den ganzen Prozess in noch nicht einmal 10 bis 20 Sekunden erledigen könnten. Das folgende Beispiel zeigt, wie es geht.

Lösung

Die Lösung heißt wget! Dabei laden wir erst gar nicht die Software auf unseren Clientrechner, sondern direkt von der Downloadseite des Anbieters auf unseren Server im Internet. Dieser Vorgang dauert nicht einmal 10 bis 15 Sekunden. Danach entpacken wir direkt die Datei und können die eigentliche Installation wie gewohnt ausführen.

Sie können das nachfolgende Beispiel ohne weiteres so umschreiben, dass es auch für PHP3 funktioniert. Sie müssen dafür folgende Funktionen austauschen:

  • md5_file(), PHP 4 >= 4.2.0, PHP 5
  • escapeshellarg(), PHP 4 >= 4.0.3, PHP 5

Anstelle von md5_file() könnten Sie die Datei mit fread() einlesen und mit md5() testen. escapeshellarg() könnten Sie gegen escapeshellcmd() ersetzen. Sie könnten das Programm auch so umschreiben, dass Sie es mit einem Webformular nutzen können, statt wie hier beschrieben nur im Quellcode. Sie sollten dann aber darauf achten, dass Sie die Datei hinter einen Verzeichnisschutz stellen. Im Kapitel „Verschlüsselung/Prüfsummen“ finden Sie ein Programm, das auch dieses Problem sehr schnell und einfach für Sie erledigt.

Wir geben zuerst den kompletten http-Link (26) zu der Datei ein, die wir downloaden möchten. Wir benötigen weiterhin den reinen Dateinamen der Datei (28), da wir diesen für die MD5-Prüfsumme und den Entpackvorgang benötigen. Sie könnten hier auch eine Routine hinzufügen, die den Dateinamen aus der URL extrahiert.

In der Regel bieten Anbieter von Softwareprodukten eine MD5-Prüfsumme (30) bei ihrem Download mit an. Diese Summe soll sicherstellen, dass es sich um die originale Datei handelt und nicht um eine geänderte Version.

Weiterhin kann man an dieser Prüfsumme bei der Überprüfung feststellen, ob die herunter geladene Datei wirklich vollständig übertragen wurde. Wir erstellen nach dem Download eine eigene MD5-Prüfsumme (40) und vergleichen (40) diese mit der Prüfsumme des Anbieters (30). Sind beide Werte identisch, handelt es sich um die Original-Datei und wurde vollständig übertragen.

Man sollte niemals ungeprüfte Formulardaten an die Shell übergeben (34), da dies ein sehr hohes Sicherheitsrisiko darstellt. Mit escapeshellarg() werden solche Variablen maskiert, damit keine ungewollten zusätzlichen Befehle ausgeführt werden können. Hier im Beispiel bräuchten wir das eigentlich nicht, da wir keine Daten übergeben bekommen.

Im nächsten Schritt übergeben wir mit exec() (34) den Shell-Befehl wget mit unserer Download-URL an die Shell, die daraufhin den Download startet und die Datei im gleichen Verzeichnis wie die ausgeführte PHP-Datei speichert.

Die Prüfsumme der Datei müssen Sie nicht berechnen, ich rate Ihnen aber dazu. Wir setzen zuerst die Variable für den Check (38) auf FALSE, also dass ein Fehler aufgetreten ist. Falls die Variable der Prüfsumme (30) nicht leer sein sollte, so überprüfen wir (40) die Variable mit der MD5-Prüfsumme der gerade herunter geladenen Datei. Sind sie identisch (40), so setzen wir unsere Variable für den Check auf TRUE (41), ansonsten geben wir einen Fehler aus.

Falls die Variable der Prüfsumme (30) leer war, können wir direkt unsere Variable für den Check auf TRUE (47) setzen, da wir keine Überprüfung vornehmen müssen.

Im letzten Schritt müssen wir die gerade geholte Datei entpacken. Dafür bereiten wir den Befehl zum Entzippen vor (53), maskieren (54) ihn wieder, um ihn dann anschließend mit exec() an die Shell zu übergeben (56). Als Rückgabewert erhalten wir eine Auflistung aller entpackten Dateien.

Sie können jetzt wie gewohnt die Installation fortsetzen. Falls es sich bei der downloadbaren Datei nicht um eine GZIP-Datei handelt, sondern vielleicht um eine BZIP2- oder ZIP-Datei, lesen Sie im Kapitel "Komprimieren/Archivieren/Backups" nach.

Dort finden Sie alle Möglichkeiten, um mit solchen Dateien ebenfalls spielend umgehen zu können. Zudem finden Sie in diesem Kapitel weitere Informationen zum Thema Zippen/Entzippen.

26:

27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
$fileURL "http://umn.dl.sourceforge.net/sourceforge/phpmyadmin/
       phpMyAdmin-2.8.0.3.tar.gz"
;

$fileName "phpMyAdmin-2.8.0.3.tar.gz";

$md5Check "1ca0b652e39010d906e3ea3a02fb9d82";

$escape escapeshellarg($fileURL);

exec("wget " $escape);

$unzip FALSE;

if(!empty(
$md5Check)){
    
    if(
md5_file($fileName) == $md5Check)
        
$unzip TRUE;
    else
        echo 
"Checksummen stimmen nicht überein!";
    
} else {
    
    
$unzip TRUE;
    
}

if(
$unzip) {
    
    
$shellBefehl "tar -xzvf $fileName";
    
$shellBefehl escapeshellcmd($shellBefehl);

    
exec($shellBefehl,$nu);

    
print_r($nu);
    
}

Ausgabe im Browser (verkürzte Darstellung)

Array
(
   [0] => phpMyAdmin2.8.0.3/
   [1] => phpMyAdmin2.8.0.3/Documentation.txt
   [2] => phpMyAdmin2.8.0.3/CREDITS
   [3] => phpMyAdmin2.8.0.3/ChangeLog
   :
   :
   :
   [614] => phpMyAdmin2.8.0.3/themes/original/img/vertical_line.png
   [615] => phpMyAdmin2.8.0.3/themes/original/info.inc.php
   [616] => phpMyAdmin2.8.0.3/themes/original/layout.inc.php
   [617] => phpMyAdmin2.8.0.3/themes/original/screen.png
)

Wie Sie gesehen haben, wurde das Problem mit wenigen Zeilen Programmcode gelöst und Sie müssen nur noch eventuelle Konfigurationseinstellungen in Ihrem neuen Programm anpassen.



 


Dieses Skript aus dem SELFPHP KOCHBUCH wurde von SELFPHP unter dem "Tarif Mc500" von McAc.net-Webhosting erfolgreich ausgeführt und getestet!

Auf der Übersichtseite unter "McAc.net – Webhosting zu diesem Buch" finden Sie weitere Informationen zu dem Webhostingpaket, dass durch SELFPHP getestet wurde.




 

Download

Info   ZIP BZIP2 TARGZ
Größe   893.00 Byte 1.05 Kilobyte 982.00 Byte

Alle Beispiele als PHP-Datei(en)

Hier haben Sie die Möglichkeit, sich sämtliche auf dieser Seite gezeigten Beispiele als PHP-Dateien direkt downzuloaden.

Umständliches Copy & Paste ist daher nicht mehr notwendig, da alle Beispiele sofort ausprobiert werden können.

Sie haben bei der Auswahl der bereitgestellten Downloads mehrere Möglichkeiten, je nachdem welches Komprimierungsverfahren Sie bevorzugen.

Zurück zur Übersichtsseite


 




:: Premium-Partner ::

Webhosting/Serverlösungen

LeaseWeb Germany GmbH weitere Premium-Partner
 

:: SELFPHP Sponsor ::

Microsoft Deutschland GmbH weitere Sponsoren
 

:: Buchempfehlung ::

Das Zend Framework

Das Zend Framework zur Buchempfehlung
 
 

Ausgewählter Tipp im Bereich PHP-Skripte


Verzeichnis rekursiv kopieren

Weitere interessante Beispiele aus dem SELFPHP Kochbuch finden Sie im Bereich PHP-Skripte
 

SELFPHP Code Snippet


Array in ein PHP5 Objekt konvertieren

Weitere interessante Code Snippets finden Sie auf SELFPHP im Bereich PHP Code Snippets
 
© 2001-2014 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt
© 2005-2014 E-Mail PHP5 Praxisbuch - Matthias Kannengiesser, m.kannengiesser@selfphp.de