#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.