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

Статус
В этой теме нельзя размещать новые ответы.

kalabro

Постоялец
Регистрация
11 Авг 2007
Сообщения
73
Реакции
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.
Возможно ли это?
 
Это можно реализовать при помощи ЧПУ, тоесть использовать нужно mod_rewrite

Добавлено через 7 минут
Это можно реализовать при помощи ЧПУ, тоесть использовать нужно mod_rewrite
Запись в .htaccess будет выглядеть примерно так
Код:
RewriteEngine   on
RewriteBase     /
RewriteRule     ^/pict/katya.jpg$  /files/katya.jpg

в свойствах картинки путь будет показан само собой не настоящий а тот который тебе нужен, ну а про подстановку даты подумай сам если не получится помогу
 
  • Заблокирован
  • #3
Это можно реализовать при помощи ЧПУ, тоесть использовать нужно mod_rewrite
Добавлено через 7 минут

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

Код:
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);
?>
 
Использовать для отдачи картинки php код плохая идея, тем более с regexp`ом. Во первых это излишне нагружает сервер. Во вторых если захочешь потом оптимизировать работу сайта, например через ngnix будет гиморой по переписыванию этого куска.

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

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

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

p.s. Вопрос с TC: А зачем ты хочешь это сделать? Задам вопрос подругому, в чем смысл таких манипуляций?
 
  • Заблокирован
  • #5
Использовать для отдачи картинки php код плохая идея, тем более с regexp`ом. Во первых это излишне нагружает сервер. Во вторых если захочешь потом оптимизировать работу сайта, например через ngnix будет гиморой по переписыванию этого куска.
Помоему более универсальное правило должно выглядеть так:
RewriteRule ^\/pict\/(\w*)[\d|\_]+\.jpg$ /files/$1.jpg
правда здесь ограничения на названия оригинальной картинки накладываются.
не пробовал в реальной работе, но должно работать, если что пиши поправлю.
p.s. Вопрос с TC: А зачем ты хочешь это сделать? Задам вопрос подругому, в чем смысл таких манипуляций?

Как раз этот скрипт универсален. Я сам апач не юзаю. Онли нгинкс + фастцги. А при переносе правил из .htaccess
в конфиг нгинкса можно вобще отказаться от регекспов.Ибо все запросы идут на 1 скрипт. Возможно у вас проблемы со зрением, но в топике ясно сказано на чём должно быть написано. А регекспы в скрипте - лишь примеры возможной реализации. Так что вашему ценному комменту низачот.
 
Озаботился корректным ответом на этот вопрос, правильное решение:
RewriteRule ^pict\/([^_]*)_([^_]*)\.jpg$ /files/$1.jpg [L]

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

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

В связи со всем вышеизложенным, позволю себе не согласиться, с вашим комментарием "Так что вашему ценному комменту низачот."
 
  • Заблокирован
  • #7
Это можно реализовать при помощи ЧПУ, тоесть использовать нужно mod_rewrite
Добавлено через 7 минут

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

А можно таким способом изменить пусть не к одной картинке а к 5-8... или даже на шелую папку?Допустим в dle, что бы небыло Для просмотра ссылки Войди или Зарегистрируйся картинка, а Для просмотра ссылки Войди или Зарегистрируйся картинка???
 
А можно таким способом изменить пусть не к одной картинке а к 5-8... или даже на шелую папку?Допустим в dle, что бы небыло Для просмотра ссылки Войди или Зарегистрируйся картинка, а Для просмотра ссылки Войди или Зарегистрируйся картинка???

Вот же пример, который это и делает:
RewriteRule ^pict\/([^_]*)_([^_]*)\.jpg$ /files/$1.jpg [L]


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