Andrej Falaleev Гость
 
 
 
 
 
  | 
		
			
				 Добавлено: Вс Июн 01 2003 10:53    Заголовок сообщения: PHP: Загрузка файла через STDOUT | 
				     | 
			 
			
				
  | 
			 
			
				Нужно отдавать файл через скрипт, при этом контролируя, был ли закачен файл полностью или загрузка оборвалась где-то посередине. Если файл был загружен - записываем это событие в журнал. Как мне объяснили, с полной вероятностью узнать результат процесса нельзя, но наиболее лучший способ - отдавать файл кусками через поток вывода.
  Итак, что делаю: define('AccessError', "Ошибка при доступе к файлу."); //$file - путь к файлу, который закачивается $download = fopen($file, "rb"); if (!$download) die(AccessError);
  //открываю stdout $stdout = fopen("php://stdout", "wb"); if (!$stdout) {  fclose($download);  die(AccessError); }
  //отключаю буферизацию stream_set_write_buffer($stdout, 0); define('ChunkSize', 1024);
  //читаю файл кусками и отправляю куски в stdout $goodwrite = true; while ( !feof($download) && $goodwrite ) {  $chunk = fread($download, ChunkSize);  $goodwrite = fwrite($stdout, $chunk); } fclose($stdout); fclose($download);
  //повер яю, не было ли ошибки в процессе записи - если была, то выход из скрипта и ничего в логи не запишется if (!$goodwrite) die;
  //запись в логи  
  Ход мыслей вроде правильный. Но на строчке   $goodwrite = fwrite($stdout, $chunk);   получаю ошибку от апача "500 Internal Server Error". Может в настройках что-то не указано? Или в самом скрипте что-то неправильно? | 
			 
		  |