1. Задавайте здесь вопросы о коде, которые не подходят в другие разделы, такие как:
    Дизайн > Верстка
    PHP > Как сделать на PHP
    Скрыть объявление

Скачивание файлов (PHP)

Тема в разделе "Web Coding", создана пользователем kalabro, 26 сен 2007.

Статус темы:
Закрыта.
Модераторы: latteo
  1. kalabro

    kalabro Постоялец

    Регистр.:
    11 авг 2007
    Сообщения:
    74
    Симпатии:
    6
    Всем привет! Предполагаю, что задача банальна.
    Есть файл на сервере. Путь к нему
    http://mysite.com/files/katya.jpg (да-да, картиночка, и допустим, никто кроме меня путь к ней не знает)
    1) Скрипт должен открывать ее по
    http://mysite.com/pict/katya_а_здесь_сегодняшняя_дата_например.jpg (директории pict естественно не существует)
    2) Когда человечек по этой картинке щелкнет правой кнопкой мышки в свойствах не должно быть http://mysite.com/files/katya.jpg, а должно быть http://mysite.com/pict/katya_а_здесь_сегодняшняя_дата_например.jpg.
    Возможно ли это?
     
  2. terkin

    terkin

    Регистр.:
    9 дек 2006
    Сообщения:
    513
    Симпатии:
    162
    Это можно реализовать при помощи ЧПУ, тоесть использовать нужно mod_rewrite

    Добавлено через 7 минут
    Запись в .htaccess будет выглядеть примерно так
    Код:
    RewriteEngine   on
    RewriteBase     /
    RewriteRule     ^/pict/katya.jpg$  /files/katya.jpg
    в свойствах картинки путь будет показан само собой не настоящий а тот который тебе нужен, ну а про подстановку даты подумай сам если не получится помогу
     
  3. hate-u

    hate-u Создатель

    Заблокирован
    Регистр.:
    19 мар 2007
    Сообщения:
    11
    Симпатии:
    2
    Код:
    RewriteEngine On
    RewriteRule   ^pict/  main.php
    main.php
    PHP:
    <?php
    $query 
    explode('/',$_SERVER['REQUEST_URI']);
    if(empty(
    $query[2])) exit('404');
    // тут уже решаем как парсить название картинки
    preg_match('/(.*)_(.+[a-z]{1,4})\.(.*)/i'$query[2], $pic);
    // Хинт. Можно добавить в регулятивное выражение чек на длину
    if($pic[3]!='gif'&&$pic[3]!='jpg'/*, etc...*/) exit('404');
    $fname $pic[1].'.'.$pic[3];
    // Проверяем наличие файла
    if(!is_file('files/'.$fname)) exit('404');

    if(
    $pic[3]=='gif')
      
    header("Content-type: image/gif");
    // else ...
    readfile('files/'.$fname);
    ?>
     
  4. nnmkayf

    nnmkayf

    Регистр.:
    25 июл 2007
    Сообщения:
    153
    Симпатии:
    98
    Использовать для отдачи картинки php код плохая идея, тем более с regexp`ом. Во первых это излишне нагружает сервер. Во вторых если захочешь потом оптимизировать работу сайта, например через ngnix будет гиморой по переписыванию этого куска.

    Помоему более универсальное правило должно выглядеть так:

    RewriteRule ^\/pict\/(\w*)[\d|\_]+\.jpg$ /files/$1.jpg

    правда здесь ограничения на названия оригинальной картинки накладываются.
    не пробовал в реальной работе, но должно работать, если что пиши поправлю.

    p.s. Вопрос с TC: А зачем ты хочешь это сделать? Задам вопрос подругому, в чем смысл таких манипуляций?
     
  5. hate-u

    hate-u Создатель

    Заблокирован
    Регистр.:
    19 мар 2007
    Сообщения:
    11
    Симпатии:
    2
    Как раз этот скрипт универсален. Я сам апач не юзаю. Онли нгинкс + фастцги. А при переносе правил из .htaccess
    в конфиг нгинкса можно вобще отказаться от регекспов.Ибо все запросы идут на 1 скрипт. Возможно у вас проблемы со зрением, но в топике ясно сказано на чём должно быть написано. А регекспы в скрипте - лишь примеры возможной реализации. Так что вашему ценному комменту низачот.
     
  6. nnmkayf

    nnmkayf

    Регистр.:
    25 июл 2007
    Сообщения:
    153
    Симпатии:
    98
    Озаботился корректным ответом на этот вопрос, правильное решение:
    RewriteRule ^pict\/([^_]*)_([^_]*)\.jpg$ /files/$1.jpg [L]

    персонально для hate-u:
    Судя по решениям которые вы используете "Онли нгинкс + фастцги" - проблема производительности серверов вас не сильно беспокоит. Как "быстро" работает php как fastCGI - всем известно. Если нет можно посмотреть на примере тестов Drupal h__p://buytaert.net/drupal-webserver-configurations-compared

    "ясно сказано на чём должно быть написано" - вопрос у кого проблемы со зрением скорее к вам, так как ТС не ограничивала в вариантах решений.

    В связи со всем вышеизложенным, позволю себе не согласиться, с вашим комментарием "Так что вашему ценному комменту низачот."
     
  7. hahack

    hahack Читатель

    Заблокирован
    Регистр.:
    17 сен 2007
    Сообщения:
    71
    Симпатии:
    6
    А можно таким способом изменить пусть не к одной картинке а к 5-8... или даже на шелую папку?Допустим в dle, что бы небыло http://mysites.ua/uploads/post/и картинка, а http://mysites.ua/img/и картинка???
     
  8. nnmkayf

    nnmkayf

    Регистр.:
    25 июл 2007
    Сообщения:
    153
    Симпатии:
    98
    Вот же пример, который это и делает:
    RewriteRule ^pict\/([^_]*)_([^_]*)\.jpg$ /files/$1.jpg [L]


    при обращении к любой jpg картинке по пути pict будет показана эта картинка из папки files.
    Почитай про apache mod_rewrite
    p.s. Конечно RewriteEngine on должен быть прописан.
     
Статус темы:
Закрыта.