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

    Извращение какое-то…

    Используйте файлы или кэш, если надо передать/изменить какие-то пользовательские данные. Изменяя напрямую сессии, Вы рискуете нарваться на потерю данных или блокировку.
    Ответ написан
  • Правильный ли алгоритм авторизации на Session и Cookies?

    Предложенный Вами алгоритм ошибочен в плане безопасности.

    Обычно делают так:
    1) Новый пользователь при регистрации задаёт пароль, который шифруется со случайной «солью». Пользователь отправляется в виде кук его ID(для ускорения запросов), login и шифрованный пароль. В базу записывается ID, login, соль и шифрованный пароль.
    2) При авторизации проверяется куки, если они верные, то создаём сессию и помещаем в нее нужные данные. Если в кукак что-то не так, то удаляем их на сервере и на клиенте при помощи JS и перекидываем на форму авторизации.
    3) При обновлении страницы сверяем данные кук и сессии, если всё верно, то работаем. Если нет, то очищаем сессию и авторизуемся через куки. Пароль в сессии не храним.
    Ответ написан
    2 комментария
  • С чего начать?

    Отвечу на другой вопрос: «С чего не начинать изучение PHP?»
    — С видеокурсов Евгения Попова и подобных личностей.
    Ответ написан
    1 комментарий
  • Что используете для прерывания выполнения программы на PHP?

    Использую exit для указания окончания выполнения скрипта в мастер-файле.
    Причина проста: exit — выход; die — умереть.
    У меня как-то окончание выполнения скрипта ассоциируется с выходом, а не смертью.
    Ответ написан
    Комментировать
  • Защита от SQL inj

    Мой вариант:
    //---------------- Процедура подключения к базе данных -----------------------//
    function dbconnect() {
    global $database;
    if (!isset($database)) {
    $database = mysql_connect("localhost", "**", "***");
    mysql_select_db("xxx", $database);
    }
    }

    //--------------------- Функция выполнения запросов --------------------------//
    function sql_query($query) {
    global $errors;
    dbconnect();
    $return = mysql_query($query);
    $error = mysql_error();
    if ($error=='') {
    return $return;
    }
    else {
    writelog('sql_error', date("y.m.d H:m:s")."\t".$error);
    $errors .= $error;
    return false;
    };
    }
    //----------------------------------------------------------------------------//

    //----------- Процедура проверки данных перед вставкой в запрос ---------------//
    function checkfield($request) {
    $request = trim($request);
    if (isset($request)) {
    // Если не число, то экранируем ковычки
    if (is_numeric($request)) { return $request; }
    else { dbconnect(); return mysql_real_escape_string($request); }
    }
    else { return ''; }
    }
    //----------------------------------------------------------------------------//
    Ответ написан
  • SELECT WHERE IN: Подскажите оптимальный вариант взаимодействия PHP - MySQL

    Если таблицы однотипные (это касается и полей, и движков) и не используется (не эффективно) кэширование, то лучше 2 вариант.
    В остальных случаях 1 вариант.
    Ответ написан
    2 комментария
  • Лучший легкий HTML/PHP редактор для windows?

    RJ TextEdit — редактор кода заточенный под web-разработку.
    Ответ написан
    Комментировать
  • Как упростить разработку на php новичку?

    Если есть опыт программирования то, настоятельно советую установить и настроить профилирование xdebug. Это сэкономит Вам очень много времени на отладку и поможет понять работу системы. С остальным, я думаю, сами по ходу дела разберётесь.
    Ответ написан
    Комментировать
  • PHP - Вывести ошибки в нужное место шаблона?

    Для отслеживания ошибок PHP:
    // Устанавливаем обработчик ошибок (в рабочей версии закомментить)
    set_error_handler('writeerror');

    function writeerror($errno, $errstr, $errfile, $errline) {
    // Вы водим ошибку. writelog - пользовательская функция. Используйте свою
    writelog('php_error', date("y.m.d H:m:s")."\t".$errno."\t".$errstr."\t".$errfile."\t".$errline);
    // Возвращаем true чтобы продолжить работу
    return true;
    }


    Для отслеживания ошибок MySQL:
    function sql_query($query) {
    // Подключаем базу
    dbconnect();
    $return = mysql_query($query);
    $error = mysql_error();
    if ($error=='') {
    return $return;
    }
    else {
    writelog('sql_error', date("y.m.d H:m:s")."\t".$error);
    return false;
    };
    }

    Думаю принцип понятен.
    Ответ написан
    1 комментарий
  • Защита от XSS

    Всё так легко и просто. Но надо следить за тем, чтобы все поступающие от пользователя данные прогонялись через эту функцию.

    p.s.
    У этого решения есть один недостаток — могут возникнуть проблемы с кодировками при передачи массивов. Обратите на это внимание.
    Ответ написан
    Комментировать
  • PHP-фрейрмворк для браузерных игр?

    Таких фреймворков нет. За 3 года разработки игр я не разу ни слышал о таких вещах.

    Клоны игр тоже не советую смотреть, т.к. скрипты написаны так, что при 100 игроков онлайн сервер падает.
    Ответ написан
    Комментировать
  • Как вы пришли в PHP ?

    Долгое время работал разработчиком прикладного банковского ПО (про PHP тогда и не знал). Потом кризис — пришлось уйти.

    Пошел устраиваться на новую работу. Директор на новой работе сразу вопрос в лоб:
    — На PHP пишешь?
    Я так же в лоб ему:
    — Да, ещё как.
    — Тогда приходи на следующей неделе.
    Я после собеседования бегу домой смотреть что такое PHP. Так как опыт программирования у меня был, я сумел выучить PHP за двое суток. В итоге директору моё мастерство написания скриптов понравилось.

    Сам по себе PHP очень простой язык, а вот смежные области (верстка и js) сложные.
    Ответ написан
    4 комментария
  • Кеширование содержимого?

    Использую eAccelerator для опкода, а memcached для сложных некритичных данных. Пока хватает, проблем с установкой и использованием не имел.
    Ответ написан
    Комментировать
  • Коннект к БД из функций (PHP)

    «Каждый из index.php получает доступ к БД посредством инклуда db.php, также в них инклудится functions.php. В functions.php мне нужно использовать доступ к базе из db.php.»
    — Мне кажется, что Вы либо используете очень старые книжки, либо видеоуроки быдлокодера Евгения Попова. Без обид…

    Добавьте в начале index.php следующие функции:
    // Процедура записи в лог фаил для записи ошибок
    function writelog($typelog, $log_text) {
    $log = fopen('logs/'.$typelog.'.txt','a+');
    fwrite($log, "$log_text\r\n");
    fclose($log);
    }

    // Процедура подключения к базе данных. Вызываете её, когда Вам нужно подключение
    function dbconnect() {
    global $database;
    if (!isset($database)) {
    $database = mysql_connect ("localhost", "**","****");
    mysql_select_db("***", $database);
    }
    }

    // Функция выполнения запросов с логированием ошибок
    function sql_query($query) {
    $return = mysql_query($query);
    $error = mysql_error();
    if ($error=='') {
    return $return;
    }
    else {
    writelog('sql_error', date("y.m.d H:m:s")."\t".$error);
    return false;
    };
    }
    Ответ написан
    2 комментария
  • Как поучаствовать в OpenSource проекте ?

    Лично я использовал два подхода:

    — «Напросился» в проект, интересный мне;
    — Зарегистрировался на нескольких форумах для программистов и через некоторое время у меня были «приглашения» во многие проекты.
    Ответ написан
    Комментировать
  • Практика программирования на PHP

    Знаю, что получу много минусов, но всё таки…

    «Надо начинать с лёгкого проекта» — самый ужасный совет новичкам.
    Решая легкие задачи мозг затачивается под лёгкие задачи. А как только программист после такого «лёгкого» обучения сталкивается с действительно сложной задачей вся структура мышления ломается и обучаться приходиться почти сначала.

    Меня в своё время учили гуру — «Решай задачи, в которых сам чёрт ногу сломит, только так научишься». Проверил этот совет на себе и полностью с ним согласен. Только решение сложных задач действительно учит.

    Выберите сложную задачу (написать движок для соц.сети, браузерную игру, портал и т.д.) и работайте над ней.
    Ответ написан
    5 комментариев
  • Защита от SQL инъекций

    — Все данные, которые не должны содержать кавычек, режу фильтрацией по белому списку.
    — Данные, которые могут быть с кавычками и которые могут быть порезаны фильтрацией, обрабатываю функцией mysql_real_escape_string.

    В вашем методе возможны проблемы с кодировкой.
    Ответ написан
    Комментировать
  • про обучение пхп "с нуля"

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

    Если у Вас инженерный склад ума и Вы начинаете с нуля, то Вам понадобиться где-то полгода как минимум изучать язык программирования по книгам или на курсах. Дело в том, что не настолько сложно, просто за полгода вся информация должна уложиться в голове. Если Вы начинаете не с нулевого уровня время изучения может сильно сократиться, т.к. PHP на уровне фреймворков крайне прост.

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

    И самое главное — выбирайте с умом курсы и книгу!
    Например, голову некого Евгения Попова за его видеокурсы мне хочется размозжить об асфальт. Благодаря его видеокурсам мы сейчас имеем целое поколения php-быдлокодеров, использующих кодировку win-1251 и printf.
    Ответ написан
    2 комментария
  • Новый сервис: код "с нуля" или php-фреймворк?

    При вашем разностороннем функционале особой разницы в эффективности между фреймворком или самописным кодом не будет. И там и там придётся что-то дописывать.

    Если знания позволяю советую писать с нуля, иначе используйте фреймворки.
    Ответ написан
    3 комментария