ФорумПрограммированиеPHP для идиотовРасширения PHP → Прошу помочь. Smarty + php

Прошу помочь. Smarty + php

  • maximum_ru

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz 5 июня 2011 г. 16:09

    Все выходные ковыряю интернет, но проблема не решается.

    Проблема такая…
    Сайт построен с применением smarty

    На сайте есть папка с фотографиями, имеющими адреса вида… http://sitename.ru/images/photos/12345.jpg (и так далее)
    На странице , например view.php (в соотв. шаблоне view.tpl) имеется код.


    {section name=pm_loop loop=$pms}
    {if $pms[pm_loop].ps_photo}
    <a href="{$pms[pm_loop].ps_photo}" target="_blank">
    <img src="{$pms[pm_loop].ps_photo}" width="150px"/>
    </a>
    {/if}
    {/section}

    где $pms[pm_loop].ps_photo является по сути адресом картинки

    Я хочу лишить всех возможности заходить по ссылке http://sitename.ru/images/photos/12345.jpg и видеть фото.
    для этого пихаю в папку с картинками .htaccess, где запрещаю все и всем.
    После этого создаю файл viewfoto.php, где пишу
    <?php
    $bububu="вот тут не знаю что писать";
    header("Content-Type: image/gif");
    readfile($bububu);
    ?>


    переменной bububu надо как-то дать адрес картинки (тот, который $pms[pm_loop].ps_photo)
    Но я не понимаю как это сделать. Видимо надо как-то передать значение из tpl файла в viewfoto.php. Мне это не под силу оказалось.

    Возможно есть какое-то более простое решение, но я его не вижу.
    Прошу помощи :)

    Также есть вопрос по поводу запрета в htaccess(deny from all) - не помешает ли он функции readfile прочесть картинку?
    Спустя 167 сек.
    забыл написать, что в view.tpl, соответственно, нужно будет заменить ссылку на <a href="viewfoto.php">тут текст или картинка</a>
  • Frozzeg

    Сообщения: 5641 Репутация: N Группа: Джедаи

    Spritz 5 июня 2011 г. 16:10, спустя 1 минуту 33 секунды

    я не атец программинга, но сделал бы так:

    вместо ссылок типа 1024.jpg были ссылки viewfoto.php?=1024.jpg, т.е. в гет параметре передаем название картинки в управляющий скрипт, который уже определяет можно ли показать эту каритнку или нет

    ну и с помощью mod_rewrite можно превратить ссылки вида viewfoto.php?=1024.jpg в 1024.jpg
    You can be anything you want to be. Just turn yourself into anything you think that you could ever be.
  • maximum_ru

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz 5 июня 2011 г. 16:23, спустя 12 минут 37 секунд

    передаем название картинки в управляющий скрипт, который уже определяет можно ли показать эту картинку или нет

    проблема в том, что в этой папке хранится куча фото (пользователи прикладывают к личн. сообщениям фото и отсылают другим пользователям) Т.е. фото должно быть доступно для двоих (отправитель и получатель)
    И сваять такую проверку я не смогу - она мне кажется многократно сложнее того способа, который я тут описал. Вот.

    Вся возня для того, чтобы никто не мог написать в браузере http://sitename.ru/images/photos/1.jpg, потом поменять цифру на 2 и посмотреть второе фото и так далее. И в то же время чтобы два пользователя видели данное фото.
    Как то так. Может пытаюсь изобрести велосипед.
  • Frozzeg

    Сообщения: 5641 Репутация: N Группа: Джедаи

    Spritz 5 июня 2011 г. 16:25, спустя 2 минуты 37 секунд

    вообще на такой случай хеш придумали )
    You can be anything you want to be. Just turn yourself into anything you think that you could ever be.
  • maximum_ru

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz 5 июня 2011 г. 16:30, спустя 4 минуты 21 секунду

    вообще на такой случай хеш придумали )

    а где почитать про это? и какой запрос в поиске?

    я в программировании вообще не рублю, и чую, что хэш - это дебри)
  • Frozzeg

    Сообщения: 5641 Репутация: N Группа: Джедаи

    Spritz 5 июня 2011 г. 16:32, спустя 2 минуты 24 секунды

    хеш это рандом, файлы нужно сохранять ввиде jakd456w54dq65adas54dqw.jpg

    почитай про функцию md5() :D

    ну проблему с уже загруженными картинками это не решит

    хотя можно пройтись по всем файлам и переименовать
    You can be anything you want to be. Just turn yourself into anything you think that you could ever be.
  • maximum_ru

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz 5 июня 2011 г. 16:38, спустя 5 минут 59 секунд


    хеш это рандом, файлы нужно сохранять ввиде jakd456w54dq65adas54dqw.jpg
    почитай про функцию md5() :D


    спасибо, почитаю.
    но, отвлекаясь от рандомных имен, - не знаешь как присвоить переменной $bububu нужный адрес, который знает view.tpl ?
    я читал про get_template_vars (вроде то что нужно) но реализовать все же не удалось.
  • Frozzeg

    Сообщения: 5641 Репутация: N Группа: Джедаи

    Spritz 5 июня 2011 г. 17:00, спустя 21 минуту 53 секунды

    не знаю
    You can be anything you want to be. Just turn yourself into anything you think that you could ever be.
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 5 июня 2011 г. 18:36, спустя 1 час 36 минут 4 секунды

    тебе надо написать rewrite, который адрес http://sitename.ru/images/photos/12345.jpg направит на скрипт и передаст в виде параметра - запрашиваемую картинку, ты ее в скрипте откроешь через file_get_contents и отдашь
    все умрут, а я изумруд
  • maximum_ru

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz 5 июня 2011 г. 18:58, спустя 22 минуты 3 секунды

    тебе надо написать rewrite, который адрес http://sitename.ru/images/photos/12345.jpg направит на скрипт и передаст в виде параметра - запрашиваемую картинку, ты ее в скрипте откроешь через file_get_contents и отдашь

    я php не знаю абсолютно, smarty тоже.
    эта рекомендация мне в простой логике понятна. но интерпретировать в код я ее не могу :(
    я полагал, что смогу какой нибудь код вписать вместо "вот тут не знаю что писать"… например "взять значение переменной ($pms[pm_loop].ps_photo) из view.php"

    вот. а file_get_contents и хэши уводят меня в дебри. Я прекрасно понимаю, что оно так и правильней и проще и все такое. Но не могу я это осилить)) Для этого нужно php изучить сначала. А мне, во-первых, хочется "стулья вперед", а во вторых за php я брался уже не один и не два раза. Не понимаю я его. Или не по тем "учебникам" начинаю изучать.
    так что фактически я, видимо, отношусь к тем, кому необходимо "написать за них", но кагбэ и не надеюсь ни на что.

    так что за советы спасибо огромное, но реализовать у меня их не получается :(
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 5 июня 2011 г. 19:00, спустя 2 минуты 24 секунды

    ну, значит не правильно выбран раздел
    перенеси в предлагаю работу и кто-нибудь тебе сделает это за деньги, там дел не на долго и не на дорого
    все умрут, а я изумруд
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 5 июня 2011 г. 19:09, спустя 8 минут 14 секунд

    Я хочу лишить всех возможности заходить по ссылке http://sitename.ru/images/photos/12345.jpg и видеть фото.

    Проблема твоя называется "хотлинкинг". Есть классическое решение через проверку HTTP_REFERER в .htaccess. При этом не надо ничего программировать на PHP.
    Гугль: htaccess HTTP_REFERER image hotlinking
    Пример: http://www.hongkiat.com/blog/smarter-way-to-prevent-image-hotlinking-with-htaccess/



    ιιlllιlllι унц-унц
  • maximum_ru

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz 5 июня 2011 г. 19:17, спустя 8 минут 18 секунд

    artoodetoo
    вот как раз над реврайтом я бился до 4 утра сегодня :)))
    И вобщем то опять же все просто - нужно чтобы файлы(фотки) данной папки могла просматривать только страница viewfoto.php (на которую приходишь с view.php). И все равно у меня не получилось. Выходило, что либо почему то все могут смотреть, либо никто.
    Да и проблему мою это решило бы не до конца. Ведь я не могу readfile - у указать ссылку на фото на основе переменной.
    Спустя 92 сек.
    вот тут http://www.beget.ru/art9.html кстати хорошая статья про htaccess
    Спустя 62 сек.
    еще это называется антилич
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 5 июня 2011 г. 20:51, спустя 1 час 33 минуты 42 секунды

    maximum_ru, ты чертов мозгоеб. не надо биться, сделай как делают уже три поколения вебмастеров. только не косячь.
    когда проверяешь результат, имей в виду, что твой браузер охуенно хорошо кеширует картинки.
    если ты видишь картинку это не значит, что она реально доступна. возможно браузер и не пытался ее прочитать заново. делай поправку.
    ιιlllιlllι унц-унц
  • maximum_ru

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz 5 июня 2011 г. 21:11, спустя 20 минут 9 секунд

    artoodetoo
    мозгоеб - возможно. но не долбоеб ни разу. про ctrl + f5 слышал
    сам бы уже давно не ломался и написал мне код, если силен в энтом деле. потренировался бы как раз

Пожалуйста, авторизуйтесь, чтобы написать комментарий!