Это ожидаемое (нормальное) поведение браузера при получении файла в ответ на отправленную форму. Не про php.
а что значит новое окно? а флешем можно точно все это замутить. я так понимаю, что и html5 можно сделать всякое красивое с одной кнопкой.
Здравствуйте! Нужен самый простой скрипт для скачивания файла. Использую такой Код (Text): $file = ("mashka.rar"); header ("Content-Type: application/octet-stream"); header ("Accept-Ranges: bytes"); header ("Content-Length: ".filesize($file)); header ("Content-Disposition: attachment; filename=".$file); readfile($file); Работает, но не отображается процесс загрузки файла. Как его слегка усложнить, чтобы процесс загрузки отображался? П.С. Второй скрипт из темы пробовал, но почему-то не качает.
файл находится в той же директории что и скрипт ? если нет , то в filesize($file) нужно добавить абсолютный путь файла
ага, скорее всего filesize() не смог определить размер. Добавлено спустя 1 минуту 38 секунд: … а варнинги отключены. вообще-то функция умеет порождать варнинг и тем убивать скачиваемый файл ))) Добавлено спустя 1 минуту 4 секунды: Код (PHP): $file = dirname(__FILE__). "/mashka.rar"; ... header ("Content-Disposition: attachment; filename=".basename($file));
Не получается сделать загрузку файлов, пробывал несколько вариантов кода, любой загружает файл, но при открытии говорит что файл поврежден...Такое впечатление что скрипт дописывает что - то в файл, ибо размер на входе 100кб на выходе 101кб.. Вот код которым гружу файл: Код (Text): function file_download($filename, $mimetype='application/octet-stream') { if (file_exists($filename)) { header($_SERVER["SERVER_PROTOCOL"] . ' 200 OK'); header('Content-Type: ' . $mimetype); header('Last-Modified: ' . gmdate('r', filemtime($filename))); header('ETag: ' . sprintf('%x-%x-%x', fileinode($filename), filesize($filename), filemtime($filename))); header('Content-Length: ' . (filesize($filename))); header('Connection: close'); header('Content-Disposition: attachment; filename="' . basename($filename) . '";'); echo file_get_contents($filename); } else { header($_SERVER["SERVER_PROTOCOL"] . ' 404 Not Found'); header('Status: 404 Not Found'); } exit; } Пробывал использовать простейший код из этой темы, результат тот же(
Может быть, utf-8 + BOM? А также: как заканчивается скрипт? В конце есть Код (Text): ?> ? Если есть, то после него точно ничего нету - никаких пробелов, переводов строк там и т.п...?
Возьми два файла - один оригинальный, а другой - скаченный через этот скрипт и ищи отличия Найдёшь - проще будет попытаться сообразить, откуда они вылезли. Возможно, там какой-нибудь PHP-Warning или Notice проскакивает.
Скачиваю тот же файл через фтп все нормально открывает, уже не знаю где копать( Отличия между файлами 1 кб Что то левое пишется в файл. но где непонятно...
Я бы если бы не мог найти ошибку в коде скрипта - открыл бы оба файла просто в текстовом редакторе и глазами бы пробежался по всем тем кракозябрам, что внутри, и попробовал бы найти отличия.
Открыл текстовым редактором, в нутри начало хтмл кода страницы с которой происходит загрузка, до момента кнопки при нажатии на которурю скачивается файл... Уже ничего не понимаю...
Хе Смотри код скрипта, который отдаёт файл. Естественно, что любой html-код, который выводится этим скриптом - будет также отправлен вместе с файлом... Перед Код (PHP): <?php тоже ничего не должно быть.
Всех приветствую. В данном вопросе я полный профан, так что сильно не материте, если буду тупить. Разместил код для скачивания файлов на сайте. Файлы скачиваются, но не открываются. Задал вопрос в службу поддержки хоста, они прислали мне коды ошибок. Подскажите пожалуйста, что они означают и как все исправить? Вот этот код я поставил на сайт: Код (PHP): <?php $file = $_GET['file']; if (ob_get_level()) { ob_end_clean(); } header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename=' . basename($file)); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($file)); readfile($file); exit; Вот такие ошибки прислали из службы поддержки: Код (PHP): <br /> <b>Warning</b>: filesize(): stat failed for public_html/skachat/tabl.shtraf.zip in <b>/home/xrrkbnkk/public_html/download.php</b> on line <b>13</b><br /> <br /> <b>Warning</b>: Cannot modify header information - headers already sent by (output started at /home/xrrkbnkk/public_html/download.php:13) in <b>/home/xrrkbnkk/public_html/download.php</b> on line <b>13</b><br /> <br /> <b>Warning</b>: readfile(public_html/skachat/tabl.shtraf.zip): failed to open stream: No such file or directory in <b>/home/xrrkbnkk/public_html/download.php</b> on line <b>14</b><br /> Подсказка от модератора: Любой код или текст конфигурации пишите между тегом [code=php] и [/code]. Используйте отступы в коде для форматирования текста. Это помогает быстрее понять вас, увеличивает шанс на получение ответа. Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
Я не понимаю вопроса. Объясните мне, если не сложно. Я этот код где-то в инете нарыл. А как он работает, я вообще не знаю.
Прямая дорога в ад. Ваш код уязвим. Достаточно подставить handler.php?file=\etc\passwd и злоумышленник получит нужную ему информацию. Осуществляйте проверки. Как на сам файл, так и на его директории, если так хотите чтобы он передавался через GET. (is_file)
Понятно. Пытался найти модуль для скачивания файлов и установить в шаблон, но больно уж они замудреные. PHP некоторые люди вообще не советуют. Вот я в растерянности, как осуществить задуманное. В моем случае простенький модуль подошел бы, для отдачи у меня небольшие файлы, да и количество небольшое. Но что-то подходящее найти не могу.