Ответы пользователя по тегу PHP
  • Front-end или back-end, как вы определились?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Depends от того что Вам вкладываете в понятие "работу от которой я бы был доволен".
    Если речь идет про сложную математику - то её в вебе действительно очень мало.
    Навскидку распознавание голоса, изображений, pathfinding какой то, анализ bigdata.

    Если просто хочется писать что то более осмысленное чем "элемент подсветить, вывести из базы товары" - вариантов немного больше:
    Если сравнивать с простыми сайтами на подобие интернет магазина, то тут не составит труда фронт-энд разработчику написать серверную часть.

    Это очень обманчивое заблуждение.
    Сложная логика появляется там где есть сложные бизнес требования.
    Если под интернет магазином подразумевается 3 продажи в день - то тут вообще программировать не нужно, любого готового движка хватит.
    А вот если это какая нибудь условная www.lamoda.ru - со своим достаточно нелинейным маркетингом, своей системой складского учета, своей системой автоматизации и оптимизации логистики итд - там в штате ~300 разработчиков сидит, а задача "вывести из базы товары" трансформируется в 100 страничное тз кому, когда и какие товары надо выводить.
    Ну и от нагрузки многое зависит. Сделать систему которая бронирует 1 квартиру в секунду и 1000 квартир в секунду - принципиально разная сложность и объем кода.
    Ответ написан
    1 комментарий
  • Авторизация на сайте! Как лучше?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Imho стандартное решение:
    При авторизации пользователя по логину-паролю генерим некую длинную строку (токен), записываем в базу, + пишем в куки.
    При каждом запросе пользователя берем этот токен из кук и проверяем есть ли такой.
    По желанию можно докрутить время жизни, проверку ip итд итп.
    Ответ написан
  • На сколько правильно использовать для composer-а git форки (fork) в своём проекте?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    С учетом того что на гитхабе существует функционал выпиливания репозитория и воспользоваться им может как сам owner, так и администрация, - на мой взгляд единственное разумное решение: целиком скачивать код проекта в свой собственный репозиторий. Форкаться при этом или просто скопировать файлы - дело десятое.
    Ответ написан
    Комментировать
  • Как правильно создать INSERT с проверкой на совпадение?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Если надо именно проверять - то через транзакции.
    start transaction;
    SELECT ... FROM ... FOR UPDATE;
    проверяете что нужно
    UPDATE ... SET ...; 
    COMMIT;
    Ответ написан
    Комментировать
  • Как парсить большое количество данных?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    В дополнение к остальным ораторам: вместо всяких дом-парсеров попробуйте использовать обычный preg_match_all и регулярки.
    Ускорение будет в 10-100+ раз вероятней всего)
    Ответ написан
  • Не работает цикл в php, в чем проблема?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    у вас минимум 2 ошибки в формулах:
    $debit = ($debit + $payBank) * $hours;
    и
    $userHours = $userHours + $hours;
    Ответ написан
    Комментировать
  • Есть ли готовый класс, чтобы парсить все изображения на php?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    А написать одну не сложную регулярку не?
    Ответ написан
  • Есть ли сервис для верстки писем?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Если +- шаблонные то mailchimp.com например
    Если уникальные то freelansim.ru
    Ответ написан
    Комментировать
  • Как правильно слать MySQL запрос?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    НИКОГДА нельзя делать так как написал Дмитрий
    При конкурентных запросах получится каша и потерянные значения.

    Вариант 1:
    Делать update set money = money + 1 как было написано изначально

    Вариант 2:
    mysqli_query($db, 'start transaction');
    mysqli_query($db, " SELECT `money` FROM `dle_users` WHERE `name`='HardBIT' FOR UPDATE");
    ...
    mysqli_query($db, " UPDATE `dle_users` SET `money` = ... ");
    mysqli_query($db, "COMMIT");
    Ответ написан
    Комментировать
  • Как лучше хранить кеш "скомпилированных" страниц?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Если в папке меньше 1000 файлов - никакие md5 не нужны.
    Если папок меньше нескольких тысяч - никакие оптимизации не нужны.
    phar в по любому будет медленнее, т.к на чтение с диска и распаковку огромного контейнера будет тратиться дофига ресурсов.
    Ответ написан
    4 комментария
  • Как правильно сделать валидацию textarea?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    1. strip_tags с набором разрешенных, mysqli_real_escape_string или pdo.
    2. Можно самому считать открытые закрытые, код видится не сложным. Заодно всякие инлайн стили вырезать итд.
    Ответ написан
    Комментировать
  • Как получить данные из ссылки типа site.ru/Af4Fdsgh?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Пардон, curl тут не причем, не правильно понял вопрос.
    мне надо чтобы при открытии ссылки например site.ru/code (которой не существует) вытаскивалось значение 'code' и забиралось в переменную для обработки

    1. Делаем .htaccess, в нем рерайтим все запросы на какой нибудь скрипт передавая туда url
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

    2. в скрипте разбираем url
    Ответ написан
    1 комментарий
  • Как сделать добавление данных через форму в несколько таблиц?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Через 3 запроса
    да
    Ответ написан
    Комментировать
  • Есть ли редактор файлов для сервера?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Не надо так делать. По куче причин - от огромных размеров дырке в безопасности, до отсутствия истории кода.

    Начните пользовать git или mercurial и настройте автодеплой на сервер.
    Ответ написан
    Комментировать
  • Какой из способов безопасного хранения критически важных переменных оптимален?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Поймите, все утечки которые происходят - в 99% это не exploit, а тупо человеческий фактор.
    Все решения с конфигами сервера, ORM и прочим - абсолютно бессмысленны когда вашему сисадмину подарят новый X6 и он сольет дамп сервера целиком.

    Единственное что можно сделать - на уровне архитектуры проекта минимизировать количество людей имеющих доступ к действительно критическим данным, ну и проверять этих людей как следует.
    В идеале создать ситуацию когда утечка любых данных невозможна без сговора нескольких таких проверенных людей и опять же регулярно допроверять этих людей СБ.

    Могу пример из личного опыта рассказать:
    Ваша компания пишет известный мульти-мессенджер работающий по некому протоколу с внешними сервисами.
    Что бы к ним подключаться, вы вынуждены где то хранить логины-пароли от внешки в не зашифрованном виде.
    Понятно что если просто положить их в базу - утечет все сразу же.

    Решение 1:
    Пишем хранимку которая отдает связанные логины-пароли от внешнего сервиса по логину-паролю от нашего мульти-мессенджера.
    Доступ к изменению хранимки и к базе в которой лежат все пароли есть у 1 человека в компании. Остальные тупо ходят через хранимку. Способа получить полный список логинов-паролей сервиса не существует.

    Первое решение в принципе хорошо, но человек имеющий доступ - bigboss и слегка устал лично заниматься этим волшебным сервером.

    Решение 2:
    Разделяем каждый пароль от внешнего сервиса на N частей (N >= 3)
    Дублируем решение 1 на N серверов, каждый пароль получается размазан на N серверов.
    Первоначальная хранимка занимается тем что собирает данные из N хранимок с N серверов.
    У каждого сервера - свой ответственный человек. Доступ к каждому серверу есть только у ответственного и у bigboss (на случай внештатных ситуаций).

    Решение достаточно дорогое и по людям и по железу и по скорости работы - но я за всю свою трудовую деятельность, так и не увидел ничего лучше.
    Ответ написан
  • Как использовать поле класса в SQL запросе?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Ой ёёёё.

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

    2) Никогда не используйте оператор подавления ошибок "@"
    Код
    @mysql_query("set_character_set_client='utf8'");
        @mysql_query("set_character_set_results='utf8'");
        @mysql_query("set collation_connection='utf8_unicode_ci'");
    абсолютно бессмысленный, он не выполняется - тут внезапно mysql, а соединения в mysql то и нет, соединение в mysqli

    3) Никогда не передавайте данные в базу без обработки. Все данные должны быть как минимум обернуты в mysqli_real_escape_string. Ну или PDO используйте
    Ответ написан
    2 комментария
  • ФИАС SQL, от куда взять?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Не знаю кто такие эти ваши basicdata.ru, есть официальный сайт:
    fias.nalog.ru/Public/DownloadPage.aspx
    1. Скачайте полную версию в dbf.
    2. Любым конвертером например https://github.com/xtranophilist/dbf2sql сконвертируйте в sql.
    3. ????
    4. PROFIT
    Ответ написан
    Комментировать
  • Как сделать авторизацию для сервера с API?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Например считать хеш с солью по данным каждого запроса.
    Совсем хорошо соль считать динамически от времени например.
    И всё это по https обязательно.

    Захотят вскрыть - вскроют, но уже с геморроем.
    Ответ написан
    Комментировать
  • Стоит ли исправлять предупреждения интерпретатора PHP?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Я в шоке от того что люди на полном серьезе задают такие вопросы.
    Единственный вариант который имеет право на существование: на локальных, тестовых и прочих не продакшен серверах вывод всех ошибок и нотисов является строго обязательным, как и их исправление.

    Напомню, что при включении предупреждений выводятся сообщения о необъявленных переменных и индексах массивов.

    Если у Вас отключены нотисы - возникает огромный ворох плавающих ошибок с целостностью данных которые вы никогда не поймаете. Условно в каких то случаях модель вернула объект в котором какого то поля не хватает.
    Если ошибки включены - вы это увидите и исправите. Если выключены - php молча подставит дефолтное значение. Вы никогда не поймете почему нотис - потому что вам лень объявить пустую переменную, или потому что где то реально произошел сбой. Единственный случай этого избежать - всегда писать код который в нормальном исполнении не кидает нотисы.

    Мало того что ошибки нужно исправлять, по хорошему код нужно писать с обработкой exception и логикой "что делать если что то вдруг сломалось".
    Единственное место где вывод любых ошибок должен быть отключен для пользователя (но они все равно должн ы логироваться, обрабатываться и исправляться) - это production.

    PS
    Больше приходится писать код, меньше сил остаётся на разработку.

    Разработка это и есть написание кода который максимально правильно работает при любых внешних условиях.
    Ответ написан
    2 комментария