Задать вопрос
  • Как реализуется сброс кеширования страниц в Single Page Application?

    Serhioromano
    @Serhioromano
    Web Developer
    Ни как нельзя со стороны сервера сбросить клиентский кешь. Обычно в таком случае делают систему оповещений. Например версия на сервре стала больше чем клиентская. Тогда пользователь видит сообщение на сайте что произошло обновление и что ему нужно обновить страницу если он хочет его получить.

    Это не только удобно но и правильно. Пользователь должен знать когда и что появилось. Так вы не только обновляете но и убеждаетесь что пользователи знают что нового в новой версии, так как прикрутить changelog к подобной системе не составит труда.

    Можно так же автоматически обновить страницу если на сервере обновлась версия без каких либо уведомлений.

    Если у вас в прокте есть package.json то можно при помощи $http читать версию в этом файле. Все что нужно при релизе это обнвоить весрию. Для этого нужно будет что бы какойто скрипт с интервалом проверял данные.

    Если не хотите инетрвал что бы не нагружать, можете это встроить в свое API. В config настройет $httpProvider что бы всегда отправлять текущую версию клиента. И на сервере, прежде чем выдать данные, проверте эту версию и если есть обновление, то выдайте специальный Json кторый перезагрузит страницу. Это можно добвавить interceptors которые будет это делать и проверять с каждым запросом автоматически.
    Ответ написан
    1 комментарий
  • Как закрыть от просмотра ini файлы на сайте?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    1. Апач стоит не везде.
    2. Всю внутреннюю кухню надо класть выше веб-рута.
    3. по поводу локализации и вовсе париться не нужно - она никому не нужна
    Ответ написан
    1 комментарий
  • Можете что-то подсказать по-поводу кода?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Любой класс, в котором есть метод update() - по определению ущербен.
    попробуй с его помощью сделать банальнейший инкремент поля или использовать функцию Mysql. Не говоря уже о том чтобы выполнить какой-нибудь запрос, отличный от тупого UPDATE.

    Основная проблема твоего кода - его чудовищная уязвимость, дыры просто со всех сторон.

    Вопросы:
    при чем здесь mysqi, если ты пишешь под PDO?
    какие методы работают медленно и с чего ты это взял?
    зачем тебе нужно создать класс для работы с базой данных с драйвером PDO?

    Теперь к ноукам.

    Если говорить об удобстве выполнения запроса UPDATE, то идеальным вариантом будет кастомный плейсхолдер для массива с данными + стандартная функция для выполнения запросов.

    Пример, с использованием phpfaq.ru/safemysql
    Если у нас тупой апдейт
    $db->query("UPDATE ?n SET ?u WHERE id = ?i", $table, $data, $id);

    обращение к этому методу не сложнее, чем к твоему специальному, но при этом любые сложности здесь решаются с легкостью, а у тебя - никак:
    $sql = "UPDATE ?n SET count = count+1, NOW(), ?u WHERE id = ?i";
    $db->query($sql, $table, $data, $id);


    Если все же хочется именно средствами PDO, то читаем тут phpfaq.ru/pdo
    в основном про экранирование имени таблицы и имен полей, и про сборку корректного запроса из пар ключ-значение
    Ответ написан
    2 комментария
  • А не реализовать ли на тостере голосовалку?

    smanioso
    @smanioso
    Отмечайте ответы на свои вопросы!
    для прикола проголосовал на парочку вопросов,

    Рекомендую - vk.com
    Ответ написан
    Комментировать
  • Можно-ли отобразить изображение без загрузки его на сервер?

    Есть в HTML 5 объект FileReader, который поможет это реализовать.
    Пример, jsfiddle.net/sLnLeLwg
    Документацию можно нагуглить.
    Ответ написан
    3 комментария
  • Как сохранить страницу сайта со всем ее зависимым содержимым?

    Basters
    @Basters
    Кокер-спаниель
    Погоди.... Phantom.js это несколько другое....

    Если тебе просто выкачать сайт нужно сохранив все пути и зависимые файлы, то юзай wget!

    wget -r -k -l 7 -p -E -nc http://site.com/

    Где

    -r—указывает на то, что нужно рекурсивно переходить по ссылкам на сайте, чтобы скачивать страницы.
    -k—используется для того, чтобы wget преобразовал все ссылки в скаченных файлах таким образом, чтобы по ним можно было переходить на локальном компьютере (в автономном режиме).
    -p—указывает на то, что нужно загрузить все файлы, которые требуются для отображения страниц (изображения, css и т.д.).
    -l—определяет максимальную глубину вложенности страниц, которые wget должен скачать (по умолчанию значение равно 5, в примере мы установили 7). В большинстве случаев сайты имеют страницы с большой степенью вложенности и wget может просто «закопаться», скачивая новые страницы. Чтобы этого не произошло можно использовать параметр -l.
    -E—добавлять к загруженным файлам расширение .html.
    -nc—при использовании данного параметра существующие файлы не будут перезаписаны. Это удобно, когда нужно продолжить загрузку сайта, прерванную в предыдущий раз.

    P.S. ты пишешь что это будет сервис, тогда в принципе ничего сложного написать BASH реализацию скрипта. Однако нужно учитывать все тонкости твоей задачи...
    Ответ написан
    3 комментария
  • А в чем минусы node.js?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    В том же в чем его и плюсы.

    Асинхронность... ее там нет. Там есть event loop что позволяет писать крайне эффективные программы в плане работы с I/O (что для web очень неплохо) и не париться о таких вещях как потокобезопасность, блокировки и т.д. А если еще и несколько инстансов приложения запусть - по одному на ядро скажем, то утилизация вычислительных мощностей выйдет неплохой. Но распаралелить что-то в рамках одного процесса воркера мы уже не можем. Мы не можем посчитать что-то, проанализировать, заняться обработкой жирной картинки прямо при обработке запроса потому что наш процесс воркер так же обрабатываете еще пару десятков запросов, и пока мы будем удовлетворять нужды одного простаивать будут все. Нода хороша когда у нас все состоит из элементарных операций которые не занимают много времени, все жирное надо выносить из основного процесса и разруливать очередями и т.д. Эта проблема имеет массу решений на самом деле, но все уже усложняется и нода теряет свою красоту. Лучше взять Java/c#/Python для этого (и не надо тут вспоминать про шутки с многопоточностью в CPython).

    callback-hell. Собственно наличие event loop диктует так же правила о том, как должна писаться программа. Кучи колбэков, невозможность дебажить нормально и получить четкий стэктрейс из ошибки. Да, есть промисы которые решают первую проблему, да есть либы вроде zone.js которые решают вторую и частично первую проблему... но все это не тривиальное дело.

    Собственно... разработка больших и сложных проектов на ноде возможна... но требует от разработчика хорошие знания и понимание того, как работает его платформа. А это увеличивает стоимость разработки в то время как можно взять более эффективные в этом плане инструменты.
    Ответ написан
    10 комментариев
  • Поможет ли такой php-код защититься от sql-инъекций и XSS, какие в нём есть уязвимости?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Все что делает этот идиотский код - это портит входящие данные.
    Я даже не знаю, стоит ли объяснять. Ведь 100500 раз уже объясняли.

    Но самый, конечно ад - это ответы.

    Когда начинаешь этим щеночкам объяснять, что такое инъекция, и как от нее защититься, все начинают шипеть - "да знаем уже, учоные!". Но когда доходит до дела - такой ад выдают, что становится понятно. Не учёные, а все те же обезьяны, которые вызубрили пару заклинаний, но по традиции не понимают, ни как эти заклинания работают, ни для чего они нужны.

    Тем, кто предлагает отрезать кавычки от quote, надо самим что-нибудь отрезать.

    И это неловкое чувство, когда 2015 году слышишь самую заветную мантру мадагаскарских гамадрилов: "mysql_real_escape_string зашышает от ынъекцый!". Стоит, блин, такой "устаревший", но еще крепкий архангел с пылающим мечом, и разит супостата прямо в темечко - вот так представляет себе принцип работы этой функции средний пользователь похапе.
    Ответ написан
    Комментировать
  • Как сделать музыкальный сайт?

    @frees2
    Тупо можно сделать за три дня, те чуваки в списке, безбожно вещают библиотеки и пиздят окуда можно тока, хотя есть поддержка всеми браузерами HTML5.
    Чарты и альбомы и прочие няшки лежат на яблоке, там более интересные а на ютубе более рекламно прет.
    Пример ленты, в современном варианте надо брать V3 от гугла JSON

    <?php
    $feedURL = "http://ax.itunes.apple.com/WebObjects/MZStore.woa/wpa/MRSS/newreleases/limit=25/rss.xml";
    $xml = simplexml_load_file($feedURL);
    $i = 1;
    foreach ($xml->channel->item as $item) {
    $title =  $item->title;
    echo '<option  value="http://gdata.youtube.com/feeds/base/videos/-/Music?q=',$title,'&orderby=published">',$title,'</option>';
    $i++;
      if ($i >25) break; 
    } ;
    ?>
    Ответ написан
    Комментировать
  • Эпопея борьбы с футером. Как прижать его к низу, но не как у всех?

    Внимание! крайне не советую прижатие футера к низу через css вот этим способом! Ловите код и всегда прижимайте его js-ом
    //fixed footer
    if($(".footer").offset().top+$(".footer").outerHeight()<$(window).height())
    $(".footer").css({
    position: "absolute",
    width: "100%",
    bottom: 0
    });
    Ответ написан
    6 комментариев
  • Какой принцип использовать для хранения данных в MongoDB?

    Рекомендую почитать "50 Tips and Tricks for MongoDB". Текста не много, а информации полно. Здесь в ответах немного напутали - то, что у вас под 1ым пунктом - это денормализованная коллекция. Плюсы в том, что за один запрос имеете всю информацию по обьекту, ну а минусы соответственно, что сложно применять правки. А 2ой пункт, это уже нормализованная - и тут всё наоборот. Но главное, это грамотно балансировать между ними, а не выбирать одну из сторон. Структура очень зависит не только от структуры данных, но и того - как мы используем эти данные (какие выборки делать будем) и на сколько важна их актуальность. Пару советов из разных сторон:
    - если идете по первому пути - то можете хранить также все подсущности в отдельных коллекциях. Изменяя подсущность, изменяете её в своей коллекции, и не бойтесь писать скрипты для нормализации, которые по крону будут актуализировать основную коллекцию.
    - а если по второму, то храните не только `_id` подсущностей, но также часть обьекта, которая всегда будет нужна, что бы минимизировать запросы.
    Ответ написан
    Комментировать
  • Какую ОС лучше использовать для веб-программиста?

    @AlexP11223
    МакОС, срочно выкидывай PC и беги в магазин за маком, иначе никак.
    Ответ написан
    13 комментариев
  • На какую тему прибыльнее сделать сайт?

    iiil
    @iiil
    Инженер и вэб-дизайнер, рисую.
    Про пользу хомута в сельском хозяйстве.
    Ответ написан
    2 комментария