Прямые ссылки на изображения

Автор kak2z, 26 июля 2012, 15:56:42

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

kak2z

Ну собственно сажб. У меня на форуме просто дофига вложений..  сейчас пользуюсь сторонним хостингом но скорее всего буду возвращаться на вложения СМФ.
Хотелось бы разгрузить движок и сделать так что бы ссылки были прямые...
Как думает уважаемое сообщество имеет ли смысл моя идея?
И если имеет то как сделать так что бы вложения отдавались напрямую.

П.С. То что они не будут участвовать в раздаче прав ничего страшного.
Если нужно что то исправить, обновить, переставить, настроить, сделать форум заново - пишите в ЛС)

kak2z

Если нужно что то исправить, обновить, переставить, настроить, сделать форум заново - пишите в ЛС)

Mr. Anviss

Чего то я не с первого раза понял. Еще раз поподробнее.

digger®

Цитата: kak2z от 29 июля 2012, 20:03:06
Никто не знает? (((
Сделать чтобы вложения отдавались напрямую легко. Вот только вид они будут иметь такой www.мойфорум/attachments/d90674261951cbc87574553acdf50bbbb028eb20
Чтобы был толк, придется выпилить шифрование целиком, начиная с момента загрузки файла.

Mavn

еще и отслеживать чтобы к файлу какой-нибудь индекс добавлялся к названию, а то будут проблемы с одинаковыми именами файлов
SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

п.2 У вас нет желания читать правила раздела, у меня нет желания одобрять темы, которые не соответствуют этим правилам.

kak2z

Ну да)) все правильно))) что бы в данном случае не апач генерировал картинку, а она отдавалась как статика.

Спасибо.
Если нужно что то исправить, обновить, переставить, настроить, сделать форум заново - пишите в ЛС)

Mr. Anviss

#6
Kak2z,
я так понял у вас на ВПС стоит кеширующий прокси nginx, а за ним наверное прячется Apache. При таком раскладе можно было бы сделать так. Apache будет отдавать nginx заголовок X-Accel-Redirect в результате чего статика будет отдаваться через nginx, а Apache будет делать выборку инфы из базы и повторюсь, отдавать заголовок nginx.
Для этого надо сделать следующее:
В файле конфигурации nginx в секцию server{} добавить раздел:
location /attachments {
root /path_to_attachments_folder;
internal;
}

В файле Sources/Display.php (ф-ция Download) найти и заменить код:
// Since we don't do output compression for files this large...
if (filesize($filename) > 4194304)
{
// Forcibly end any output buffering going on.
if (function_exists('ob_get_level'))
{
while ([at]ob_get_level() > 0)
[at]ob_end_clean();
}
else
{
[at]ob_end_clean();
[at]ob_end_clean();
[at]ob_end_clean();
}

$fp = fopen($filename, 'rb');
while (!feof($fp))
{
if (isset($callback))
echo $callback(fread($fp, 8192));
else
echo fread($fp, 8192);
flush();
}
fclose($fp);
}
// On some of the less-bright hosts, readfile() is disabled.  It's just a faster, more byte safe, version of what's in the if.
elseif (isset($callback) || [at]readfile($filename) == null)
echo isset($callback) ? $callback(file_get_contents($filename)) : file_get_contents($filename);

на следующий:

// Since we don't do output compression for files this large...
        if (filesize($filename) > 4194304)
        {
                // Forcibly end any output buffering going on.
                if (function_exists('ob_get_level'))
                {
                        while ([at]ob_get_level() > 0)
                                [at]ob_end_clean();
                }
                else
                {
                        [at]ob_end_clean();
                        [at]ob_end_clean();
                        [at]ob_end_clean();
                }

                if(isset($_SERVER['HTTP_USER_AGENT']) and strpos($_SERVER['HTTP_USER_AGENT'],'MSIE'))
    header('Content-Type: application/force-download');
else
    header('Content-Type: application/octet-stream');
if(strpos($_SERVER['HTTP_USER_AGENT'],'MSIE'))
    header('Content-Disposition: attachment; filename="'.urlencode($real_filename).'"');
else
    header('Content-Disposition: attachment; filename="'.$real_filename.'"');
header("X-Accel-Redirect: /attachments/".$id_attach."_".$file_hash);
        }
        // On some of the less-bright hosts, readfile() is disabled.  It's just a faster, more byte safe, version of what's in the if.
        if(filesize($filename) < 4194305)
{
if(isset($_SERVER['HTTP_USER_AGENT']) and strpos($_SERVER['HTTP_USER_AGENT'],'MSIE'))
header('Content-Type: application/force-download');
else
header('Content-Type: application/octet-stream');
if(strpos($_SERVER['HTTP_USER_AGENT'],'MSIE'))
header('Content-Disposition: attachment; filename="'.urlencode($real_filename).'"');
else
header('Content-Disposition: attachment; filename="'.$real_filename.'"');
header("X-Accel-Redirect: /attachments/".$id_attach."_".$file_hash);
}
elseif (isset($callback) || [at]readfile($filename) == null)
echo isset($callback) ? $callback(file_get_contents($filename)) : file_get_contents($filename);

Перезагрузить файл конфигурации в nginx: service nginx reload
Таким образом не надо трогать вложения (выпиливать или добавлять префикс).
Имя файла будет таким как оно указано в поле filename таблицы {prefix}attachments
Еще между прочим можно будет регулировать скорость отдачи вложений из этой папки с помощью nginx
Цитата: kak2z от 26 июля 2012, 15:56:42П.С. То что они не будут участвовать в раздаче прав ничего страшного.
Очень даже и будут.
P.S. естественно если аттачменты лежат стандартно в папке attachments

kak2z

#7
Цитата: kak2z от 01 августа 2012, 08:27:45P.S. естественно если аттачменты лежат стандартно в папке attachments
Спасибо большое! Но у меня 22 папки вложений (и будут еще много много добавляться) что тогда мне делать?)
Если нужно что то исправить, обновить, переставить, настроить, сделать форум заново - пишите в ЛС)

Mr. Anviss

kak2z,
Если они находятся в папке attachments то все в порядке, будет работать и так.

kak2z

Цитата: Mr. Anviss от 01 августа 2012, 22:48:34
kak2z,
Если они находятся в папке attachments то все в порядке, будет работать и так.

у меня папки attachments  attachments1 attachments2 attachments3 и т.п. в корне сайта.
Теоретически я могу их сделать поддиректориями attachments - тогда будет работать?
Если нужно что то исправить, обновить, переставить, настроить, сделать форум заново - пишите в ЛС)

Mr. Anviss