as2 / flash :: как принудительно загрузить файл через PHP

#php #file #header #download #actionscript-2

#php #файл #заголовок #Скачать #actionscript-2

Вопрос:

Я пытаюсь принудительно загрузить файл через PHP с

 $ctype="application/zip";
header("Content-Type: $ctype");
header("Content-Length: ".filesize($filepath));
header("Expires: 0");
header("Content-Transfer-Encoding: binary");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");  //header("Cache-Control: public"); 
header("Pragma: public");
header("Content-Disposition: attachment; filename=".$filename);
// header("Location: $filepath"); // edited: removed
readfile($filepath);
 

но это не работает.

с помощью firebug я вижу измененную информацию заголовка, но диалоговое окно сохранения файла не появляется…

Комментарии:

1. Можете ли вы опубликовать код, который вы используете для запуска загрузки во flash? Я подозреваю, что там может быть что-то не так.

2. Я просто отправляю некоторые данные в файл PHP, который запрашивает некоторые разрешения в базе данных mysql. затем должна начаться загрузка. если я укажу своему флэш-файлу из этого php-файла вызвать другую страницу (_parent-window) с php-кодом для запуска загрузки, это сработает. но если я позволю первому php-коду начать загрузку, это не сработает. Я думаю, что это должна быть какая-то предварительная отправка информации перед отправкой заголовка, которая позже разрушит чистоту моего заголовка…

3. Я хочу знать, используете ли вы navigateToURL или URLLoader. Последний не начнет загрузку, Flash просто будет использовать эти данные независимо.

4. хорошо — я понимаю. нет, я использую myData = new LoadVars() / myData.sendAndLoad() / POST

5. Тогда вы должны использовать as2, а не as3, sendAndLoad также «съест» ваш ответ и не вызовет загрузку. Вам нужно будет использовать getURL()

Ответ №1:

Вам необходимо удалить

 header("Location: $filepath");
 

Который в основном перенаправляет вас на определенный путь вместо чтения его содержимого.

Комментарии:

1. несмотря на то, что ваш ответ был отчасти правильным, naturellemente. Я отредактировал вопрос.

Ответ №2:

sendAndLoad() «съест» ваш ответ и не вызовет загрузку, что полезно, если вы пытаетесь загрузить данные. Однако в вашем случае вам нужно использовать getURL() , поскольку вы хотите, чтобы браузер обрабатывал ответ, а не flash.