Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] schreiben / sync von grossen Dateien.

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] schreiben / sync von grossen Dateien.

    Hallo phpLer ...

    folgende Aufgabe:
    auf unserem Server liegen knapp 50GB Dokumente und Versicherungssoftware zum Download bereit.
    Aufgrund der gestiegenen Nachfrage werden wir diese Downloads auf einen exteren dedicated Server auslagern.

    Über eine rewrite rule auf dem externen Server wird ein php-Script angesprochen, welches überprüft ob auf dem internen Server eine aktuellere Dateiversion vorliegt. Wenn nicht, alles o.k., dann wird die auf dem exterene Server (ausserhalb des doc.roots) liegende Datei zum download angeboten.

    Wenn die Datei nicht vorhanden ist, oder veraltet, soll vom internen Server die angeforderte Datei mit dem Externen gesynct werden (ja, ich versuche meinen Kollegen rsync schmackhaft zu machen).

    Nun gibt es aber wirklich große Dateien (300-400 MB) und verständlicher weise möchte ich php in der ini nicht soviel Speicher zuweisen.
    Das hat zur Folge, daß das Script (wie sonst) abbricht...

    ich rufe also vom externen Server ein auf dem internen Server liegendes Script auf, welches so das File vom internen Server sendet:

    Code:
    $handle = fopen ($filename, "r"); 
    while (!feof($handle)) {
    	$buffer = fgets($handle, 4096);
    	echo $buffer;
    	}
    fclose ($handle);
    demnach wird die Datei ja immer häppchenweise (4K) gelesen und gesendet.

    Kann ich die Datei ebenso häppchenweise schreiben OHNE das der Speicher vollläuft ?


    auf dem externen Server fordere ich so die Datei vom internen an und schreibe sie:

    Code:
    if (!$handle = fopen($localfilename, "w")) {
          		$message[]="Kann die Datei $localfilename nicht öffnen";
            		$return=0;
    	}
    	if (!fwrite($handle, file_get_contents($url))) {
    		$message[]="Kann in die Datei $localfilename nicht schreiben";
                     $return=0;
    	}
             $message[]="Fertig, in Datei $localfilename wurde $somecontent geschrieben";
             $return=1;
        	fclose($handle);
    Ist hier mit stdin eine speicherfreundlichere Lösung zu realisieren ?


    Über jeden Tip freue ich mich.

    Gruß audin


  • #2
    Re: schreiben / sync von grossen Dateien.

    Zitat von audin
    Kann ich die Datei ebenso häppchenweise schreiben OHNE das der Speicher vollläuft ?
    Im Prinzip ja, wenn Du fread(), fwrite() und fseek() benutzt, da es sich sicher um binäre Dateien handeln wird.

    Kommentar

    Lädt...
    X