php.ini Fehler? Nextcloud Upload von 3GB scheitert

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo mal wieder,
    vor einigen Tagen habe ich meine private Nextcloud eingerichtet und bin soweit auch zufrieden damit. Allerdings scheitert es immer wieder daran eine Datei hochzuladen die 2,8GB groß ist. Ich kann anhand der Benutzeroberfläche nicht genau nachvollziehen voran es scheitert. Der Client von dem aus ich die Datei hochladen möchte versucht auch immer wieder die Datei hochzuladen.

    Ich vermute mal, dass der Upload an der php.ini des Apache Servers scheitert aber ich weiß nicht welchen Wert ich ändern müsste. Ich habe bisher nur die Werte post_max_size und upload_max_filesize auf jeweils 4096M erhöht.

    Habt ihr einen Rat, woran der Upload scheitern könnte?

  • php.ini Fehler? Nextcloud Upload von 3GB scheitert? Schau mal ob du hier fündig wirst!

  • Es geht auf dem Raspberry nicht aufgrund von Software-Limitierungen. Ums genauer zu erklären: Die verbreitetste Linux-Distribution ist Raspbian 32bit. Die 32bit-Version von PHP hat z.T. massive Probleme, Dateien zu bearbeiten, die größer als 2 GB sind.

    Eine einfache Lösung des Problems gibt es da nicht. Wenn du einen Raspberry Pi 3 hast, könntest du eine Linux-Distribution verwenden, die auf 64bit-ARM fußt - meines Wissens gibts da für den Raspberry allerdings nur ArchlinuxARM: Archlinux unterscheidet sich im Aufbau schon sehr deutlich von Raspbian und ist generell nicht gerade die anfängerfreundlichste Distro...

  • Es gibt für den PI eine 64bit Version vom Suse-Linux.

    Aber die Größe der Datei, die auf ein anderes System kopiert wird, sollte mit der 'Bitbreite' des Prozessors nicht viel zu tun haben.
    Es wird wohl schon eher ein Timeout vom PHP sein, dass den Prozess abbricht.

    Schieb' die Datei doch einfach mal auf der Kommandozeile auf das Ziel und stoppe die Zeit. Bei einige Programmen, die solches machen, kann man die Zeit udn Datenrate sehen.
    (Beim Download zeigt z.B. WGET die Datenrate und Zeit an)

    Computer ..... grrrrrr

    Einmal editiert, zuletzt von Rasp-Berlin (24. Mai 2017 um 20:25)

  • Hallo,

    max_execution_time/max_input_time habe ich auf 3600 Sekunden angepasst. Dazu habe ich das memory limit auf 3GB angehoben aber es funktioniert immer noch nicht. Nun sehe ich zumindest dass der Upload in einen Timeout läuft. Kurioserweise wurden die von mir festgelegten Werte bei weitem nicht erreicht so dass Astore wohl recht hat. :( Einen Pi3 besitze ich zwar aber den möchte ich nicht für die Cloud Geschichte "opfern". Für den Pi Zero W konnte ich kein passendes ArchLinux Image finden. Lediglich die Version 5 ist wohl mit dem ersten Pi kompatibel.

  • Der PiZero unterstützt kein 64bit.

    Es geht ja darum, dass PHP in der 32bit Version (angeblich) nicht mit Dateien größer 2GB umgehen kann. Damit ein einzelnen Programm 64bit nutzen kann muss sowohl das Betriebssystem (bzw Kernel) 64bit sein als auch die Prozessorarchitektur, damit der erweiterte Adressraum überhaupt angewendet/verwendet werden kann.
    Unterstützt der CPU kein 64bit kann auch kein 64bit OS laufen und somit auch kein 64bit Programm.
    Erst mit dem RaspberryPi 3B wurde 64bit eingeführt.

    Allerdings hat das Problem meiner Meinung nach nur indirekt mit 32bit oder 64bit von PHP zu tun sondern viel mehr mit gewissen Bugs in PHP bzw wie damit umgegangen wird. Natürlich hängt das Problem mit dem mit 32bit einhergehenden Integer-Limit zusammen... Aber beispielsweise die PHPx64 Version für Windows nutzt leider trotzdem 32bit-Integer's und hat selbst in der 64bit Version Probleme mit > 2GB Dateien umzugehen. 64bit OS und PHPx64 ist also keine Garantie dass das funktioniert.

    Das Problem hängt damit zusammen dass PHP signierte Ganzzahlen verwendet.

    Code
    32-bit signed integer max value: +2^31  =             2 147 483 648 ~             2 gigabytes
    64-bit signed integer max value: +2^63  = 9 223 372 036 854 775 808 ~ 9 223 372 000 gigabytes


    Die Einstellungen die llutz nannte hängen auch noch mit anderen Einstellungen zusammen ...
    Zunächst mal gibt es bei PHP Standardmäßig ein Dateigrößen Limit upload_max_filesize und post_max_size was man anpassen muss. Damit zusammen hängt dann auch das ein Upload solch großer Dateien auch länger dauert, also müssen die erwähnten "*time" Einstellungen auch hoch gesetzt werden... Aber wie gesagt sind die "*size" Einstellungen ebenso wichtig ...

    Dazu kommt: Es gibt mindestens 2 verschiedene php.ini Dateien. Eine für die Konsolen-Version (cli = command line interface) und eine separate für apache2. Es muss also die richtige Datei angepasst werden.

    Und zu guter letzt kann auch das falsche "temp" Verzeichnis Schuld haben: PHP Hat eine Stellung upload_tmp_dir wohin die Datei geladen wird - ist dort zu wenig Platz scheitert der Upload ebenfalls.

    Last but not least kann ein Upload einer 3 GB Datei bei mir länger dauern als bei dir, weil mein Internet nicht so schnell ist oder gerade irgendwas hakt... Die jeweiligen *time Einstellungen sollten also hoch genug gesetzt sein.
    Aber auch der Browser hat ein Limit integriert, zum Beispiel Chrome und Firefox begrenzen auf 15MB/s. InternetExplorer hat allgemein Probleme mit sowas, mal davon abgesehen dass der IE allg. müll ist.


    Es ist also ein Zusammenspiel vom jeweiligen Webserver, der PHP Version sowie dessen Konfiguration, dem verwendeten OS bzw Kernel, und auch dem Client-Browser.

    Beispielsweise nginx hat im Gegensatz zu apache2 eigene Einstellungen bezüglich Größen von Headern oder allgemein eine etwas andere Handhabung bgzl. PHP (Stichwort: FastCGI).
    Auch wird mit den Dateien unterschiedlich umgegangen: nginx speichert die Datei erst auf die Festplatte und erst anschließend wird sie an PHP übergeben. PHP wiederum legt sie im upload_tmp_dir Ordner ab und verarbeitet sie erst dann...


    Allgemein würde ich aber davon abraten derart große Dateien übers Web hochzuladen, denn es gibt kein Resume. Mach das lieber via FTP.

  • 2^N - 1 != 2^(N-1)

    2^32 - 1 = 4294967295
    2^64 - 1 = 18446744073709551615
    also ~ Faktor 2 größer, als von Dir angegeben.

    (für die, die genaue Ergebnisse mögen)

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.


  • 2^32 - 1 = 4294967295
    2^64 - 1 = 18446744073709551615

    Andreas: Ich schrieb: signed integer


    für die, die genaue Ergebnisse mögen:

    https://en.wikipedia.org/wiki/2,147,483,647
    https://en.wikipedia.org/wiki/9223372036854775807

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!