Задать вопрос
Профиль пользователя заблокирован сроком с 10 апреля 2022 г. и навсегда по причине: систематические нарушения правил сервиса
Ответы пользователя по тегу PHP
  • Почему исчезают русские символы в MySQL INSERT?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Во-первых, "слишком дорого" - это фантазии.
    Во-вторых, загружая данные в БД, надо ей говорить, в какой они кодировке.
    В-третьих, кодировка тут не при чём. При проблемах с кодировкой текст может либо выглядеть как знаки вопроса, либо как нечитаемые символы. Но не пропадать совсем.

    В общем, не зная никаких вообще деталей, сложно дать конкретные рекомендации, но если предположить, что используется запрос INSERT и mysql_query(), то после соединения с БД надо писать
    mysql_set_charset('кодировка');
    где кодировка - utf8 или cp1251 в зависимости от исходной кодировки файла.

    Для других способов вставки могут понадобиться другие способы указания кодировки.
    Если символы продолжают пропадать - дело не в базе.
    Ответ написан
    Комментировать
  • Как сделать динамически субдомены на app engine либо openshift?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР

    Судя по документации к GAE, там надо добавить субдомен с именем * в панели управления.
    После этого все запросы будут приходить на основной веб-сервер, при этом конкретный субдомен можно будет получить из $_SERVER['HTTP_HOST'].

    Ответ написан
    1 комментарий
  • Создание системы удаленной компиляции

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР

    Если речь именно о компиляции, без запуска, то как-то так?

    <?
    $commands = [
        'ls'    => 'ls -la', 
        'basic' => '/path/to/basic param1 param2', 
        'java'  => '/path/to/java param param',
    ];
    
    if (isset($_FILES['file']) && !$_FILES['file']['error'] && isset($commands[$_POST['lang']]))
    {
        $comm = $commands[$_POST['lang']];
        $file = $_FILES['file']['tmp_name'];
    
        echo "<pre>";
        echo `$comm $file 2>&1`;
        echo "</pre>";
    }
    ?>
    <form enctype="multipart/form-data" method="POST">
      <select name="lang">
      <?php foreach ($commands as $key => $void):?>
        <option><?=$key?></option>
      <?php endforeach ?>
      </select><input name="file" type="file" /><input type="submit" /></form>
    
    

    Ответ написан
    Комментировать
  • Фильтрация пробела в параметре URL

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР

    К "любознательности" этот вопрос не имеет отношения. А думать, что это каким-либо образом относится к SQL - прямая дорога к инъекции.

    А имеет - к валидации данных и, частично, к юзабилити и СЕО.

    Пробел - символ нерелевантный, его могут тримать автоматом. Так что буду говорить о "частично валидных" урлах в целом. Учитывая, что урлы руками сейчас никто не набирает, а поисковики могут плохо относиться к существованию одной и той же страницы с разными урлами - я бы не пропускал, отдавал 404.

    Ответ написан
    1 комментарий
  • Скорость вызова include

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР

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

    А вот подход с разделением на хидер и футер - неправильный и давно устарел.

    Делить страницу надо не на хидер и футер, а на код и отображение. Потому что:

    - во-первых, отдельно хидер и футер редактировать неудобно.
    - во-вторых, иногда нам надо выполнить некоторый код ДО вызова хидера.
    - в-третьих, у "середины" тоже должен быть свой шаблон - о чем многие начинающие разработчики забывают

    В итоге страница должна собираться из трех частей:

    1. Логика приложения. Должна выполняться ДО любого вывода, и хидера в том числе.
    2. Общий шаблон сайта, который содержит в себе и хидер и футер. Вызывается после того, как отработала логика.
    3. Шаблон конкретной страницы, который включается в общий шаблон сайта.

    При такой структуре не составит никакого труда вместо страницы вывести сообщение об ошибке (при ошибке) или поменять формат вывода с HTML на JSON. Не говоря уже о смене дизайна.

    Вариантов реализации может быть масса, пример самой простой, на чистом PHP, можно посмотреть здесь: http://www.phpfaq.ru/tpl#example

    Ответ написан
    Комментировать
  • Непонятный глюк в Chrome

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ну, почему так происходит — как раз ничего удивительного, если точка входа настраивается как обработчик 404.
    А почему на втором… Ну, видимо, там не забыли favicon положить.

    Hint: вкладка «Network» должна открываться при «двойных запросах» в первую очередь.
    Ответ написан
    6 комментариев
  • Как ограничить область выполнения PHP скрипта include?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Вообще-то есть такая штука, как open_basedir, которая делает именно это.
    Но как-то не кажется мне такая идея 100%-й защитой.
    Ответ написан
    4 комментария
  • Your script possibly relies on a session side-effect!?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ошибка, действительно, древняя, как экскремент мамонта. Объясняется здесь.
    То есть, если есть переменная, допустим, $_SESSION['user'], имеющая значение NULL, и тут мы присваиваем какое-нибудь значение переменной $user — вот тут ошибка и вылезает.

    Легко отключается через
    ini_set('session.bug_compat_warn', 0);
    

    Но лучше всё-таки проапгрейдиться. Тем более, что начиная с 5.4 пхп будет уже ругаться на эту настройку, как несуществующую.
    Ответ написан
    Комментировать
  • Mysqli vs PDO — что выбрать?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    По-моему, там довольно ясно написано.
    Если планируем использовать или писать DBAL для работы с Mysql — то mysqli.
    Если от привычки обращаться напрямую к функциям API избавиться никак не получается — то только PDO, поскольку эта библиотека частично реализует функции DBAL, а большая часть тонкостей, реализованных в mysqli, разработчику никогда в жизни не понадобится.
    Ответ написан
    Комментировать
  • PHP: с чего начать, как учить и что в итоге знать?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    На первые несколько пунктов попробую написать рекомендации в свободной форме.


    Первое и самое главное — чтобы хорошо изучить программирование на РНР, надо хорошо изучить программирование. Это очень важная вещь. Большая часть людей, пишущих на РНР, не имеют ни малейшего представления о программировании. Даже о таких базовых вещах, как форматирование кода, отладка, профайлинг, обработка ошибок, файловые операции. Можно заметить, что я не говорю об ООП. Это совсем отдельная тема, ООП надо учить специально. К сожалению, из 100 человек, которые говорят, что знают ООП, 90 являются банальными копипастерами, выучившими синтаксис, но не понимающими смысла объектов. Но чтобы играть в шахматы, недостаточно знать, как ходят фигуры.


    Ещё неплохо бы ответить себе на вопрос — для чего ты хочешь выучить программирование на РНР? Вопрос совсем не праздный. Многие люди смешивают в нем кучу разных понятий. К примеру, здесь уже упоминали CMS. и действительно, если речь идёт о зарабатывании денег, то кастомизация Джюмлы и написание к ней говномодулей в финансовом плане куда более выгодны, чем умение писать что-либо с нуля. Для фриланса, во всяком случае.

    Вообще, РНР можно использовать очень по-разному. И для каждого случая это будет свой язык.
    • Можно склепать гостевую или сайт-визитку на «голом» РНР — и ничего плохого или позорного в этом нет. Наоборот — это плюс языка, который годится и для таких целей, не таща за собой пару миллионов строк кода ради сайта из пятисот.
    • Можно написать профессиональный портал, взяв за основу какой-то из существующих фреймворков, и заниматься его развитием.
    • Можно написать кастомный хайлоад проект, для которого нужно будет писать собственный фреймворк опять на голом РНР.
    • Можно, как уже говорилось, клепать сайты на основе какой-нибудь ЦМС.


    Вариантов масса! поэтому нужно определиться сначала, чего хочется.


    Там выше говорили про JS+CSS — не надо слушать, это полная ерунда. Фронтенд программирование — совсем отдельная вещь, куда больше визуальная, чем абстрактная. И, слава богу, все больше работодателей начинают понимать это. Хотя опять же — если фрилансишь и на все руки мастер — то без этого никуда.

    Но если работать хардкорным серверным программистом в команде, то об HTML/JS/CSS нужно иметь только общее представление (поскольку тексты на этих языках являются, вообще-то, практически единственным результатом работы РНР).


    А вот что обязательно нужно хорошо знать из сопутствующих технологий — это протокол НТТР, устройство файловой системы, работа c командной строкой в линуксе.


    Теперь по остальным

    Mysql всё ещё является краеугольным камнем хранения данных в вебе. Нужно знать и понимать джойны, индексы

    Фреймворки — обязательно. Тут, правда, стоит проблема выбора, но принципиальной разницы между ними нет. Yii — неплохой выбор.

    Гитхаб тебе не нужен, знать его не обязательно. Знать надо git.
    А вот что является обязательным для веб-программиста — это умение пользоваться гуглем. Хотя бы на уровне умения скопипастить в поисковую форму сообщение об ошибке или написать вопрос «Что такое git» ;-)

    Потому что для работы в команде какую-либо систему контроля версий знать надо, а git является стандартом де-факто. Понимать принцип работы и базовые команды — чекаут, коммит, пуш.
    Ответ написан
    2 комментария
  • Что использовать при кешировании запросов MySQL в PHP

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Вам не нужно никакое кэширование.
    Вам нужно оптимизировать свои запросы.
    «100 договоров и больше» — смешная цифра. По такому количеству любые выборки должны считаться предельно быстро, в сотые доли секунд.
    Даже если тупо выбирать все сто договоров в скрипт и считать руками.

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

    Вообще, задача, конечно, очень невнятно описана.
    Если у вас, к примеру, проблемы с поиском, то можно прикрутить сфинкс.
    В любом случае, надо сначала разобраться с причинами, а потом уже искать решение.
    Ответ написан
    Комментировать
  • Pекоммендуется ли писать <?php в самом начале файла?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Никогда не слышал ничего подобного про первый открывающий тег.
    Про «вываливание содержимого» при включенном short_open_tag — тоже. Скорее всего это была какая-то ошибка или опечатка.
    Для «On случая» никакие рекомендации не нужны, писать можно как угодно.

    Если хочется максимальной совместимости, то в короткой форме пишем только <?=, а в остальных случаях — в длинной.
    Ответ написан
    2 комментария
  • PDO - полный отладочный запрос?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Если не планируется использовать серверные плейсхолдеры, то тогда я вообще не вижу смысла использовать встроенный парсер ПДО.
    Пишем свой и имеем
    а) кучу дополнительных плейсхолдеров
    б) возможность подставлять плейсхолдер в кусок запроса, а не только в целый
    в) отладочный вывод.
    Ответ написан
    1 комментарий