Ответы пользователя по тегу PHP
  • В чем может быть проблема у простого php-роутера?

    @grek_cheburek
    Программист самоучка
    В моем htaccess есть такой код.

    RewriteEngine On
    # Не применять к существующим файлам файлам
    RewriteCond %{REQUEST_FILENAME} !-f
    # Не применять к существующим директориям
    RewriteCond %{REQUEST_FILENAME} !-d
    # Редирект всех запросов на index.php
    # L означает Last, нужен чтобы на этом этапе mod_rewrite сразу остановил работу.
    # Короче, небольшое увеличение производительности.
    RewriteRule .* index.php [L]


    Далее, в моем роуторе я обращаюсь через $_SERVER['REQUEST_URI']
    Разбиваю его на части.
    К примеру у меня есть два адреса.
    site.ru/blog/one-day
    site.ru/de/blog/one-day
    Все что разделено косыми чертами, я отдал на откуп explode.
    Роутору объяснил, что нулевой может иметь два значения и он это должен учитывать. Если в нем храниться только две буквы и не более, тогда он должен привести нас в изменение языка интерфейса. Если букв больше, тогда он должен привести нас в модуль, который мы хотим вызвать.
    Если модуля нет, тогда нужно отправить пользователя на 404, но в моем случае я отправляю пользователя на главную.
    Причем я делаю проверку не только на существование каталога для модуля, но и на существование некоторых файлов.
    А $_GET параметры передаются автоматически и их не нужно обрабатывать.
    site.ru/blog/one-day?page=comments&sort=desc
    $_GET параметры сами подставятся как положено и их не нужно прогонять через роутер.
    Аааа, простите, забыл добавить, что у меня есть второй explode, который в самом начале разделяет строку через знак ?

    Мой файл имеет размер в 3.2 kb и 48 строк.
    Но это только лишь из-за развернутых комментариев, которые я писал для себя, чтобы не запутаться.
    Да, в таком роуторе должен быть метод, который пошлет куда подальше пользователя, если он будет безобразно вводить адрес сайта.
    К примеру, у вас есть материал по адресу
    site.ru/blog/one-day, но после one-day ничего нет, то тут должна сработать защита, которая просто прогонит пользователя на главную или подготовленную страницу для таких случаев.
    Я реализовал это таким способом.
    Есть метод error404(), который принимает номер элемента, после которого должна произойти остановка.
    site.ru/blog/one-day
    Только два элемента и третьего нет, тогда я вызываю метод error404(2) и все что будет введено после one-day, сработает остановка.
    site.ru/blog/one-day/photo/city-berlin
    error404(4) Все что больше четыре, сработает остановка.

    Как-то так. А если на регулярках решать данную задачу, мне кажется это еще более нагружать сервер, да и казусы могут всякие быть.

    Простите за такой длинный комментарий.
    Это чисто мой велосипед и никого не призываю им пользоваться.
    Ответ написан
    Комментировать
  • Как заставить php скрипт корректно работать?

    @grek_cheburek
    Программист самоучка
    Использовать функцию mb_substr и в ней указать кодировку для японских символов.
    Ответ написан
    1 комментарий
  • Не работает php код?

    @grek_cheburek
    Программист самоучка
    Перед session_start, а так же перед header() - не должно ничего выводиться. Если вы будете что-то выводить, это сразу выводит ошибку. Подумайте над другим вариантом, как пользователю сообщить, что логин занят.
    Ответ написан
  • Как удалить сессию при закрытии вкладки/окна браузера?

    @grek_cheburek
    Программист самоучка
    Могу лишь предложить такую логику. Нужно поставить жизнь сессии пять минут. Каждый раз, пока пользователь на сайте, будет обновляться жизнь сессии. Когда пользователь закроет вкладку или окно, то сессия больше обновляться не будет. Соответственно она удалится.
    Ответ написан
  • Как отловить ошибку Parse error: syntax error, unexpected end of file in page-hub.php on line 328?

    @grek_cheburek
    Программист самоучка
    У меня такое было. Проблема почему-то была в таком коде.
    <?php
    if (1==1) {
     echo "Да, числа ровны";
    }
    else echo "Нет, не ровны";
    ?>

    Добавил скобки и проблема исчезла, хотя на windows такой проблемы не было.
    Ответ написан
    Комментировать
  • Как на php показать какой отрезок времени назад был опубликован пост?

    @grek_cheburek
    Программист самоучка
    1. Хранить метку времени в секундах.
    2. Взять метку времени и реальное время. От реального времени отнять метку, которая сохраняется в базе. Так мы получим количество секунд с момента создания записи.
    3. Написать метод или функцию, которая должна секунды превратить в тот результат, который вам нужен.
    Ответ написан
  • Ошибка Cannot modify header information при работе с cookie?

    @grek_cheburek
    Программист самоучка
    Кука должна объявится раньше, чем будет html
    Ответ написан
    Комментировать
  • Как поправить query запросы в базу mysql php?

    @grek_cheburek
    Программист самоучка
    Единицу нужно в кавычки взять. user='1'
    Ответ написан
    Комментировать
  • В чём ошибка (скорее всего php)?

    @grek_cheburek
    Программист самоучка
    Попробуйте между атрибутами и значениями убрать пробелы, только оставить знаки равно.
    name="radio" method="post"
    И попробуйте php скрипт запустить вручную.
    То есть,поменяйте параметры с post на get и посмотрите, может происходит какая-то ошибка там.
    А в адресной строке наберите
    file.php?a=1
    Ответ написан
  • The requested URL was not found on this server?

    @grek_cheburek
    Программист самоучка
    в action='/' не нужно ничего писать.
    Вы отправляете форму на этот же файл.
    Если ваш файл имеет чпу, тогда нужно указывать адрес к обработчику.
    Можно action убрать, или сделать так action='#'
    Ответ написан
    Комментировать
  • Parse error: syntax error, unexpected '">"' (T_CONSTANT_ENCAPSED_STRING), expecting ']' in CODE on line 54 Errors parsing CODE?

    @grek_cheburek
    Программист самоучка
    Пожалуйста, обратите внимание на то, что на вашем open server может быть настроена только <?php ?>, вместо <? ?>
    У меня вызывает ошибку, если делать так.
    <? else: ?>
    Вместо этого нужно делать так.
    <?php else: ?>
    <?=$x;?>
    <?php endif;?>

    Когда вы пытаетесь делать так? <? elsse: ?>
    php ждет, что вы вставите что-то для вывода на экран.
    Ответ написан
    Комментировать
  • Как вывести на php результат SELECT COUNT(*) из MySql?

    @grek_cheburek
    Программист самоучка
    echo $query['count(*)'];
    Ответ написан
    Комментировать
  • Как подключить PHP-код к phpMyAdmin на удалённом сервере?

    @grek_cheburek
    Программист самоучка
    Вот сейчас было вообще не понятно.
    Вам нужно подключиться к серверу бд?
    Ответ написан
  • Как загружать для РФ один скрипт, а для других стран - другой?

    @grek_cheburek
    Программист самоучка
    Когда-то использовал 2ip.ua
    Ответ написан
    Комментировать
  • Как организовать смену языка в файлах .js?

    @grek_cheburek
    Программист самоучка
    Советую вам использовать ini файлы и через функцию parse_ini_file вытягивать нужное слово.
    В файл js можно доставить слова тремя вариантами.
    1. Перед вызовом файла создать массив с набором слов.
    2. Через ajax, подтянуть слова внутри кода.
    3. js файл сделать файлом php, а через чпу сделать его как js
    Ответ написан
  • Как в php вытащаить в переменную из input значение?

    @grek_cheburek
    Программист самоучка
    Из вашего сообщения ничего не понятно. На сервер передаете параметр в котором просто название файла? или вы файл пытаетесь загрузить?
    Если загрузить, тогда $_FILES вам в помощь. Если просто пишите название файла, тогда $_POST. Зачем global использовать вообще не понимаю.
    Ответ написан
    Комментировать
  • Как на PHP округлить дату до дней, и получить дату завтрашнего или вчерашнего дня?

    @grek_cheburek
    Программист самоучка
    Я делал чуть сложней. Есть функция mktime. от неё я и отталкивался
    Ответ написан
    Комментировать
  • Многоязычный сайт php twig - как лучше реализовать?

    @grek_cheburek
    Программист самоучка
    Я всегда держу в файлах ini ключи для слов.
    У меня есть папка lang_pack
    В ней имеются подкаталоги de,ru,en,uk и тд.
    В каждой из этих папок имеются файлы .ini в которых есть ключи для слов
    title=Мой сайт
    link_index=Главная страница
    И так далее.
    Кстати, я делаю для каждого модуля отдельный такой файл.
    А на самом сайте использую что-то подобное.

    <?php
    echo "<a href='/'>".$main->lang('link_index','head_menu.ini')."</a>";
    ?>
    Ответ написан
  • Как реализовать в MySQL топики форума, которые участвуют сразу в нескольких разделах?

    @grek_cheburek
    Программист самоучка
    Когда-то я делал так. В таблицу добавлял поле, в которое помещал id в md5. Далее, когда пользователь отмечает какие ему нужно категории и в топик вписывал этот md5 разделенный вертикальной чертой. На странице самого топика я брал поле, в котором хранился md5 и через explode разделял и подготавливал запрос, чтобы вывести категории. Такую систему я применял для блогов и фотоальбомав на сайте. Но сайт маленький был, то есть не с такой аудиторией как вк. Так что за скорость работы такого подхода я ничего не могу сказать, лично меня он устраивал.
    Ответ написан
  • Вывод ошибки размера изображения через php, если размер картинки больше 5 мегабайт, как проверить?

    @grek_cheburek
    Программист самоучка
    Никогда не доверяйте тому, что пользователь вам присылает. Знаю, что $_FILES можно подменить.
    Есть такая функция, в php, filesize()
    Используйте её для проверки, что-то подобное.

    <?php
    $max_size  = 1024*1024*5; // Один килобайт имеет 1024 байт. Их умножаем и получаем мегабайт. Далее умножаем на пять.
    $tmp_size = filesize($_FILES['file_img']['tmp_name'][0]);
    if ($tmp_size>$max_size) {
     echo "Ошибка, ваш файл привышает 5 мб"; exit();
    }
    ?>


    Как-то так. И еще один момент. Если вы позволяете другим пользователям загружать картинки на сайт, то это не последняя проверка с размером файла. Еще нужно проверять, не вредна ли картинка.
    Ответ написан
    Комментировать