DL Mod v5.1.5 -> Allowed memory size of...

Enthält archivierte Beiträge von Hotschi's Board zum Download MOD.
Posten ist hier nicht möglich, bitte das Supportforum dafür verwenden!
oxpus

Beitrag von oxpus »

Schau doch mal in die Indianer-Konfig, ob da was "ersichtlich" ist.
Ich weiß, die ist alles andere als einfach zu lesen, aber ich wüsste selber jetzt nicht, an was es liegen könnte.
Meine Tests waren bislang jedenfalls nicht fehlerbehaftet, ich konnte immer Dateien bei mir herunterladen, die auch das PHP-Limit überstiegen...
Dungeonwatcher

Beitrag von Dungeonwatcher »

Hi großer Meister! 8)

Nimm's mir bitte nicht übel das ich weiter nerve. :roll:

Nachdem ich nun über Tage das große Netz der Netze durchstöbert habe, bin ich mal wieder der Meinung das es definitiv nicht am Apache liegt. Schau dir bitte mal folgende Seite an, auf der mein Problem beschrieben steht:

http://www.tutorials.de/forum/php/28682 ... dfile.html

Wenn ich das dort geschriebene richtig verstehe, dann ist das "Übel" wohl die Funktion "readfile_chunked".

Bye
oxpus

Beitrag von oxpus »

Und wenn Du nun diese Funktion verwendest?

Code: Alles auswählen

// Fuktion readfile_chunked();
function readfile_chunked($filename) {
  $chunksize = 1*(1024*1024); // how many bytes per chunk
  $buffer = '';
  $handle = fopen($filename, 'rb');
  if ($handle === false) {
    return false;
  }
  while (!feof($handle)) {
    $buffer = fread($handle, $chunksize);
    print $buffer;
    ob_flush();
    flush();
  }
  return fclose($handle);
}
Funktioniert es dann?
Dungeonwatcher

Beitrag von Dungeonwatcher »

Hi! 8)

Damit hatte ich schon experimentiert, mit teilweisem Erfolg. Allerdings bin ich auch nicht sicher wie dies dann wirklich auszusehen hat:

Code: Alles auswählen

	function readfile_chunked($filename, $retbytes = true)
	{
		$chunksize = 1048576;
		$buffer = '';
		$cnt =0;
		$handle = fopen($filename, 'rb');

		if ($handle === false)
		{
			return false;
		}

		while (!feof($handle))
		{
			$buffer = fread($handle, $chunksize);
			echo $buffer;
			if ($retbytes)
			{
				$cnt += strlen($buffer);
			}
		}

		$status = fclose($handle);

		if ($retbytes && $status)
		{
			return $cnt;
		}

		return $status;
	}
Ich habe es aktuell so umgeschrieben:

Code: Alles auswählen

	function readfile_chunked($filename, $retbytes = true)
	{
		$chunksize = 1*(1024*1024);
		$buffer = '';
		$cnt =0;
		$handle = fopen($filename, 'rb');

		if ($handle === false)
		{
			return false;
		}

		while (!feof($handle))
		{
			$buffer = fread($handle, $chunksize);
			print $buffer;
			ob_flush();
			flush();
			if ($retbytes)
			{
				$cnt += strlen($buffer);
			}
		}

		$status = fclose($handle);

		if ($retbytes && $status)
		{
			return $cnt;
		}

		return $status;
	}
Damit wird bei der neuen DL Methode jetzt schon mal die Datei nicht mehr kplt. in den Speicher geladen, sondern direkt von der Platte gestreamt, egal wie groß sie ist. Dateien größer "memory_limit" (aktuell 32M) können problemlos dl werden. Allerdings ist das Ergebnis weiterhin eine defekte Datei. Wenn ich mir die Dateien anschaue, dann ist die originale Datei immer kleiner als die Runtergeladene.

Bei der alten DL Methode wird weiterhin alles in den Speicher geladen.
oxpus

Beitrag von oxpus »

Dachte ich mir, daß das so nicht geht, da die Ausgabepuffer im Browser als eigene Blöcke angesehen werden und als Ganzes dann defekte Ergebnisse liefern.
Denn: Jeder Block hat einen Header und ggf. auch Footer und das ist gerade bei geteilten grossen Dateien nicht das gelbe vom Ei.
Ich habe daher weiterhin vor, den Zugriff auf die Datei direkt laufen zu lassen, analog externer Downloads.
Wird dann eine weitere Option als DL Methode.

Ich muss dazu nur mal wieder Zeit finden...
Dungeonwatcher

Beitrag von Dungeonwatcher »

Sorry, aber ich könnte ko* und das ganze DL Gedöhns in den Orkus kippen. :cry:

Was ist an meinem System so anders, das hier weder die alte noch die neue DL Methode sauber funktioniert? Warum wird selbst bei der alten Methode die ganze Datei in den Speicher geladen bis er platzt? :cry:

Du schreibst immer "den Zugriff auf die Datei direkt laufen zu lassen". Darunter verstehe ich (sicher wieder falsch) was anderes, nämlich einen direkten Link. Den sehe ich aber nirgends. :roll:
oxpus

Beitrag von oxpus »

Man, ich muss das doch erst noch programmieren 8)
Dungeonwatcher

Beitrag von Dungeonwatcher »

:) schon klar. Trotzdem muss es doch an irgendetwas in meinem System liegen, denn scheinbar bin ich ja der Einzige mit diesem Problem. Ich habe mittlerweile in diversen Foren und nun auch in einer NG (de.comm.software.webserver) nachgefragt. Als Antwort gab es entweder einen Hinweis auf "PHP Fehler" in der DL Funktion oder Schweigen. Doch es hat doch vor der Umstellung auf den Apache auch bestens funktioniert. :cry:
oxpus

Beitrag von oxpus »

Sagen wir mal so:
Ich kenne keinen, der solch riesige Downloads mit PHP verwaltet.
Von daher scheinst Du der einzigste mit diesem Problem zu sein.
Aber dennoch will ich den MOD ja erweitern, damit auch dieses wieder funktioniert.
Dungeonwatcher

Beitrag von Dungeonwatcher »

oxpus hat geschrieben:...solch riesige Downloads...
Naja, ein DL von Dateien mit 1GB und mehr ist doch mittlerweile "Erdnuss"... :roll:
Die Zeiten von Diskette, CD oder DVD als Mittler von Dateien ist halt ziemlich vorbei. :wink:
oxpus

Beitrag von oxpus »

Möööööhp.
Klar sind die Datenträger heutzutage um einiges grösser, als sie noch vor 5-10 Jahren waren, aber dennoch sind Dateigrössen von 1GB und mehr immer noch extrem groß!
oxpus

Beitrag von oxpus »

Gute Nachrichten:
Auf OXPUS.de läuft der MOD nun schon mit der neuen DL Methode.
D. h. neu ist sie nicht, es wurde jediglich die Möglichkeit geschaffen, den Direktlink zum Download zu aktivieren, wenn die Datei grösser ist, als das Memory-Limit von PHP.
Damit wird zwar jede Statistik mitgeführt, der Download läuft dann aber per HTTP-Protokoll und nicht mehr über PHP und somit fehlerhaft.

Da ich jetzt noch das Berechtigungssystem etwas erweitern will, was ich hoffentlich morgen schaffe, werde ich den MOD dann veröffentlichen und Du solltest endlich wieder Deine "Monsterdownloads" fehlerfrei herunterladen können.

Ich werde Dir dazu den MOD dann zum Testen geben und wenn alles glatt läuft, also Du dann keine Fehler hast, den MOD der Öffentlichkeit freigeben.
Sofern das okay ist...
oxpus

Beitrag von oxpus »

So, das Paket ist zu Dir raus.
Sofern Du Zeit hast, teste es aus und poste das Ergebnis hier.
Ich bin gespannt, ob nun wirklich alles läuft.
Bei meinen Tests war dem so...
Dungeonwatcher

Beitrag von Dungeonwatcher »

oxpus hat geschrieben:So, das Paket ist zu Dir raus.
Cooooool, es kam gerade an. <riesig freu> :)
Sofern Du Zeit hast, teste es aus und poste das Ergebnis hier.
Sowie die neue Schrankwand steht (spätestens morgen vormittag geht es los. )
Ich bin gespannt, ob nun wirklich alles läuft.
Und ich erst.
Bei meinen Tests war dem so...
Das hat nichts zu sagen. In meiner 4ma bzw. Behörde "zerlege" ich auchandauern deren eingesetzte Programme, nur weil ich sie ausreize... Was bei den Koll. funktioniert tut es bei mir oft nicht mehr. :wink:
Dungeonwatcher

Beitrag von Dungeonwatcher »

Hi! 8)
oxpus hat geschrieben:Sofern Du Zeit hast, teste es aus und poste das Ergebnis hier.
Das updaten war wie gewohnt einfach. :)

Es gibt hier keinen Unterschied zu vorher. Egal ob ich "Direkt" dazu schalte oder nicht. :?
oxpus

Beitrag von oxpus »

Dann MUSS es ein Problem mit dem Apache geben.
Es wird mit der neuen "direkt"-Methode ein Link direkt auf die Datei erzeugt, ohne, daß PHP dann noch etwas damit zu tun hat...

Und ab genau hier bin ich nun ideenlos!
Dungeonwatcher

Beitrag von Dungeonwatcher »

Hi! 8)
oxpus hat geschrieben:Dann MUSS es ein Problem mit dem Apache geben.
Genau das befürchtete ich die ganze Zeit. :?

Ich hoffe die nächsten Tage gibt es das Update auf XAMPP 1.6.4 mit dem aktuellen Apache...
oxpus

Beitrag von oxpus »

Dann werden wir weiter sehen.
Ich werden die neue Version jetzt jedenfalls veröffentlichen, damit jeder was davon hat.
Auch gerade wegen der neu hinzugekommenen Rechteverwaltung.
Gesperrt