Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.07.2017, 12:53   #1
SuperHero70
 
Регистрация: 17.07.2017
Сообщений: 3
По умолчанию Как создать временную ссылку на основе обычной?

Всем привет) Не знаю, так ли сформулировал вопрос) В общем, в чём суть: отправили меня на практику и, как полагается, дали работать с тем, что ныне до этого я никогда не видывал и ещё столько же не видел бы. На практике дали такое задание: сделать этот самый механизм временных ссылок, а конкретно, чтобы сотрудник предприятия мог выложить какой-либо файл на сайт предприятия, скопировать ссылку на этот файл, вставить в специальную строчечку, нажать что-то вроде "Получить временную ссылку" и эту самую ссылку скопировать и выдать получателю. При чем время ссылки должно быть ограничено парой-тройкой часов, позже она удаляется. При этом очень нежелательно пользование какими-либо базами данных. Перекопал много тем по этому поводу, всё по этой теме очень разрозненно и собрать воедино никак не выходит. Знание языка почти нулевое, времени разбираться с ним и учить тоже, к сожалению, нет... Если кто-то поможет, желательно как можно подробнее, буду сильно благодарен)
SuperHero70 вне форума Ответить с цитированием
Старый 17.07.2017, 13:32   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от SuperHero70 Посмотреть сообщение
При этом очень нежелательно пользование какими-либо базами данных.
почему нет?

у меня нет знаний/опыта по созданию временных ссылок.

Но я бы как раз в БД хранил запись ID=guid строчка - сама временная ссылка.
там же время истечения ссылки и в этой же записи реальная ссылка на тот файл, который нужно отдавать.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.07.2017, 13:43   #3
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,150
По умолчанию

без БД придтся велосипед придумывать в текстовых файлах
ADSoft вне форума Ответить с цитированием
Старый 17.07.2017, 14:21   #4
s88s
Форумчанин
 
Регистрация: 02.01.2014
Сообщений: 369
По умолчанию

Согласен с Serge_Bliznykov и ADSoft что лучше использовать БД. С помощью БД можно проверять время действия ссылки и также можно сделать автоматическое удаление всех устаревших ссылок причем без участия админа который следит за сайтом
"Я не волшебник, я только учусь"
s88s вне форума Ответить с цитированием
Старый 17.07.2017, 16:32   #5
SuperHero70
 
Регистрация: 17.07.2017
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
почему нет?

у меня нет знаний/опыта по созданию временных ссылок.

Но я бы как раз в БД хранил запись ID=guid строчка - сама временная ссылка.
там же время истечения ссылки и в этой же записи реальная ссылка на тот файл, который нужно отдавать.
Делать без БД не моя прихоть, так сказали) Так-то в интернете есть варианты реализации с базами данных, а вот без них прям туго... Вопрос остаётся открытым))
SuperHero70 вне форума Ответить с цитированием
Старый 17.07.2017, 16:48   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от SuperHero70 Посмотреть сообщение
Так-то в интернете есть варианты реализации с базами данных, а вот без них прям туго...
ну почему - "туго" ?!
Вам же сказали - если нельзя использовать БД - то,
Цитата:
Сообщение от ADSoft Посмотреть сообщение
без БД придётся велосипед придумывать в текстовых файлах
т.е. вместо записи в БД создавайте текстовый файл(или файлы) и в него пишите нужные данные.
Это будет во много раз сложнее, на порядок медленнее и существенно менее надёжно (вплоть до того, что обязательно нужно закрывать доступ к этим самым TXT файлам извне с помощью прав доступа (например, если на сервере используется Apache, можно запретить доступ через .htaccess).

Этим самым Вы просто будете эмулировать работу БД через текстовые файлы.

Остальное всё точно так же, как и в случае использования БД.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.07.2017, 18:04   #7
SuperHero70
 
Регистрация: 17.07.2017
Сообщений: 3
По умолчанию

ага, вот как) можно попробовать и через текстовый, благодарю за ответ)
SuperHero70 вне форума Ответить с цитированием
Старый 17.07.2017, 22:56   #8
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от SuperHero70 Посмотреть сообщение
Делать без БД не моя прихоть, так сказали)
Скажите им, что подобные ограничения есть откровенная глупость – либо же основной целью является исключительно их желание проверить ваши навыки в работе с файлами.
Andkorol вне форума Ответить с цитированием
Старый 18.07.2017, 17:20   #9
pompiduskus
юзер как все
Участник клуба
 
Аватар для pompiduskus
 
Регистрация: 10.01.2012
Сообщений: 1,586
По умолчанию

Я не за файлы или их отсутствие. Просто как спортивный интерес.

Если все таки делать на файлах то можнр придумать вот такой велосипед.

Только не нужно этот код пихать в продакшен. Это вариант, не более.

Скачивание файла
Код:
<?php

define('ROOT', $_SERVER['DOCUMENT_ROOT'] );

$file_UID = str_replace([
    "'",'"','{','}','+','?','--',':',';',',','.','/'], '', $_SERVER['REQUEST_URI']);

// примерная структура
// {"time_t":1500100000,"size_t":4124243,"type_t":"application\/xpdf","f_name":"test.pdf"}

$config_file = ROOT.'/'.$file_UID.'.json';

if( is_file( $config_file ) ){

    $json_t = json_decode( file_get_contents($config_file), true );

    if( isset($json_t['time_t']) ){

        $time_t = $json_t['time_t'];
        $type_t = $json_t['type_t'];
        $size_t = $json_t['size_t'];
        $f_name = $json_t['f_name'];

        if( time() - ( 512 * $size_t / 8 ) <= $time_t ){

            // header('Content-Description: File Transfer');
            // header('Content-Type: application/octet-stream' );
            header('Content-Type: '.$type_t );
            header('Content-Disposition: attachment; filename="'.$f_name.'"');
            header('Expires: '.$time_t );
            header('Cache-Control: must-revalidate');
            header('Pragma: public');
            readfile( ROOT.'/'.$f_name );
            exit();

        }
        // unlink( $config_file );
        exit(' Link expired');

    }
    
    exit(' Error');

}

exit(' File not found');

?>
<Дзен - Вся вселенная в тебе > | Резюме: https://ch3ll0v3k.github.io/CV/
pompiduskus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите как создать ссылку на структуру из record-ов sera.kerch Общие вопросы Delphi 0 15.05.2015 15:29
помогите чайнику-как вставить ссылку ссылку на партнерскую программу nony Помощь студентам 1 19.03.2014 20:48
как создать ссылку(внешний ключ) silwerhof SQL, базы данных 4 06.10.2012 22:59
Как создать ссылку в редакторе Джек Бентон HTML и CSS 1 14.11.2010 16:58
Дайте ссылку или объясните как создать html help Волк Общие вопросы Delphi 4 07.02.2009 10:04