• Почему использование timestamp в БД для хранения даты является неправильным?

    DevMan
    @DevMan
    потому что:
    1. дататайм нагляднее и понятнее таймстампа
    2. дататйм позволяет хранить доли секунды
    3. при таймстампе вы теряете множество удобных функций для работы с дата/время
    Ответ написан
    4 комментария
  • Как правильно выстроить разработку и деплой сайта?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Разработка и контроль версий

    Читаем про git flow, восхищаемся и интегрируем.
    Читаем PSR-ы, восхищаемся и интегрируем. Не помешает: Попросили проверить код, на что смотреть нужно?
    Читаем про vagrant. На базе вот этого вот строим dev окружение. Можете поиграть с https://puphpet.com/. До docker все же стоит дорасти.
    Постигаем Phpstorm, и радуемся жизни.
    Можете посмотреть так же: https://github.com/index0h/php-conventions

    Тестирование

    Читаем про phpunit, восхищаемся и интегрируем.

    Документирование

    Рекомендую взять за правило: документирование алгоритмов нужно только в крайнем случае, когда используются некие хаки. Говнокод лучше переписать на что-то очевидное, чем объяснять, какая муха вас укусила и где.
    Что касается docblock-ов для помощи ide - это отличная идея.

    Деплой

    Самый простой и надежный способ: root у вашего nginx/apache указывать как ссылку на каталог текущей прод версии. При релизе - заливать код с помощью rsync в новый каталог, а далее менять ссылку на новый релиз.
    Например у вас каталог с версиями кода:
    production -> v1.0.2 - текущая версия
    v1.0.1 - старый релиз
    v1.0.2 - текущая версия
    v1.0.3 - новый релиз
    Когда подготовка завершена - вы только меняете симлинк production на v1.0.3. Если что не так - можно быстро откатиться на предыдущую версию.
    Ответ написан
    11 комментариев
  • Как выбрать поля по значениям двух колонок?

    ns174ru
    @ns174ru
    https://ns174.ru
    AND между вариантами замените на OR
    Ответ написан
    7 комментариев
  • Почему создается только одна строка?

    ns174ru
    @ns174ru
    https://ns174.ru
    дамп базы данных сделайте, скорее всего нет поля автоинкримент
    Ответ написан
    1 комментарий
  • Где найти игры для веб-программиста?

    @Drovosek01
    На фриланс бирже :D
    Ответ написан
    Комментировать
  • Как получить plain text из файла .doc на php?

    cesnokov
    @cesnokov
    <head>&nbsp;</head>
    Тема очень интересная и пришлось разобраться до конца.
    До полного счастья вам не хватает этого:
    $extracted_plaintext = mb_convert_encoding( $extracted_plaintext, 'UTF-8', 'UTF-16LE' );

    И всё вместе будет:
    function read_doc_file($filename) {
        if (file_exists($filename)) {
            if (($fh = fopen($filename, 'r')) !== false) {
                $headers = fread($fh, 0xA00);
    
                // 1 = (ord(n)*1) ; Document has from 0 to 255 characters
                $n1 = ( ord($headers[0x21C]) - 1 );
    
                // 1 = ((ord(n)-8)*256) ; Document has from 256 to 63743 characters
                $n2 = ( ( ord($headers[0x21D]) - 8 ) * 256 );
    
                // 1 = ((ord(n)*256)*256) ; Document has from 63744 to 16775423 characters
                $n3 = ( ( ord($headers[0x21E]) * 256 ) * 256 );
    
                // 1 = (((ord(n)*256)*256)*256) ; Document has from 16775424 to 4294965504 characters
                $n4 = ( ( ( ord($headers[0x21F]) * 256 ) * 256 ) * 256 );
    
                // Total length of text in the document
                $textLength = ($n1 + $n2 + $n3 + $n4);
    
                $extracted_plaintext = fread($fh, $textLength);
                $extracted_plaintext = mb_convert_encoding( $extracted_plaintext, 'UTF-8', 'UTF-16LE' );
                return nl2br($extracted_plaintext);
    
            } else {
                return FALSE;
            }
        } else {
            return FALSE;
        }
    }
    
    $text = read_doc_file('test.doc');


    А пока изучал, нашёл интересный тест, может пригодиться:
    $text = "A strange string ø, æ, å, ж, п, ą, ū, ė, …"; 
    foreach(mb_list_encodings() as $chr){ 
        echo mb_convert_encoding( $text, 'UTF-8', $chr ) . " : " . $chr . "<br><br>";    
    }
    Ответ написан
    4 комментария
  • Как защитить запрос от изменения?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    О господи, опять этот вопрос.

    Запрос никак не защищать.
    Если пользователь может видеть запись 666, то пусть смотрит что хочет.
    Если пользователь не имеет права видеть запись 666, то получив любой запрос проверять его на наличие прав. А изменение запроса оставить в покое. Клиент по определению может отправить любой.

    К CSRF это абсолютно безобидное ковыряние в хтмлочке никакого отношения не имеет.
    Ответ написан
    Комментировать
  • Как защитить запрос от изменения?

    @Narts
    Решение очень простое
    Создаем две функции: cryptID и decryptID, которые шифруют и дешифруют ID. Пользователю отдаем зашифрованный ID, типа:
    data-id="wallId_G5ht3Q"
    Далее когда пользователь отправляет запрос, получаем G5ht3Q, расшифровываем его, и проверяем, существует ли запись с таким ID
    Ответ написан
    2 комментария
  • С чего начать делать сайт если никогда не писал для web?

    anton_reut
    @anton_reut
    Начинающий веб-разработчик
    С чего начать делать сайт если никогда не писал для web?

    - с этого:
    <html>
      <head>
        <h1>Заголовок</h1>
      </head>
      <body>Привет, это моя первая страничка!</body>
    </html>

    source.gif
    Ответ написан
    2 комментария
  • Что вы используете button type submit или input type submit?

    wapster92
    @wapster92 Куратор тега HTML
    Без разницы, но обычно button так как для него не обязательно прописывать type
    Ответ написан
    Комментировать
  • Во flex контейнере текст не переносится на новую строку, что делать?

    Ankhena
    @Ankhena Куратор тега CSS
    Нежно люблю верстку
    Ответ написан
    Комментировать
  • Как упростить код javascript?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Это вообще без JS делается: тут.
    Ответ написан
    1 комментарий
  • Как динамически менять название переменной в php?

    @StockholmSyndrome
    $acc = [
      'MON' => $datemon, 
      'TUE' => $datetue, 
      'WED' => $datewed, 
      // ...
    ];
    
    $data = $acc[$date];
    Ответ написан
    Комментировать
  • Как сделать сложную верстку в несколько колонок на бутстрап?

    xEpozZ
    @xEpozZ
    Веб-разработчик
    <div class="row">
        <div class="col"></div>
        <div class="col"></div>
        <div class="col"></div>
    </div>
    <div class="row">
        <div class="col"></div>
    </div>
    <div class="row">
        <div class="col"></div>
    </div>
    <div class="row">
        <div class="col"></div>
    </div>
    Ответ написан
    Комментировать
  • Почему только что запущенный сайт то работает, то нет?

    @aru001
    Возможно DNS ещё не обновились, они обновляются в течение 24 часов.
    Так же может быть в браузере кэш сохранен, попробуйте почистить.
    Ответ написан
    1 комментарий
  • Как на сервере автоматически запускать 100+ php-файлов по расписанию?

    TTATPuOT
    @TTATPuOT
    https://code.patriotovsky.ru/
    Ну, на сколько я знаю, Webhook'ов у таблиц нет. Поэтому у вас есть пара путей:
    1) Создать скрипт PHP, который будет делать запросы на другие 100 скриптов с помощью перебора директории с этими скриптами.
    2) Тоже самое сделать на Node.js. Язык асинхронный, мне кажется, подойдёт лучше для такой задачи, как триггер долгих скриптов. + сможет перезапустить скрипт, если какой-то из них сломается. Хотя это и в PHP можно сделать
    3) Просто добавить в CRON все 100 скриптов вручную. Или через поддержку, если у вас не VPS.
    Ответ написан
  • Сколько стоит час веб-разработчика-фрилансера?

    @deliro
    Ты веcь такой кругом молодец, то знаешь, это знаешь. А теперь представь себе среднестатистический проект, который должен приносить бизнесу деньги. За две недели работы ты едва напишешь хлипкий CRUD для данных, неправильно смаппив бизнес-сущности в объекты ORM, ещё через месяц натянешь какой-то слайдер на jQ, попутно захватив 2мб JS кривых библиотек, а через два заказчик поставит тебе плохую оценку, потому что твой ценник он оплатил не за то, что ему нужно, а потому что ты знаешь монады, которые ему даром не сдались.

    А теперь давай представим простого программиста. Из алгоритмов он с трудом вспоминает сортировку пузырьком, а двусвязный список — предел его знаний о структурах данных, и даже этим списком он пользовался два раза в жизни. Хаскель он никогда не видел в глаза, C++ учил только в школе, вместо этого пишет неэффективный код на PHP. И у него есть опыт. За день он распишет сущности, за второй сделает универсальный CRUD, на третий день поднимет фронт на React'е с SSR. Да, внутренности проекта будут "медленными". Вместо O(logN) что-то будет выполняться за O(N) или даже O(N^2), но всем похер. Пока всё работает на приемлемом уровне — бизнес радуется.

    Кстати, к чему эта поучительная лапша? Я хотел сказать, что всеми этими модными словами можно пугать друзей и преподавателей, но в реальной жизни все алгоритмы уже реализованы, все типы данных уже подобраны оптимально. Знать их полезно для себя (чтобы мозг не атрофировался), но не для работы. Для работы тебе нужны такие навыки как:

    * Оптимальный баланс между говнокодом и идеальным кодом
    * Оптимальный баланс между скоростью разработки и оптимизацией кода
    * Оптимальный баланс между поддерживаемым кодом и костылями
    * Умение использовать те инструменты, с которыми ты работаешь. Опять же, для того, чтобы писать быстро, при этом имея минимальное количество говнокода и обеспечивая максимальную поддерживаемость (в пределах сроков). Например, можешь выкинуть в помойку свой Vim, как бы круто ты себя не чувствовал, разрабатывая в консольном редакторе, если продукты от JetBrains позволят за это же время сделать что-то лучше или чего-то больше
    * Чувство "знаю больше менеджеров". Это то чувство, когда тебе кажется, что "вот эта фича скоро изменится" и надо сделать архитектуру заранее более гибкой. Или "вот эту фичу мы через месяц выпилим" и не надо тратить на неё силы — напиши костыль и через месяц с чистой совестью удали его
    * Знания, как сделать ту или иную фичу. Потому что фичи повторяются (немного видоизменяясь) от проекта к проекту. И если ты сделал что-то за два дня, в следующий раз ты похожее сделаешь за три часа

    Что касается инструментов, выбери любой полноценный фреймворк, который умеет решать 90%+ потребностей "из коробки": Symfony, Django, Laravel

    Всякие "минималистичные" поделия вроде Falcon, Flask (в PHP не знаю, я на питоне пишу) оставь хипстерам. Пусть они говорят: "Мой фалкон такой быстрый, он написан на Cython". Тебя это не должно волновать, потому что бизнес с твоей скоростью разработки уже заработал достаточно денег, чтобы купить ещё десять серверов, пока фалконисты неделю гуглили, как прикрутить миграциии и запустить юнит-тесты на VPSке за пять баксов.
    Ответ написан
    5 комментариев
  • Какой смысл несет в себе конструкция !! в js?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Получение логического эквивалента значения. Оператор логического отрицания применяется дважды, например:

    !!187 -> !false -> true
    !!NaN -> !true -> false

    Тот же результат даст Boolean(значение).
    Ответ написан
    Комментировать