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-ID: 133514

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

Ausgedruckt am: 23.11.2024 um 01:11 Uhr

kaiand1
kaiand1 14.01.2010 um 22:52:28 Uhr
Goto Top
Mal dran gedacht die Scriptlaufzeit zu erhöhen?
Sonst im Logfile steht der grund wiso es abgebrochen wurde ;)
bobderschwamm
bobderschwamm 14.01.2010 um 23:13:37 Uhr
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...
bobderschwamm
bobderschwamm 16.01.2010 um 03:03:49 Uhr
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