Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 09.09.2011, 03:21
kostasoft вне форума Посмотреть профиль Отправить личное сообщение для kostasoft Найти все сообщения от kostasoft
  № 1  
Ответить с цитированием
kostasoft

Регистрация: Apr 2007
Сообщений: 45
По умолчанию Загрузка файла с сервера при помощи php

Ребята, использую следующий готовый скрипт (ранее уже здесь светившийся) для вызова диалога о загрузке (скачивании) файла с сервера на локальный комп:
PHP код:
class download{
  
     var 
$properties = array(    'old_name' => "",
                                 
'new_name' => "",
                                 
'type' => "",
                                 
'size' => "",
                                 
'resume' => "",
                                 
'max_speed' => ""
                                 
);
  
     var 
$range 0;
  
     function 
download($path$name=""$resume=0$max_speed=0){
  
         
$name = ($name == "") ? substr(strrchr("/".$path,"/"),1) : $name;
  
         
$file_size = @filesize($path);
  
         
$this->properties =  array(
                                     
'old_name' => $path,
                                     
'new_name' => $name,
                                     
'type'=> "application/force-download",
                                     
'size' => $file_size,
                                     
'resume' => $resume,
                                     
'max_speed' => $max_speed
                                     
);
  
             if (
$this->properties['resume']) {
  
                 if(isset(
$_SERVER['HTTP_RANGE'])) {
  
                     
$this->range $_SERVER['HTTP_RANGE'];
                     
$this->range str_replace("bytes="""$this->range);
                     
$this->range str_replace("-"""$this->range);
  
                 } else {
  
                         
$this->range 0;
  
                 }
  
                 if (
$this->range $this->properties['size']) $this->range 0;
  
             } else {
  
                 
$this->range 0;
  
             }
  
     }
  
  
     function 
download_file(){
  
                 if (
$this->range) {
                     
header($_SERVER['SERVER_PROTOCOL']." 206 Partial Content");
                 } else {
                     
header($_SERVER['SERVER_PROTOCOL']." 200 OK");
                 }
             
header("Pragma: public");
             
header("Expires: 0");
             
header("Cache-Control:");
             
header("Cache-Control: public");
             
header("Content-Description: File Transfer");
             
header("Content-Type: ".$this->properties["type"]);
             
header('Content-Disposition: attachment; filename="'.$this->properties["new_name"].'";');
             
header("Content-Transfer-Encoding: binary");
  
             if (
$this->properties['resume']) header("Accept-Ranges: bytes");
  
             if (
$this->range) {
  
             
header("Content-Range: bytes {$this->range}-".($this->properties['size']-1)."/".$this->properties['size']);
             
header("Content-Length: ".($this->properties['size']-$this->range));
  
  
             } else {
  
             
header("Content-Length: ".$this->properties['size']);
  
             }
  
             @
ini_set('max_execution_time'0);
             @
set_time_limit();
             
$this->_download($this->properties["old_name"], $this->range);
     }
  
     function 
_download ($filename$range=0)
     {
         @
ob_end_clean();
  
         if ((
$speed $this->properties['max_speed']) > 0)
             
$sleep_time = ($speed) * 1e6;
         else
             
$sleep_time 0;
  
         
$handle fopen($filename'rb');
         
fseek($handle,$range);
  
         if (
$handle === false)
         {
             return 
false;
         }
  
         while (!
feof($handle))
         {
             print (
fread($handle1024*8));
             
ob_flush();
             
flush();
             
usleep($sleep_time);
         }
  
         
fclose($handle);
  
         return 
true;
     }
  
  } 
Соответственно, php-код, который вызываю из AS3:
PHP код:
$a = new download($sequrefolder.$_REQUEST[filename], $_REQUEST[filename]);
$a->download_file(); 
Работает все это дело через
Код AS3:
var http:HTTPService = new HTTPService();
у которого
Код AS3:
http.method = "POST";
Так вот, проблема в том, что после вызова данного метода HTTPService ждет ответа от php-скрипта, а в это время php-скрипт занят тем, что, видимо, ждет подтверждения загрузки пользователем, но окно это подтверждения не выводит! Флеш-приложение висит.
Сразу оговорюсь, напрямую файл не скачаешь, он не доступен из html-папки.
Как можно это побороть?

Добавлено через 1 час 36 минут
Все, вопрос решен. Нужно использовать
Код AS3:
                var url_request:URLRequest = new URLRequest("getfile.php");
		var variables:URLVariables = new URLVariables();		
		variables.filename = "data.zip";
                ...
		url_request.data = variables;
		url_request.method = URLRequestMethod.POST;
                navigateToURL(url_request,"_blank");


Последний раз редактировалось kostasoft; 09.09.2011 в 03:25.
Создать новую тему Ответ Часовой пояс GMT +4, время: 07:08.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 07:08.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.