|
|
|
| Естть 3 файла, все лежат в одной папке:
slide.swf - флэшка
lesson_0.php - Скрипт выдачи флэшки
<?php
// Функция выдачи файла
function get($file)
{
// Имя файла для выдачи
$filename = basename($file);
// Путь к файлу от корня
$file = $_SERVER['DOCUMENT_ROOT'].$file;
if(!is_file($file)) return NULL;
$handle = fopen($file, 'rb');
fseek($handle, 0, SEEK_END);
$size = ftell($handle);
// Если передан RANGE (запрос части)
// Вычисляем с какого по какой кусок файла недо передать
if(isset($_SERVER['HTTP_RANGE']))
{
$range = explode('=', $_SERVER['HTTP_RANGE']);
$range = explode('-', $range[1]);
if(!$range[0]) $range[0] = 0;
if($range[1]) ++$range[1];
else $range[1] = $size;
}
else $range = array(0, $size);
if($range[0] < 0) $range[0] = 0;
if($range[1] > $size) $range[1] = $size;
// Размер части и старт части
$part_size = $range[1]-$range[0];
$range_start = $range[0];
// Если передан запрос на часть файла
if($range[0] > 0 || $range[1] < $size)
{
// Стоп части
$range_stop = $range[1]-1;
header("206 HTTP/1.0 Partial content");
header("Content-Length: $part_size");
header("Content-Range: bytes $range_start-$range_stop/$size");
header("Accept-Ranges: bytes");
}
else
{
header("Content-Length: $size");
}
header('Content-Type: application/x-shockwave-flash; name="'.$filename.'"');
header('Content-Disposition: inline; filename="'.$filename.'"');
// Устанавливаем указатель на позицию Старт
fseek($handle, $range_start, SEEK_SET);
if($range[1] == $size)
{
fpassthru($handle);
}
else
{
for($blklen = 16384, $pos = $range_start; $pos < $range[1]; $pos += $buflen)
{
if($range[1]-$pos < $blklen)
$blklen = intval($range[1]-$pos);
$buffer = fread($handle, $blklen);
$buflen = strlen($buffer);
echo $buffer;
}
}
}
$file = 'slide.swf';
get($file);
?>
|
index.html - Простой штмл-файл, в который флэшка вставлена так:
<object id="presentation" width="640" height="516"
classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="lesson_0.php" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<param name="allowFullScreen" value="true" />
<embed src="lesson_0.php" quality="high" bgcolor="#ffffff" width="640" height="516"
name="presentation" align="middle" allowScriptAccess="sameDomain"
type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer" allowFullScreen="true" />
</object>
|
Проблема в том, что если slide.swf выдается скриптом lesson_0.php, то при заходе на страницу index.html, и когда начинается загрузка самой флэшки slide.swf, страница вешается полностью и не реагирует на клики по любым другим ссылкам, до тех пор, пока флэшка slide.swf полностью не загрузится.
Если эту же флэшку slide.swf, выдавать напрямую, так:
<object id="presentation" width="640" height="516"
classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="slide.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<param name="allowFullScreen" value="true" />
<embed src="slide.swf" quality="high"
bgcolor="#ffffff" width="640" height="516"
name="presentation" align="middle" allowScriptAccess="sameDomain"
type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer" allowFullScreen="true" />
</object>
|
то никаких проблем.
В чем может быть косяк? Может эта флэшка начинается грузиться на полной скорости, и забивает весь какнал? Может надо как-то органичить скорость выдачи файла в скрипте lesson_0.php? Или это какая-то особенность сервера? | |
|
|
|
|
|
|
|
для: tAleks
(13.04.2011 в 21:48)
| | 1) Какого размера флешка?
2) У самой флешки есть предзагрузчик?
3) Какова цель PHP-скрипта, почему так сложно отдается флешка?
4) Почему используется HTTP/1.0, а не HTTP/1.1 (очень даже может быть, что дело в этом)? | |
|
|
|
|
|
|
|
для: cheops
(13.04.2011 в 21:54)
| | >1) Какого размера флешка?
В данном примере, размер флэшки 47 мб - 2 часовая запись вебинара. Также пробовал на маленьких флэшках по 5-7 мб - эффект тот же самый, только сайт вешается на меньшее кол-во времени, потому что 5-7 мб грузятся быстрй, чем 47 мб.
>2) У самой флешки есть предзагрузчик?
Пробовал и с пердзагрузчиком, та же фигня, когда флэшка начинается грузиться (индикатор предзагрузчика двигается) сайт висит, на клики по ссылкам не отвечает.
>3) Какова цель PHP-скрипта, почему так сложно отдается флешка?
Цель - выдавать флэшки только авторизованым пользователям, чтобы небыло прямых ссылок, по которым к ним можно попасть без авторизации.
>4) Почему используется HTTP/1.0, а не HTTP/1.1?
Не знаю, скрипт выдачи файлов вообще писал давно. Может это мое упущение, сейчас поменяю, протестирую. :) | |
|
|
|
|
|
|
|
для: tAleks
(13.04.2011 в 22:03)
| | >Цель - выдавать флэшки только авторизованым пользователям, чтобы небыло прямых ссылок,
>по которым к ним можно попасть без авторизации.
Хм... а самой флешке её не хотите сделать? | |
|
|
|
|
|
|
|
для: cheops
(13.04.2011 в 22:06)
| | >>Цель - выдавать флэшки только авторизованым пользователям, чтобы небыло прямых ссылок,
>>по которым к ним можно попасть без авторизации.
>Хм... а самой флешке её не хотите сделать?
Нет, задача такая, чтобы именно доступа небыло, т.к. флэшки разные, из разных источников, поступают уже в готовом виде. | |
|
|
|
|
|
|
|
для: tAleks
(13.04.2011 в 22:03)
| | Протестировал. Поменял строку header("206 HTTP/1.0 Partial content"); на header("206 HTTP/1.1 Partial content"); - ничего не изменилось. | |
|
|
|
|
|
|
|
для: tAleks
(13.04.2011 в 22:08)
| | Ситуация во всех браузерах воспроизводится?
Adobe в своих плеерах и флешках могла нафиговертить что угодно... Не уверен, что там чистый файл идет по HTTP, хотя сам HTTP вроде не предоствляет широкого выбора... Наверное в такой систуации остается только гуглить заграницу или брать в руки снифер и смотреть что там на самом деле передается между сервером и Flash-плеером.
PS Как вариант, закрывать базовой авторизацией - не очень эстетично, зато флешки будут работать как обычно. | |
|
|
|
|
|
|
|
для: cheops
(13.04.2011 в 22:17)
| | >Ситуация во всех браузерах воспроизводится?
Да. Тестировал в Опере, в FF, в IE 8. Везде одно и то же.
>Adobe в своих плеерах и флешках могла нафиговертить что угодно... Не уверен, что там чистый файл идет по HTTP, хотя сам HTTP вроде не предоствляет широкого выбора...
Что значит "чистый файл"? И почему думаете что дело во флэшке? Ведь когда эта же флэшка, выдается напрямую, косяк не наблюдается.
>Наверное в такой систуации остается только гуглить заграницу или брать в руки снифер и смотреть что там на самом деле передается между сервером и Flash-плеером.
>PS Как вариант, закрывать базовой авторизацией - не очень эстетично, зато флешки будут работать как обычно.
Да, такая авторизация тоже не подходит, думал уже об этом. | |
|
|
|
|
|
|
|
для: tAleks
(13.04.2011 в 22:34)
| | >Что значит "чистый файл"?
>И почему думаете что дело во флэшке? Ведь когда эта же флэшка, выдается напрямую, косяк не
>наблюдается.
Вообще должно быть так. То что выдаете вы, ничем не отличается от того, что выдает ваш скрипт. Кроме того, дела Flash-плеера как бы не должны затрагивать другие потоки, даже если этому флешплееру выделили один поток на загрузку без дозагрузки... Если честно, у меня пока никаких здравых мыслей нет. Поищите снифер (наверное есть подходящий плагин для FF) и посмотрите, чем HTTP-обмен на обычной странице отличается от HTTP-обмена на вашей странице.
PS При помощи mod_rewrite или переопределением обработчика измените расширение скрипта на .swf - может этой заразе расширение php не нравится? | |
|
|
|
|
|
|
|
для: tAleks
(13.04.2011 в 21:48)
| | А нет ли где ненароком буфферизации вывода? | |
|
|
|
|
|
|
|
для: SHAman
(13.04.2011 в 22:39)
| | Есть такая штука.
Но для тестов делал чистый штмал, и в нем тоже такой же глюк. | |
|
|
|
|
|
|
|
для: tAleks
(13.04.2011 в 22:42)
| | Нет, имеется в виду в php.ini на уровне PHP? Не может скрипт отдачи файла притормаживать и вываливать информацию попозже огромным куском? | |
|
|
|
|
|
|
|
для: cheops
(13.04.2011 в 22:54)
| | Это какую строку там искать? И меня хостер-то к ней пустит, к этой строке? ;)
> Не может скрипт отдачи файла притормаживать и вываливать информацию попозже огромным куском?
Это как? | |
|
|
|
|
|
|
|
для: tAleks
(13.04.2011 в 22:55)
| | >Это какую строку там искать? И меня хостер-то к ней пустит, к этой строке? ;)
output_buffering (в phpinfo() посмотреть можно).
PS Хостер часом не masterhost? | |
|
|
|
|
|
|
|
для: cheops
(13.04.2011 в 22:59)
| | >output_buffering (в phpinfo() посмотреть можно).
phpinfo() - выдала что на хостинге в разделе Configuration PHP Core:
output_buffering = 4096 и Local Value и Master Value
Что это означает?
>PS Хостер часом не masterhost?
нет, sweb.ru | |
|
|
|
|
|
|
|
для: tAleks
(13.04.2011 в 23:04)
| | >Что это означает?
Это означает, что буферизация включена, но буфер размером 4Кб, т.е. как только в нем накапливается столько информации, она отправляется клиенту. Т.е. дело не в этом. | |
|
|
|
|
|
|
|
для: cheops
(13.04.2011 в 23:07)
| | Т.е. я не понял, данная буферизация в данном случае, для меня это хорошо или плохо? Че-то я не врубился в ее суть. (может потому что у меня уже 2 час ночи.. ;) | |
|
|
|
|
|
|
|
для: tAleks
(13.04.2011 в 23:13)
| | В данном случае вам от неё не тепло, не жарко. | |
|
|
|
|
|
|
|
для: tAleks
(13.04.2011 в 22:55)
| | >Это как?
По умолчанию PHP-скрипт действует как интерпретатор, произошло событие выдачи информации - она отправилась клиенту, если включена буферизация, информация клиенту может отправиться только после того, как скрипт закончил работу (если буфер не переполнится, хотя по моим представлениям 50Мб для буфера многова-то, должен переполняться). | |
|
|
|
|
|
|
|
для: cheops
(13.04.2011 в 23:01)
| | >хотя по моим представлениям 50Мб для буфера многова-то, должен переполняться.
50 мб, имеется ввиду что моя флэшка 47 мб (почти 50 мб) слишком большая? Но ведь и маленькие по 5-7 мб тоже глючат. | |
|
|
|
|
|
|
|
для: tAleks
(13.04.2011 в 23:07)
| | О чем и речь, что буфер не может зажать такую кучу информации, тем более, что мы выяснили, что он 4Кб и ничего спрятать от браузера не может. | |
|
|
|
|
|
|
|
для: tAleks
(13.04.2011 в 21:48)
| | Попробуйте все-таки lesson_0.php превратить в slide.swf (при помощи .htacces), я боюсь, что следующие заголовки могут быть причиной: как бы разница в двух вызовах только в названии файла, а вы имя одно подставляете, а через HTTP-заголовок сообщаете другое, может Flash-плеер от греха подальше файл полностью и грузит. А может он вообще файлы переименовывать не умеет и оставляет это дело браузеру.
header('Content-Type: application/x-shockwave-flash; name="'.$filename.'"');
header('Content-Disposition: inline; filename="'.$filename.'"');
|
| |
|
|
|
|
|
|
|
для: cheops
(13.04.2011 в 23:19)
| | В мод_реврайте не очень разбираюсь, подскажите если не сложно, кратенький пример, на мою тему. Спасибо! | |
|
|
|
|
|
|
|
для: tAleks
(13.04.2011 в 23:27)
| | В .htaccess поместите следующие строки
RewriteEngine on
RewriteRule slide.swf lesson_0.php [L]
| и в качестве имени используйте slide.swf, сервер при запросе slide.swf, отдаст результат выполнения lesson_0.php. | |
|
|
|
|
|
|
|
для: cheops
(13.04.2011 в 23:31)
| | Это при условии, что все это лежит в корне сайта? или это не важно? | |
|
|
|
|
|
|
|
для: tAleks
(13.04.2011 в 23:33)
| | Не важно, в любом случае всегда сможете проверить, обратившись к файлу slide.swf напрямую через строку запроса - если начнется загружаться, значит ReWrite-правила сработали, если вернет 404 ошибку, значит правила не сработали. | |
|
|
|
|
|
|
|
для: cheops
(13.04.2011 в 23:31)
| | Сделал, правило сработало, файл выдается, но сайт также висит, когда идет загрузка.... | |
|
|
|
|
|
|
|
для: tAleks
(13.04.2011 в 21:48)
| | Если кому не сложно, протестируйте, плиз, у себя этот скрипт, мне чтобы хотя бы узнать, это дело в хостинге, или в чем-то дургом.
Я на файлообменник залил 3 этих файла: http://files.mail.ru/HMHU6H
slide.swf только урезал до 8 мб.
В файле index.html сверху две ссылки:
1. '/' - веедт на главтную страницу сайта
2. '/registration/'
Нужно узнать, получится ли перейти по этим ссылкам в то время, когда идет загрузка флэшки.
Буду очень благодарен. Спасибо. | |
|
|
|
|
|
|
|
для: tAleks
(14.04.2011 в 12:29)
| | Мне удается переходить (Opera 11.10, Apache 2.2, PHP 5.2). | |
|
|
|
|
|
|
|
для: tAleks
(13.04.2011 в 21:48)
| | ОПА! Кажись нашел куда рыть...
У меня в корне лежит .htaccess в которм есть директива php_value auto_prepend_file
Закинул сейчас все эти три файла в отдельную папку, и закинул туда же .htaccess с директивой php_value auto_prepend_file none - и все заработало...
Сейчас буду разбираться, что же там, в этом автоподключаемом файле мне мешает.... :)
Всем спасбио за участие. | |
|
|
|
|
|
|
|
для: tAleks
(14.04.2011 в 12:38)
| | Накопал кое-что, но логику понять не могу. Помогите разобраться.
Суть в следующем.
В одном из автоматически включаемых файлов (php_value auto_prepend_file) стартуеет именуемая сессия:
session_name('root');
session_start();
|
И это как то связано с вышеописанным глюком.
Сделал следующий эксперимент:
1. Отключил php_value auto_prepend_file none
2. старт сессию перенес в файл lesson_0.php, в начало файла добавил две строки:
session_name('root');
session_start();
|
В итоге, глюк присутствует. Убираю две эти строки - глюк отсутствует.
Но, самое интересное в том, что не нравится имя сессии. Если делаю имя сессии например session_name('root1'), то глюка нет.
Еще один эесперимент
На сайте есть несколько субдоментов (на сайте есть несколько консультантов, и каждому консультанту выдается субдомен, например sergei.site.ru) и на субдоменах сессия именуется по субдомену. Например на субдомене sergei.site.ru сессия именуется session_name('sergei'). И прикол в том, что если захожу на страницу c флэшкой с субдомена sergei.site.ru (сессия sergei) - глюк есть. Переименовываю сессию вручную, например на sergei1, захожу с субдомена sergei.site.ru - глюка нет.
Вывод (мой, изходя из экспериментов):
На главном домене site.ru "ему" не нравится имя сессии root.
На субдоменах - не нравтся имя сессии, такое же как первая часть субдомена.
Короче, че-то я уже совсем запустался с этим косяком.
Нужна экстренняя помощь. Буду сильно благодарен! Помогите распутаться.... | |
|
|
|
|
|
|
|
для: tAleks
(14.04.2011 в 14:31)
| | Интересно, но не понятно. Вроде cookie, которые устанавливает Flash (да и самостоятельно ей это делать как бы не пошто) не должны пересекаться с пользовательскими cookie, тем более в таких простых названиях, как root. | |
|
|
|
|
|
|
|
для: cheops
(14.04.2011 в 14:46)
| | Сам в шоке...
Есть какие-нибудь идеи, как победить этот глюк?
Примечание: Только что еще раз протестировал в Опере и в FF - глюка нет.
В IE8 - глюк есть.
Че-то я вообще запустлся....
Прошу помощи. | |
|
|
|
|
|
|
|
для: tAleks
(14.04.2011 в 14:55)
| | Ну то, что глюк только в Internet Explorer как раз нормально, для него Flash-плеер отдельно создается в виде ActiveX. Теоретически его поведение должно отличаться от поведения Flash-плеера для других браузеров. Вы даже флешку два раза из-за этого на страницу вставляете: собственно <object> как раз для Internet Explorer, а <embed> для всех остальных. | |
|
|
|
|
|
|
|
для: cheops
(14.04.2011 в 15:10)
| | Да, за пару лет программирования, я уже понял, что IE - это особый браузер....
Но вопрос остается открытым... как все-таки эту "хрень" победить... и че она привязалась к именам сессий... ? | |
|
|
|
|
|
|
|
для: tAleks
(13.04.2011 в 21:48)
| | Сижу кавыряюсь уже третий день. Создал на хостинге отдельную папку для тестового сайта, подцепил к этой папке субдомен, и целый день экспериментирую, вычисляю в чем косяк.
Результат экспериментов следующий.
В файле .htaccess есть директива php_value auto_prepend_file "config.php"
В файле config.php стартует именованная сессия:
session_name('root');
session_start();
|
Так вот, если config.php подключаю через php_value auto_prepend_file то вышеописанный глюк присутствует в браузере IE8.
Если config.php подключаю конструкцией include() в файле lesson_0.php, то все нормально.
Кто разбирается в PHP, серверах, и прочих хитростях, у кого какие мысли есть на этот счет?
Может где в настройках есть еще какие-нибдь фишки, которые определяю как именно включается код, через директиву php_value auto_prepend_file, или еще что-то....? | |
|
|
|
|
|
|
|
для: tAleks
(14.04.2011 в 22:39)
| | Если не сильно утомились, то попробуйте заменить include() на require() - ситуация изменяется или тоже все нормально? | |
|
|
|
|
|
|
|
для: cheops
(14.04.2011 в 23:29)
| | >Если не сильно утомились, то попробуйте заменить include() на require() - ситуация изменяется или тоже все нормально?
Ничего не изменилось, с require() глюк не наблюдается, все точто так же как и с include().
Если не трудно, протестируйте еще раз у себя, с включением файла config.php через .htaccess, и тестом в IE8.
Выложил архив сюда: http://files.mail.ru/J7P97W
Нужно будет только в .htaccess поправить путь от корня до config.php
На главной странице, в которую вставлена флэшка, сверху есть ссылка. Получится ли по ней перейти, в то время когда флэшка грузится.
Спасибо! | |
|
|
|
|
|
|
|
для: tAleks
(15.04.2011 в 11:37)
| | Да, получается. | |
|
|
|
|
|
|
|
для: cheops
(15.04.2011 в 16:32)
| | >Да, получается.
Получается перейти по ссылке в момент когда флэшка грузится, именно в IE8? И когда конфиг подключен через .htaccess php_value auto_prepend_file? | |
|
|
|
|
|
|
|
для: tAleks
(15.04.2011 в 20:13)
| | Да, получается. Правда, у меня IE 8 сейчас под рукой нет, тестировал в IE 7.
>И когда конфиг подключен через .htaccess php_value auto_prepend_file?
Да (путь отредактировал под свой виртуальный хост). | |
|
|
|
|
|
|
|
для: cheops
(15.04.2011 в 21:00)
| | Да, это меня в конец запутало... даже не знаю на кого бочку катить....
Можно я вам в личку пришлю ссылку на мой тестовый сайт, где у меня лично этот глюк проявляется. Может у меня с бразуером что-то не то? Хотя я просил друга протестировать, у него тоже висяк.
Если можно, напишите, я в личку скину ссылку. Спасибо. | |
|
|
|
|
|
|
|
для: tAleks
(15.04.2011 в 22:13)
| | Давайте.
PS Выясните версию своего флеш-плеера (может в нем затык). | |
|
|
|
|
|
|
|
для: cheops
(15.04.2011 в 22:19)
| | Спасибо!
Отправил сообщение в личку.
Версия плеера 10.2.153.1... | |
|
|
|
|
|
|
|
для: cheops
(15.04.2011 в 22:19)
| | Только что обновли флэш-плеер до последней 10.2.159.1 версии. Результата никакого, тот же висяк. | |
|
|
|
|
|
|
|
для: tAleks
(16.04.2011 в 08:49)
| | На конечном сервере ситуация воспроизводится. Все как вы и описывали: в IE пока флешка грузится переход по ссылкам не осуществляется, новые вкладки не открываются, в Opera все нормально. | |
|
|
|
|
|
|
|
для: cheops
(16.04.2011 в 09:10)
| | Есть какие-нибудь идеи, как решить данную задачу?
Может это связано с какими-то другими настройками сервера? Может через .htaccess что-то надо поднастроить? Только вот, что именно? Есть какие нибудь идеи на этот счет? Хотя бы напраление, какие-нибудь зацепки, в какую сторону хоть идти? | |
|
|
|
|
|
|
|
для: tAleks
(16.04.2011 в 12:12)
| | Отказывайтесь от auto_prepend_file. Тем более, что это не совсем хорошо с архитектурной точки зрения и сильно снижает читабельность кода, я бы в .htaccess не догадался бы посмотреть (думаю масса разработчиков о такой возможности либо не подозревают, либо не помнят). Да и при установке движка, .htaccess придется редактировать, восстанавливая полный путь. Лучше использовать require(). | |
|
|
|
|
|
|
|
для: cheops
(16.04.2011 в 12:16)
| | В том-то и дело, что движок самодельный, и сейчас чтобы это все передалть, надо все файлы перелапатить, и перезалить - тоже не очень хочется.
А если хостеру какой-нибудь вопрос задать? Как думаете, поможет, или пошлет? Ведь если на вашем сервере все работает, значит это либо совсем невероятный полтергейст, либо что-то с настройками сервера.
Подскажите, с какими настройками это в принципе может быть связано? Может лимиты памяти, или еще что-то? Хотя бы чисто гипотетически, какие настройки могут на это влиять? | |
|
|
|
|
|
|
|
для: tAleks
(16.04.2011 в 12:23)
| | Странно, что это только в IE, хостер скорее всего протестирует в другом браузере и скажет, что все нормально или скажет, что за ошибки Microsoft не отвечает - в других браузерах же все нормально. Очень слабые позиции, чтобы атаковать службу тех.поддержки. | |
|
|
|
|
|
|
|
для: cheops
(16.04.2011 в 13:41)
| | А можете мне скинуть настройки вашего сервера? Я их сравню со своими, может что-нибудь экспериментальным путем вычислю... | |
|
|
|
|
|
|
|
для: tAleks
(16.04.2011 в 14:50)
| | Да я собственно сервер никак особо не настраивал, это сервер на локальном хосте... если настройки вам как-нибудь помогут, могу поделиться.
PS Кроме того вы сообщали, что у вас явно какие-то привязки к доменным именам, когда доменное имя совпадает с именем SID сессии (в этих условиях, я не проверял), явно назначаемое при помощи функции session_name(). | |
|
|
|
|
|
|
|
для: cheops
(16.04.2011 в 14:54)
| | >Да я собственно сервер никак особо не настраивал, это сервер на локальном хосте... если настройки вам как-нибудь помогут, могу поделиться.
Да, буду благодарен. Скиньте настройки на маил. (мали напишу в личку).
Поэкспериментирую, может что и получится. | |
|
|
|
|
|
|
|
для: tAleks
(17.04.2011 в 22:55)
| | Хорошо, скину в ближайшие часы. | |
|
|
|