ads personal photo

www bairesgirls com ar

men sex personals

cuckold men

hot fat women

local sex finder

swinging clubs in edinburgh

oregon escort service

chatear en linea

swinger clubs austin

singles in atlanta

singles womens

cake singles

yahho personals

grannys pix

swinging websites

100 free dating service

escort call girl

female swinging

lonely wife

sex dating scotland

swedish match

wife swapping picture

korean american dating

vietnamese singles

site adulte

latinos dating

sex contacts brighton

norway dating

singles websites australia

asian call girl

women having affairs

mckinney singles

dating free online site

san antonio online dating

wifeswappers

ohio state singles

mens dating

day spa for couples

dating girls online

abq singles

where singles click

dating agency birmingham

horney women video

iowa personals

black swinging

average singles

man seeking single woman

desperate housewife dvd

jacksonville swinger

single wide trailers

kinky women

dating cambridgeshire

adulfriendfinder

online dating glasgow

housewife looking for sex

swinger online

15 year old dating sites

sex phone chat

scuba singles

cheap sex phone lines

online dating sites in australia

intimate dating sites

singles colorado springs

concord singles

bozeman singles

russia woman

top sex websites

100 free dating woman

tv matchmaker

eros women

singles clubs los angeles

greek dating sites

fiber optic cable single mode

local phone chat line

dating for adults

date white men

lovers rings

sexual date

yakima singles

black singles online

swinger homepages

atlanta dating

single's bar

girls date free

dating internet services

jewish single travel

reno swinger

no registration sex chat

escort island

date girls for free

ocean state singles

native american dating service

personals bay area

country singles dating

wifes pic

local swinger

gone wild girl

most beautiful russian women

parry sound singles

Fortschrittsbalken bei einem Datei-Upload mittels PHP und uploadprogress (Pecl)

Lange wurde darauf gewartet. Und immer wieder fragten Leute in Foren, Gruppen etc. nach einer Möglichkeit,
einen Fortschrittsbalken eines Dateiuploads mittels PHP anzuzeigen.

 

Die Antwort war immer die Selbe: Das geht nicht. Das funktioniert höchstens, wenn man den Dateiupload mittels Perl/CGI realisiert.
Und wer sich davon nicht überzeugen lassen konnte, der beschrieb eine Möglichkeit, die sich logisch anhörte und bei der jeder meinte, das könnte funktionieren.
Man könne doch, per Ajax oder auch in einem extra Frame einfach mit der Funktion stat() auf die Temp-Datei zugreifen, die während dem Upload angezeigt wird und deren Größe abfragen.
Wer es dann ausprobiert hat, hat schnell gemerkt, dass es sich logisch anhört, aber nicht funktioniert.

 

PHP erlaubt den Zugriff auf diese tmp-Datei nicht. Auch wenn man herausfindet, wie der Name der tmp-Datei lautet, ist ein stat() auf diese Datei nicht möglich. Es war bisher also wirklich nicht möglich.

 

Zwischendurch kamen dann diverse Patches, die php die Uploadmeter-Funktionalität beibringen sollten.
Ich kann zu diesen Patches, die für php < 5.2 nötig waren, nichts sagen, da ich sie nicht ausprobiert habe. Aber so oder so
patcht man sein PHP natürlich nur sehr ungerne. Von PHP-Webspace der nicht auf einem eigenen virtuellen oder dedizietren Webserver läuft einmal ganz abgesehen. Da bestand so gut wie keine Chance, wenn man nicht gerade mit dem Webhoster gut befreundet war :-)

 

Ein bisschen über das, worüber ich auch schreibe gibt es hier zu sehen (incl. Patches-Version): http://bluga.net/projects/uploadProgressMeter/

 

Erleichterung brachte dann eine Meldung zu PHP 5.2. Es war wohl ein Changelog-Eintrag, der darauf hinwies, dass die Realisierung eines PHP-Upload-Meters
nun möglich sei.
Das ist auch so richtig. Allerdings scheint es nicht so simpel zu sein, wie man es von PHP kennt.
Der erste Gedanke: Bei www.php.net nach Dateiupload suchen und dann wird schon eine Funktion verlinkt sein, mit der man einfach den Fortschritt des Uploads abfragen kann.

 

Negativ. Dokumentiert wurde zu dieser PHP 5.2 Neuerung bislang nur wenig. (Oder sehr versteckt?)
Und eine Funktion, die dies “einfach” erledigt, sucht man leider auch vergeblich.

 

Nach einer Google-Recherche stößt man allerdings auf verschiedene Lösungen, die dann tatsächlich – mal mehr, mal weniger einfach zu benutzen sind.

 

Ich möchte nochmal ein bisschen auf diese Lösungen eingehen und mir bekannte Schwierigkeiten und Probleme niederschreiben.

 

Einfach nur mit PHP 5.2, ohne weiteres Zutun ist es aber, soweit mir bekannt, nach wie vor nicht möglich, ein PHP-Uload-Meter zu realisieren.

 

Eine Möglichkeit: Mit dem PECL-Modul uploadprogress
Das ist die Lösung, für die ich mich letztendlich entschieden habe und die ich vorerst beschreiben werde.

 

Vorgehen:
PECL-Modul herunterladen und installieren.

 

Auf einem Linux-System:

 

pecl install uploadprogress-beta

oder

 

cd /usr/local/src
wget http://pecl.php.net/get/uploadprogress-0.3.0.tgz
tar xvzf uploadprogress-0.3.0.tgz
cd uploadprogress-0.3.0
phpize
./configure
make
make test
make install

Es wird angezeigt, wo die Extension installiert wurde.
Meist etwas in der Art wie
/PATH/TO/PHP/lib/php/extensions/no-debug-non-zts-20060613/uploadprogress.so

 

An der Stelle ist mir nicht ganz klar, wie der eigentliche Weg gedacht ist, diese einzubinden.
Entweder man geht in das Verzeichnis
/PATH/TO/PHP/lib/php/extensions/
und legt einen Link auf no-debug-non-zts-20060613/uploadprogress.so

 

ln -s no-debug-non-zts-20060613/uploadprogress.so

oder man passt den Parameter extension_dir direkt auf /PATH/TO/PHP/lib/php/extensions/no-debug-non-zts-20060613 an:

 

extension_dir = "/PATH/TO/PHP/lib/php/extensions/no-debug-non-zts-20060613"

Sodann sucht man in der php.ini die Stelle, an der die Extensione eingebunden werden und fügt folgende Zeile dazu:

 

extension=uploadprogress.so

Nun den Webserver neu starten und am besten eine Datei info.php mit folgendem Inhalt bereit haben:

 

Beim Aufruf der der Datei sollte ein Eintrag für das Modul uploadprogress erscheinen und
uploadprogress support enabled dort stehen.

 

Damit sollte PHP bereits in der Lage sein, den Fortschritt des Upload-Prozesses anzuzeigen.

 

Nun gibt es eine Lösung von bluga.net.
Eine Demo gibt es unter http://bluga.net/projects/uploadProgressMeter/

 

Den Code für die Lösung gibt es per SVN unter http://svn.bluga.net/HTML_AJAX/UploadProgressMeter/trunk/

 

Das kann man benutzen und den Code auch nehmen, um es zu verstehen.

 

Ich habe jetzt noch eine ganz schnelle Lösung zusammengeschrieben, die auch auf einfache weise zeigt, wie die Statusanzeige funktionieren kann.
Es wird beim Abschicken des File-Formulars einfach ein neues Fenster geöffnet, das die Statusanzeige anzeigt.
Ist der Download fertig, schließt sich das Statusfenster wieder.

 

Bei großen Dateien (>8MB) werden keine Statuswerte angezeigt. Ich werde noch rausfinden, woran das genau liegt.

 

Demo: http://www.suchtwolke.de/php-upload-meter/pecl-uploadprogress/

 

Download:
http://www.suchtwolke.de/php-upload-meter/pecl-uploadprogress/pecl-uploadprogress.rar
http://www.suchtwolke.de/php-upload-meter/pecl-uploadprogress/pecl-uploadprogress.zip
http://www.suchtwolke.de/php-upload-meter/pecl-uploadprogress/pecl-uploadprogress.tar.gz

 

Probleme die aufgetreten sind:
Sollte auf dem Webserver mod_sec installiert sein, wird die Statusanzeige höchstwahrscheinlich nicht funktionieren.
Das bereitete mir einiges Kopfzerbrechen.
Ich dachte, dass die mod_sec-Filter mittels “SecFilterInheritance Off” in der Apache-Config ausgeschaltet wären. Jedoch reichte das nicht aus.
Abhilfe schaffte nur ein weiterer Eintrag: “SecFilterEngine Off”.

18 Kommentare

  1. Dave
    geschrieben am 16.07.2007 um 11:57 Uhr | Permalink

    Ich vermute mal, dass der Status von Datein > 8MB nicht angezeigt wird, da durch PHP eine Limitierung für Uploads existiert ;)
    Stichwort upload_max_filesize und post_max_size.

    Gruß
    Dave

  2. wolke
    geschrieben am 16.07.2007 um 13:47 Uhr | Permalink

    Richtig, nachdem ich die hochgesetzt hatte, het es auch mit größeren Dateien funktioniert.

    Ich werde es im Artikel bei Gelegenheit nochmal nachtragen :)

  3. Martin
    geschrieben am 16.08.2007 um 10:07 Uhr | Permalink

    Ich bekomme beim Versuch, uploadprogress zu installieren, immer ein ‘phize failed’. Wenn ich die Installation manuell durchgehe, haut er mir ein ‘-bash: phpize: command not found’ um die Ohren. Wie läßt sich das beheben, bzw. wie komme ich an phpize?

  4. wolke
    geschrieben am 16.08.2007 um 10:18 Uhr | Permalink

    @Martin: phpize ist eigentlich Bestandteil von php. Bei meiner selber kompilierten php-Version wurde es mit installiert.

    Bei mir, –prefix=/opt/php5 befindet es sich unter /opt/php5/bin/phpize

    Evtl. kannst Du mit “whereis phpize” oder “locate phpize” suchen wo das Programm liegt.

    Wenn Du es gefunden hast, entweder dieses benutzen (wie oben beschrieben bevor Du make ausführst, es in dem Source-Verzeichnis ausführen. Bei mir z.B. unter /usr/local/src/uploadprogress/ # /opt/php5/bin/phpize)
    Oder Du setzt einen Symbolischen Link von einem bin-Verzeichnis dahin:
    ln -s /opt/php5/bin/phpize /usr/local/bin/phpize

  5. Martin
    geschrieben am 16.08.2007 um 14:05 Uhr | Permalink

    Danke!
    Das Problem hat sich gelöst, nachdem ich das php5-dev-Paket installiert habe, vorher war es nicht vorhanden.

  6. Andreas
    geschrieben am 20.08.2007 um 20:48 Uhr | Permalink

    da ich aufgrund eines umstands php4 auch noch drauf habe, musste ich uploadprogress manuell installieren. aber beim letzten schritt: make install kommt folgende fehlermeldung:
    http://rafb.net/p/QydKQW47.html

    weiß jemand rat?

  7. wolke
    geschrieben am 20.08.2007 um 21:38 Uhr | Permalink

    Puh, das sieht ja unübersichtlich aus – hatte zuerst sogar Angst es anzuklicken :)

    Kannst es auch gerne hier direkt posten, wenn man dann mehr erkennt…

    Eine Idee wäre aber, dass Dein php (wenn es ein 4er ist) mit der richtigen Version gepatcht werden muss, damit uploadprogress kompiliert werden kann. Schau mal hier: http://pdoru.from.ro/ da steht etwas von patches für PHP

  8. Andreas
    geschrieben am 20.08.2007 um 21:50 Uhr | Permalink

    danke, hat sich erledigt, php5-dev hat gefehlt, tut mir leid

  9. Martin
    geschrieben am 13.12.2007 um 22:53 Uhr | Permalink

    Ich verstehe noch nicht, wie man die extension einbindet?
    Ich benutzt Debian 4.0.

  10. Whisky
    geschrieben am 25.01.2008 um 12:44 Uhr | Permalink

    Hallo zusammen.
    Das liest sich ja alles ganz prima. Danke schon mal für die gute Erklärung der Funktionsweise. Die Installation der Extension hat bei mir prima geklappt, allerdings mag mir uploadprogress_get_info() keine Daten zurückgeben. Ich habe alle wesentlichen Parameter der php.ini schon überprüft und testweise auch mal auf exorbitant hohe Werte gesetzt – ohne Erfolg. Hat jemand irgendeine Idee, was da falsch laufen könnte?

  11. Ted72
    geschrieben am 10.04.2008 um 16:46 Uhr | Permalink

    Hallo,

    hoffe mir kann hier jemand helfen. Habe die Extension wie beschrieben implementiert – phpinfo zeigt mir auch an das die extension geladen ist und soweit auf funktionstüchtig ist.

    Mein Problem:
    Tests mit den Dateien von Wolke funktionieren nicht -> das array bleibt leer, es kommen also keine Daten vom Server zurück.
    Da es auch keine richtige Dokumentation gibt kann man nicht nachvollziehen wie die Daten ausgelesen werden sollen, Schreibweise etc.
    Die Testdateien von Bluga.net habe ich mir gesparrt, da ich html_ajax nicht installieren möchte…

    Umgebung:
    Apache 2 + PHP 5.2.5 + Suhosin Patch 0.9.6.2

    bin für jeden Hinweis dankbar..

  12. wolke
    geschrieben am 10.04.2008 um 16:58 Uhr | Permalink

    Hi,
    ich bin mir unsicher, denke aber, dass es auch mit suhosin funktionieren müsste. Aber wenn Du die Möglichkeit hast, schalte es doch einmal ab und schau ob dann etwas kommt.

    Ansonsten müsstest Du noch ein paar Infos posten… Zum Beispiel: Wie groß ist die Datei die Du hochladen willst? Ggf. zu groß oder zu klein? Wenn zu klein, bekommst Du die Infos nicht mit. Sobald hochgeladen wurde, ist das array wieder leer. Ist die Datei größer als upload_max_filesize oder post_max_size, wird auch nichts angezeigt.

    Wenn es davon nichts ist, evtl. mal die entsprechenden Einstellungen aus der php.ini von suhosin posten..?

  13. Ted72
    geschrieben am 11.04.2008 um 13:18 Uhr | Permalink

    also laut einem anderen blog sind suhosin und uploadpress inkompatibel, man sollte suhosin deaktivieren.
    dies versuche ich schon den ganzen morgen. habe die .so aus dem extensiondir entfernt sowie den aufruf in der suhosin.ini. nach reboot ist suhosin noch immer aktiv :(

  14. wolke
    geschrieben am 11.04.2008 um 23:00 Uhr | Permalink

    Puh…ich werde nächste Woche auf jeden Fall nochmal checken, wie man suhosin so konfiguriert, dass es geht, oder für ein entsprechenden Verzeichnis ausschalten kann. Dass es aber bei Dir garnicht auszuschalten ist, ist merkwürdig. Bist Du sicher, dass Du die richtige php.ini bearbeitet hast? In der php.ini steht ja oben, welche benutzt wird.

    Alternativ kannst Du in der php.ini noch eintragen (unter der suhosin-include)
    suhosin.simulation=On
    Damit suhosin zwar Prüfungen vornimmt, aber nichts blockt. Vielleicht bringt es ja schon etwas.

  15. Ted72
    geschrieben am 14.04.2008 um 14:08 Uhr | Permalink

    also, mein system: suse 10.1+apache 2, php5.2.5 + zend + suhosin / plesk 8.3

    ich hatte die tage von diesem simulationsmodus gelesen und dachte ich probier das auch mal. bin dann natürlich erstmal an dem plesk-kram verzweifelt – welche ini is nun die richtige ? egal, ich habe diesen eintrag in allen inis eingepflegt -> resultat= 0!
    meiner meinung nach sollte die php.ini auch diesen eintrag kommentieren (suhosin.simulation=on), aber dem ist nicht so.
    über vhost.conf hab ich es auch probiert -> wieder nüx
    ich habe aber erfahren das das php das auf diesen server läuft das suhosin einkompiliert hat, nun dachte ich mir – okay, kompilieren wir es einfach neu (die conf der installierten version zeigt dies auch an), jedoch ist dies wirklich der letzte schritt da dies nicht mein server ist und dieser auch auf keinen fall offline gehen darf.

    ps: selbst eine deinstallation über yast brachte null erfolg ;)

  16. Raymond
    geschrieben am 20.08.2008 um 20:15 Uhr | Permalink

    beim Versuch uploadprogress zu installieren geht bis ./configure alles glatt
    danach make kommen div. Fehler
    /usr/local/src/uploadprogress-0.3.0/uploadprogress.c:126: error: ‘MULTIPART_EVENT_FILE_END’ undeclared (first use in this function)
    /usr/local/src/uploadprogress-0.3.0/uploadprogress.c:127: error: ‘multipart_event_file_end’ undeclared (first use in this function)
    /usr/local/src/uploadprogress-0.3.0/uploadprogress.c:129: error: expected expression before ‘)’ token
    /usr/local/src/uploadprogress-0.3.0/uploadprogress.c:133: error: ‘MULTIPART_EVENT_END’ undeclared (first use in this function)
    make: *** [uploadprogress.lo] Fehler 1

    kann mir jemand helfen

    Danke Raymond

  17. geschrieben am 13.05.2009 um 18:58 Uhr | Permalink

    Hi liebe Leute!
    Seit einigen Tagen schon kämpfe ich ganz hart mit der Installation von “pecl uploadprogress”. Gleich zum Anfang sei bemerkt, dass ich winXP OS verwende. Habe heute nun durch reinen Zufall diese Webseite gefunden und war echt begeistert von der einfachen Schrittweisen Erklärung – echt super job! Dennoch habe ich eine klitzekleine Frage (mag sich vielleicht doch etwas dumm anhören :-S):
    Ich benutze Drupal für meine webseite. Der von Wolke beschriebene Path (/PATH/TO/PHP/lib/php/extensions) ist daher nicht verfügbar. Der von Drupal angegebene path lautet: /www/modules/path. So habe ich dies in dem vorhandenen path installiert und nach php.ini – modifizierung nochmal alles neu krachen lassen; aber leider ohne Ergebnis :-( ! Nun habe ich meine Freunde in drupal.org um eine lösung gebete, doch leider erfolglos. Wenn jemand von Euch drupal kennt (ich benutze 6.11), das wäre echt so cool, wenn es da eine Lösung dafür gäbe!

  18. wolke
    geschrieben am 13.05.2009 um 20:16 Uhr | Permalink

    Hallo Sven,
    aber Drupal ist doch so eine Art CMS, oder? Hat das was mit der PHP-Installation zu tun?

    Aber der Path zu den Extensions kann sich natürlich unterscheiden. Ich kann Dir nicht direkt weiterhelfen. Aber eine Möglichkeit ist immer, die Logdateien (von Apache und/oder PHP) anzusehen. Wird dort versucht (vielleicht vergeblich) die uploadprogressmeter-Extension zu laden?
    Falls die Extension gelaen wird, was sagt denn der Aufruf von phpinfo() ?
    Normalerweise sollte dort schonmal uploadprogress vermerkt sein, wenn die Extension richtig gelaen wurde. Wenn das so ist, muss man mal weitersehen, wo es hängt.

1 Trackback

  1. [...] über PHP etwas wissen möchte, gehe ich hier nochmal ergänzend zu den Erklärungen in dem Artikel über die Installation und Benutzung zur Fortschrittsbalkenanzeige [...]