bobderschwamm
Goto Top

IIS 7 mit PHP - Download bricht immer bei 81,8MB ab

Ich hab nach dem Wechsel von Debian auf Windows Server 2008 R2 Datacenter das Problem, dass die Downloads über mein Downloadscript immer bei 81,8mb abbrechen. Auch wenn ich andere PHP-Funktionen zum auslesen der Datei oder dem senden nehme passiert genau das gleiche.

Hier die phpinfo: http://server.kdgbusiness.de/php.php

Einstellungen sind weitestgehend auf Standard gesetzt.

Suche im Forum/Google brachte auch nichts brauchbares (wie gesagt wenn ich andere Funktionen benutze passiert genauch das gleiche)


Hier eines der Codeschnipsel (bis auf die filesize funktion wie auf dem debian server, liefert aber die richtige filesize):
function dos_filesize($fn) {
    if (is_file($fn))
        return exec('FOR %A IN ("'.$fn.'") DO @ECHO %~zA');  
    else
        return '0';  
}


if (is_file($file['path'])) {  

	//	$length = $file['size'] = shell_exec('ls -l "'.$file['path'].'" | cut -f 5 -d " "');	# LINUX 
		$length = $file['size'] = dos_filesize($file['path']);									# WIN  
		$f = fopen($file['path'], 'rb');  
		$start  = 0;
		if (preg_match('/^bytes=(\d*)-(\d*)$/i', $config['range'], $r)) {  
				if ($r[1] == '')   
					$start = 0; 
				else 
					$start = min($r[1], $file['size'] - 1);  
				if ($r[2] == '')   
					$length = $file['size'] - $start; 		  
				else
					$length = min($r[2], $file['size'] - 1) - $start + 1;  
					
				header('HTTP/1.1 206 Partial content');  
				header('Content-Range: bytes '.$start.'-'.($start + $length - 1).'/'.$file['size']);  
				
		}
		header('Pragma: no-cache');  
		header('Expires: 0');  
		header('Cache-Control: private');  
		header('Cache-Control: no-store, no-cache, must-revalidate');  
		header('Cache-Control: post-check=0, pre-check=0, false');  
		header('Accept-Ranges: bytes');			  
		header('Content-Type: application/octet-stream; charset=utf-8');   
		header('Content-Disposition: attachment; filename="'.$file['name'].'"');   
		header('Content-Length: '.$length);	  
		header('Content-Transfer-Encoding: binary');  
		
		if ($config['maxspeed'] > 0)  
			$buffsize = $config['maxspeed'];  
		else
			$buffsize = 4096;
			
		$read = 0;
		fseek($f, $start);
		while (!feof($f) && ($read < $length)) {
			$buff = fgets($f, min($buffsize, $length - $read));
			$read += strlen($buff);
			echo $buff;
			if ($config['maxspeed'] > 0) {  
				flush();
				sleep(1);
			}
		}
		fclose($f);
}

Content-Key: 133514

Url: https://administrator.de/contentid/133514

Printed on: April 25, 2024 at 01:04 o'clock

Member: kaiand1
kaiand1 Jan 14, 2010 at 21:52:28 (UTC)
Goto Top
Mal dran gedacht die Scriptlaufzeit zu erhöhen?
Sonst im Logfile steht der grund wiso es abgebrochen wurde ;)
Member: bobderschwamm
bobderschwamm Jan 14, 2010 at 22:13:37 (UTC)
Goto Top
Im Logfile (C:\inetpub\logs\LogFiles\W3SVC1 & php-errors.log) steht leider nix, oder welches logfile meinst du?

max_execution_time & cgi timeout hab ich jetzt mal erhöht, muss ich morgen testen, denn im lokalem Netz gehts komischerweise...


edit: habs grad mal über eine vpn-verbindung von außerhalb laufen lassen, und da funktionierts, mal weiter mit den einstellungen probieren...
Member: bobderschwamm
bobderschwamm Jan 16, 2010 at 02:03:49 (UTC)
Goto Top
Ok das Porblem ist gelöst, hätte nicht gedacht das es zwei max executions gibt einmal in der php.ini und dann nochmal ganz versteckt in den Einstellungen des FastCGI-Moduls.

Somit herzlichen Dank für deinen Ansatz face-smile