Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.02.2015, 05:42   #1
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию Не удается отдать бинарный файл из MySQL.

Скрипт отдает файл, но в файле заменены некоторые символы (Notepad++), длина файла верная.
http://prntscr.com/69i4ce

Код:
$query = "SELECT bin FROM soft WHERE name = '" . addslashes($_REQUEST['soft']) . "' LIMIT 1;";
		$result = mysql_query($query) or die("|error:Query failed : " . mysql_error());
		if ($row = mysql_fetch_array($result))
		{
			$file = $row['bin'];
			
			header('Cache-Control: no-cache private');
			header('Content-Length: ' . strlen($file));
			header('Content-Description: File Transfer');
			header('Content-Disposition: attachment; filename=' . $_REQUEST['soft'] . '.exe');
			header('Content-Transfer-Encoding: binary');
			header('Content-Type: application/x-msdownload');
			echo $file;
			exit;
		}
Файл в базу загружен вручную через phpMyAdmin, собственно из-за того, что не нужен доступ к лишнему софту и не надо организовывать самому скрипты выгрузки файлов, решил файлы хранить в базе (их будет от силы штук 10, но они будут частенько обновляться).
alextrof94$gmail.com
alextrof94 вне форума Ответить с цитированием
Старый 25.02.2015, 07:26   #2
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

Так. Добавил строку
Код:
if (ob_get_level()) { ob_end_clean(); }
Теперь все нужные символы (на первый взгляд) присутствуют, однако файл передается не полностью.
http://prntscr.com/69iwsw

Код:
$query = "SELECT bin FROM soft WHERE name = '" . addslashes($_REQUEST['soft']) . "' LIMIT 1;";
		$result = mysql_query($query) or die("|error:Query failed : " . mysql_error());
		if ($row = mysql_fetch_array($result))
		{
			$file = $row['bin'];
			if (ob_get_level()) { ob_end_clean(); }
			header('Cache-Control: no-cache private');
			header('Content-Length: ' . strlen($file));
			header('Content-Description: File Transfer');
			header('Content-Disposition: attachment; filename=' . $_REQUEST['soft'] . '.exe');
			header('Content-Transfer-Encoding: binary');
			header('Content-Type: application/x-msdownload');//octet-stream  x-msdownload
			echo $file;
			exit;
		}
Без этого не могу сделать автообновление софта, помогите...
alextrof94$gmail.com

Последний раз редактировалось alextrof94; 25.02.2015 в 15:50.
alextrof94 вне форума Ответить с цитированием
Старый 25.02.2015, 16:41   #3
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

Магия какая-то.
Попробовал загрузить файлы на второй комп - все нормально скачивается вторым вариантом.
Возможно виной всему вирусня или антивирус, в чем я сильно сомневаюсь, ибо вирусне желательно, чтобы файлы запускались, а для антивируса файл невинен.
Попробую скачать файл через свой софт, может обновление нормально пройдет...
alextrof94$gmail.com
alextrof94 вне форума Ответить с цитированием
Старый 25.02.2015, 16:53   #4
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,156
По умолчанию

я чет вот сомневаюсь в strlen($file)) имхо что нить вроде sizeof() должно быть
насчет разных компов - могут разные браузеры быть - которые по разному скачивают или смотрят заголовки
ADSoft вне форума Ответить с цитированием
Старый 25.02.2015, 18:19   #5
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

sizeof делает тоже самое, что и strlen судя по всему. Более того, эту часть кода не я писал, а просто загуглил отдачу файлов.
На обоих компах пользуюсь хромом последним.
Сейчас пришел домой и нашел ошибку. Отключил антивирус - файлы начали нормально качаться. Проблема теперь в том, что на ноуте и компе я пользуюсь бесплатным авастом, который опять же обновлен до последней версии, софт не имеет отношения к зловредам (ни вторгается в память, ничего другого подозрительного не делает), и антивирус не трогает копию, которую я ежедневно запускаю вручную. Включил антивирус - опять не дает скачать.

В общем, тема закрыта, проблема на стороне клиента, а не сервера, буду искать.
alextrof94$gmail.com

Последний раз редактировалось alextrof94; 25.02.2015 в 18:26.
alextrof94 вне форума Ответить с цитированием
Старый 25.02.2015, 20:05   #6
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,156
По умолчанию

как вариант - не нравится расширение файлов - попробуйте выкладывать zip, rar архивы и их отдавать
ADSoft вне форума Ответить с цитированием
Старый 25.02.2015, 23:33   #7
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

Тогда будут траблы с автообновлением. Проблема, кстати, наблюдается только на авасте 2015, более старые версии никак не влияют.
alextrof94$gmail.com
alextrof94 вне форума Ответить с цитированием
Старый 27.02.2015, 01:04   #8
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

Вдруг кому понадобится еще:
аваст в 2015 версии сделал его еще более подозрительным, из-за чего почти весь самописный софт с сайтов без рейтинга режется до невозможности запуска. Сайт надо добавлять в исключения, а так же в исключения надо добавлять папку с программой, если программа имеет функцию автообновления в лоб (скачивается более свежая версия и заменяет собой старую).
alextrof94$gmail.com
alextrof94 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выгрузить данные из базы и отдать клиенту файл на скачивание Maxx PHP 2 04.09.2014 11:09
C++, задача на бинарный файл (Бинарный файл состоит из записей по 5 бит) zaitsevmishka Помощь студентам 3 16.05.2014 21:39
отдать файл на скачивание marwell. PHP 5 04.05.2014 23:20
отдать пользователю php файл aferistz PHP 9 19.07.2011 00:40
отдать файл на загрузку без перехода Rifler PHP 1 26.09.2010 13:20