Ответы пользователя по тегу PHP
  • Как запретить доступ по прямой ссылке к файлам на хостинге для неавторизованых пользователей?

    KorsaR-ZN
    @KorsaR-ZN
    Сделать это можно, только пустив обработку таких ссылок на php файл, который будет проверять авторизацию и выносить решение пускать или нет.

    А вот, как потом файл отдавать клиенту, если он авторизован это отдельная история, и для ответа на нее нужна дополнительная информация.

    У Вас есть доступ к настройкам сервера?,
    Есть модуль на apache xsendfile или возможность его установить?
    Стоит ли nginx или есть возможность поставить?

    Если на все вопросы нет, значит нужно отдавать файл средствами PHP, что не очень эффективно, но тоже норм :)
    Ответ написан
    Комментировать
  • Поможете понять суть аргументов в функциях php?

    KorsaR-ZN
    @KorsaR-ZN
    Начнем с понятия области видимости функции, функция видит только переменные созданные внутри ее тела, либо переданные через ее параметры (аргументы). Других для нее просто не существует.

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

    передача по ссылки (можно только переменные), перед объявлением переменной в параметры функции ставится знак &, это означает, что теперь будет передача в функцию не по значению, как выше, а по ссылки. т.е не будет ни какой копии значения, а будет реальная ссылка на внешнюю переменную, и это означает, что любые изменения локальной переменной внутри функции будут на самом деле изменять данные внешней переменной, более наглядно на примерах ниже...

    Теперь более подробнее про переменные внутри функции и ее параметры.

    Грубое говоря (прошу не пинать),
    Все параметры функции, что объявлены в (), ничем не отличаются от переменных объявленных внутри функции, за одним исключением, что в переменную объявленную, как аргумент функции, можно передать значение из вне (оно может, быть строкой, числом, объектом, другой функций и т.д), а переменную объявленную внутри тела функции, вы не как не сможете изменить из вне (ну конечно если она не является глобальной, ну это совсем другая история);

    Так что если у вас объявлена переменная $name, вне функции, а в самой функции или ее аргументе объявленная переменная с таким же именем, то они НИ как не пересекутся, т.к у внешних и внутренних переменных разная область видимости, за исключением передачи по ссылки, как описано выше.

    Пример 1 (передача по значению)
    $name = 'Вася';
    function u($name)
    {
       echo $name;
       $name = 'Коля';
    }
    
    echo u($name); // результат Вася
    echo $name; // результат Вася


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

    Пример 2 (передача по ссылке)
    $name = 'Вася';
    function u(&$name)
    {
       echo $name;
       $name = 'Коля';
    }
    
    echo u($name); // результат Вася
    echo $name; // результат Коля


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

    P.S Объекты (экземпляры класса) всегда передаются по ссылки не зависимо от значка &.
    Ответ написан
    Комментировать
  • Что нужно знать php программисту?

    KorsaR-ZN
    @KorsaR-ZN
    Это зависит от того, чем вы собираетесь заниматься...
    PHP разработчики бывают разные, и они всякие нужны :)

    Если просто клепать сайты с фриланс бирж, то это один набор знаний.
    Если что-то серьезное, то совершенно другой, вообщем нужна конкретика, чтобы точно ответить на вопроса :)
    Ответ написан
    Комментировать
  • Нагрузка на сервер (как избаивиться от index.php)?

    KorsaR-ZN
    @KorsaR-ZN
    Да, как выше было сказано возьмите родной .htaccess и в настройках включите пункт "Перенаправление URL" - /administrator/index.php?option=com_config
    Ответ написан
    Комментировать
  • Как проверить скачан ли файл?

    KorsaR-ZN
    @KorsaR-ZN
    Только если отдавать архив через php, но это не хорошо т.к нагрузка будет не нужная.

    Сделать нужно следующее, когда вы отдаёт файл пользователю, через php, то читайте его кусочками. И сохраняйте в буфер кол-во отданных байт, как кол-во отданного будет равно размеру файла, то файл можно считать скаченным и соответственно произвести удаление. Но если вы хотите ещё поддерживать докачку при обрыве соединения, то нужно ещё учитывать заголовки смещений при докачки и дополнять буфер уже оданными байтами ранее, при предыдущей сессии. Ну вот как-то так...

    Или второй вариант, по факту обращения к ссылки на скачивание, помечайте файл, как якобы скаченный, и потом скажем через 24 часа удаляете его.
    Ответ написан
    Комментировать
  • Как правильно реализовать обмен сообщениями между пользователями?

    KorsaR-ZN
    @KorsaR-ZN
    Посмотрите в сторону протокола XMPP.
    Ответ написан
    Комментировать
  • Как правильно сравнить время?

    KorsaR-ZN
    @KorsaR-ZN
    Замените $diff->format('%i%'); на (int)$diff->format('%R%i%');
    будет со знаком выводить, если < 0, значит первая дата больше второй.
    Ответ написан
  • Парсинг - Как получить подкатегории если они подгружаются при помощи js?

    KorsaR-ZN
    @KorsaR-ZN
    api.ricardo.ch вам в помощь, SystemService, а из него getCategories. Он доступен без получения ключа.

    Если не секрет, а для какой Вам у цели?
    Ответ написан
  • Почему не правильно вводит дату в базу данных mysql в PHP скрипте ?

    KorsaR-ZN
    @KorsaR-ZN
    Какого типа колонка (EndDate) в БД?

    Еще попробуйте заменить date("Y-m-d", $d1); на date("Y-m-d 00:00:00", $d1);
    Ответ написан
    6 комментариев
  • Как организовать проверку присутствия зарегистрированного пользователя на сайте?

    KorsaR-ZN
    @KorsaR-ZN
    Если не нужна точность, а будет достаточно скажем 15 мин, то я бы вариант из предыдущего ответа немного подправил, если last_request_time, обновляется с каждым новым запросом пользователя, то это лишний update в базу, а это не зачем так часто делать.

    Тогда лучше сделать так:
    В сессию пользователя храним дату последнего обновления состояния в БД, и каждый новый запрос проверяем его (online_expire < currentTime), если пора обновлять состояние, то в базе обновляем колонку (online_expire = currentTime + 15), ну и в сессии тоже обновляем online_expire = currentTime + 15 мин.

    И потом в модуле вывода онлайн пользователей, выводим всех онлайн у кого online_expire < currentTime.

    Т.е. почти тоже самое, что из предыдущего ответа, только без постоянного update в базу...
    Ответ написан
    Комментировать
  • В PHshtorm создаю проект с помощью Composer и мне вместо того что я запросил выдает кучу файлов?

    KorsaR-ZN
    @KorsaR-ZN
    Так это же норма, он выдал все зависимости данного фрейма, без них он работать не будет...

    7b877cf28a1b4679b4f365feb4299c8a.png

    Если весь фрейм не нужен, то можно установить только необходимые компоненты из ветки - https://packagist.org/packages/illuminate/, но там тоже есть свои зависимости :)
    Ответ написан