Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Упаковка файла и отправка его в поток

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
ADIOS
Отправлено: 19 Января, 2013 - 16:10:02
Post Id



Гость


Покинул форум
Сообщений всего: 96
Дата рег-ции: Май 2010  
Откуда: Россия, Калуга


Помог: 2 раз(а)




Всем привет...

Столкнулся с проблемкой..

упаковал файл в zip архив, и отправил поток. Файл скачался, но архив выходит поврежденным...

Вот сама функция

PHP:
скопировать код в буфер обмена
  1.  function puckZip($name,$dir){
  2.  
  3.  
  4.                         $ext = substr($name,strpos($name,'.'),strlen($name)-1);//Определяем расширение файла
  5.                         $newname = basename($name, $ext);
  6.  
  7.                         //создание zip архива
  8.                         $zipArchive = new ZipArchive();
  9.                         //имя файла архива
  10.                         $fileName = $dir."/".$newname.".zip";
  11.                         $archiveName = $newname.".zip";
  12.                        
  13.                         $zipArchive->open($fileName, ZIPARCHIVE::CREATE);
  14.  
  15.                         $zipArchive->addFile($dir.'/'.$name, $name);
  16.                        
  17.                         //закрываем архив
  18.                         $zipArchive->close();
  19.        
  20.                                 $data = file_get_contents($dir.'/'.$name);             
  21.                        
  22.                                 header('Content-Disposition: attachment; filename='.$archiveName);                     
  23.                                 header ( "Expires: Mon, 1 Apr 1974 05:00:00 GMT" );
  24.                                 header ( "Last-Modified: " . gmdate("D,d M YH:i:s") . " GMT" );
  25.                                 header ( "Cache-Control: no-cache, must-revalidate" );
  26.                                 header ( "Pragma: no-cache" );
  27.                                 header ( "Content-Description: PHP Generated ZIP Data" );
  28.                                 print $data;
  29.                
  30.  
  31.                         unlink($fileName);
  32.  }


Если оставить архив на сервере, то он рабочий и распаковывается, скорей всего дело в потоке... А вот где ошибка понять не могу...

(Отредактировано автором: 19 Января, 2013 - 16:11:56)



-----
Не откладывай работу на завтра, от которой можно вообще отказаться
 
 Top
ADIOS
Отправлено: 21 Января, 2013 - 11:09:38
Post Id



Гость


Покинул форум
Сообщений всего: 96
Дата рег-ции: Май 2010  
Откуда: Россия, Калуга


Помог: 2 раз(а)




Вообщем решил проблему...

Убрал поток

PHP:
скопировать код в буфер обмена
  1.  $data = file_get_contents($dir.'/'.$name);            
  2.                        
  3.                                 header('Content-Disposition: attachment; filename='.$archiveName);                    
  4.                                 header ( "Expires: Mon, 1 Apr 1974 05:00:00 GMT" );
  5.                                 header ( "Last-Modified: " . gmdate("D,d M YH:i:s") . " GMT" );
  6.                                 header ( "Cache-Control: no-cache, must-revalidate" );
  7.                                 header ( "Pragma: no-cache" );
  8.                                 header ( "Content-Description: PHP Generated ZIP Data" );
  9.                                 print $data;


и добавил функцию которую нашел на этом форуме

PHP:
скопировать код в буфер обмена
  1.  function output_file($file,$name)
  2.  {
  3.  //do something on download abort/finish
  4.  //register_shutdown_function( 'function_name'  );
  5.  if(!file_exists($file))
  6.  die('file not exist!');
  7.  $size = filesize($file);
  8.  $name = rawurldecode($name);
  9.  
  10.  if (ereg('Opera(/| )([0-9].[0-9]{1,2})', $_SERVER['HTTP_USER_AGENT']))
  11.  $UserBrowser = "Opera";
  12.  elseif (ereg('MSIE ([0-9].[0-9]{1,2})', $_SERVER['HTTP_USER_AGENT']))
  13.  $UserBrowser = "IE";
  14.  else
  15.  $UserBrowser = '';
  16.  
  17.  /// important for download im most browser
  18.  $mime_type = ($UserBrowser == 'IE' || $UserBrowser == 'Opera') ?
  19.   'application/octetstream' : 'application/octet-stream';
  20.  @ob_end_clean(); /// decrease cpu usage extreme
  21.  header('Content-Type: ' . $mime_type);
  22.  header('Content-Disposition: attachment; filename="'.$name.'"');
  23.  header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
  24.  header('Accept-Ranges: bytes');
  25.  header("Cache-control: private");
  26.  header('Pragma: private');
  27.  
  28.  /////  multipart-download and resume-download
  29.  if(isset($_SERVER['HTTP_RANGE']))
  30.  {
  31.  list($a, $range) = explode("=",$_SERVER['HTTP_RANGE']);
  32.  str_replace($range, "-", $range);
  33.  $size2 = $size-1;
  34.  $new_length = $size-$range;
  35.  header("HTTP/1.1 206 Partial Content");
  36.  header("Content-Length: $new_length");
  37.  header("Content-Range: bytes $range$size2/$size");
  38.  }
  39.  else
  40.  {
  41.  $size2=$size-1;
  42.  header("Content-Length: ".$size);
  43.  }
  44.  $chunksize = 1*(1024*1024);
  45.  $bytes_send = 0;
  46.  if ($file = fopen($file, 'r'))
  47.  {
  48.  if(isset($_SERVER['HTTP_RANGE']))
  49.  fseek($file, $range);
  50.  while(!feof($file) and (connection_status()==0))
  51.  {
  52.  $buffer = fread($file, $chunksize);
  53.  print($buffer);//echo($buffer); // is also possible
  54.  flush();
  55.  $bytes_send += strlen($buffer);
  56.  sleep(1);//// decrease download speed
  57.  }
  58.  fclose($file);
  59.  }
  60.  else
  61.  die('error can not open file');
  62.  if(isset($new_length))
  63.  $size = $new_length;
  64.  die();
  65.  }


Данное решение было к месту.. Спасибо форуму!!!!


-----
Не откладывай работу на завтра, от которой можно вообще отказаться
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с файловой системой и файлами »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB