• Как сделать продажу файлов на PHP?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    Все файлы складываете в недоступное из web место.
    Даже на шаред хостингах у вас есть домашняя директория, в которой расположен каталог public_html, в котором уже лежит ваш сайт. Вот на одном уровне с public_html, в домашнем каталоге создайте папку files и складывайте туда.

    Далее генерируете пользователю ссылку вида
    https://mysite.ru/download/sadlflksdjfkj
    Hash кладете в табличку в бд и устанавливаете время жизни, связываете ее с зарегистрированным пользователем и нужным файлом.
    Регистрируете в приложении маршрут
    '/download/{hash}'
    в обработчите маршрута получаете это хэш, ищете в базе запись с ним. Проверяете, не истекло ли время жизни, тот ли пользователь ее открыл, и если все норм, с помощью readfile отдаете нужный файл на скачивание.
    Ответ написан
    1 комментарий
  • Как сделать продажу файлов на PHP?

    @mletov
    Можно хранить файлы в базе или физически на диске выше уровня корня, чтобы нельзя было подобрать прямой url.

    Отдавать файл через экшен контроллера.
    В экшене контроллера проверять права на доступ и в зависимости от результатов выдавать либо файл, либо фигу.

    Отдавать либо авторизованным пользователям с правами, либо по хэшу, но с ограниченным сроком действия ссылки.
    Ответ написан
    5 комментариев
  • Как в css проверить наличие что-то после знака "_"?

    delphinpro
    @delphinpro
    frontend developer
    body[class*="template-account_"] .p-body-header {
      display: none;
    }
    Ответ написан
    Комментировать
  • Как сделать функцию TWIG с контентом?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    Ответ написан
    Комментировать
  • Как сделать проверку на тэг юзера в php?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    У вас уже всё, да, гружаете имя в $want, не совпадение вывод ноль.

    P.S. Каков вопрос - таков и ответ, трудитесь формулировать понятным языком.

    P.P.S. Лучше
    echo preg_match('~@' . preg_quote($want, '~') . '(,|$)~iu', $message);
    Ответ написан
    3 комментария
  • Как начинать массив с 1, а не с 0 в php?

    ValeriuCutebov
    @ValeriuCutebov
    В PHP массивы всегда начинаются с нуля, но вы можете создать массив, который начинается с 1, путем использования функции array_combine(), которая создает новый массив, используя один массив в качестве ключей, а другой - в качестве значений.

    В вашем случае, вы можете создать массив со значениями ключей, начиная с 1, используя цикл foreach для перебора пользователей и добавления их в новый массив с помощью функции array_combine(). Затем вы можете использовать новый массив вместо исходного для поиска пользователей и определения их индексов.

    protected function getServiceAccountId()
    {
      $serviceAccounts = $this->finder('XF:User')
        ->where('is_service_account', true)
        ->order('user_id')
        ->fetch()->toArray();
    
      $keyValues = range(1, count($serviceAccounts));
      $keyedAccounts = array_combine($keyValues, $serviceAccounts);
    
      foreach ($keyedAccounts as $key => $serviceAccount)
      {
        if ($serviceAccount->user_id == $this->user_id)
        {
          return $key;
        }
      }
    
      return $keyedAccounts;
    }

    В этом примере мы используем функцию range() для создания массива с числами от 1 до количества пользователей в $serviceAccounts. Затем мы используем array_combine(), чтобы создать новый массив $keyedAccounts, используя этот массив чисел в качестве ключей и $serviceAccounts в качестве значений.

    Далее мы используем новый массив $keyedAccounts вместо $serviceAccounts в цикле foreach для поиска пользователей и определения их индексов.

    Надеюсь, это поможет вам решить вашу проблему!
    Ответ написан
    Комментировать
  • Почему не работает return в php?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    render() возвращает строку, которую соотв-но нужно как-то вывести, например через echo
    Если хотите сразу выводить содержимое то используйте
    $this->twig->display($templateName, $viewParams)

    Всё это описано в коротенькой документации по шаблонизатору
    https://twig.symfony.com/doc/3.x/api.html#renderin...
    Ответ написан
    Комментировать
  • Как реализовать анимацию "печатает..."?

    noder_ss
    @noder_ss
    Линуксоид-энтузиаст и SQL разработчик
    Здраствуйте, получилось сделать вариант с transition-delay;
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <div><p>Is typing <span class="dot1">.</span>
            <span class="dot2">.</span>
            <span class="dot3">.</span></p></div>
    </body>
    <style>
        @import url(https://fonts.googleapis.com/css?family=Montserrat:100,200,300,regular,500,600,700,800,900,100italic,200italic,300italic,italic,500italic,600italic,700italic,800italic,900italic);
        html{
            font-family: Montserrat;
    
        }
        .dot1{
            transition-delay: 0.1s;
            opacity: 0;
            transition-duration: 0.3s;
        }
        .active-dot1{
            opacity: 1;
            transition-delay: 0.1s;
            transition-duration: 0.3s;
        }
        .dot2{
            transition-delay: 0.2s;
            opacity: 0;
            transition-duration: 0.3s;
        }
        .active-dot2{
            transition-delay: 0.2s;
            opacity: 1;
            transition-duration: 0.3s;
        }
        .dot3{
            transition-delay: 0.3s;
            opacity: 0;
            transition-duration: 0.3s;
        }
        .active-dot3{
            transition-delay: 0.3s;
            opacity: 1;
            transition-duration: 0.3s;
        }
    </style>
    <script>
        let dot1 = document.querySelector(".dot1")
        let dot2 = document.querySelector(".dot2")
        let dot3 = document.querySelector(".dot3")
        setInterval(() => {
            dot1.classList.toggle("active-dot1")
        }, 500);
        setInterval(() => {
            dot2.classList.toggle("active-dot2")
        }, 500);
        setInterval(() => {
            dot3.classList.toggle("active-dot3")
        }, 500);
    </script>
    </html>

    (Если слишком большая скорость анимации, увеличите длительность transition-durationи setInterval)
    Ответ написан
    Комментировать
  • Как найти кастомный тег html с помощью regex?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Если теги не вложенные, то:
    preg_match_all("#<test:([^>]+)>(.+?)</test:\1>#si", $html, $re);
    Ответ написан
    Комментировать
  • Как найти кастомный тег html с помощью regex?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Выглядит как задача для xmlreader.
    Ответ написан
    Комментировать