• PHP foreach: почему валится с ошибкой?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Пытался наиболее подробно все изложить и разжевать:

    /* @var string Исходный текст в синтаксисе HEREDOC */
    $process = <<<TEXT
    Lorem ipsum
    Lorem ipsum
    Lorem ipsum
    TEXT;
    
    /**
     * Оборачивает элемент в тег <span>
     * @param type $element 
     * @return type
     */
    function spanElement( $element )
    {
    	return "<span>{$element}</span>";
    }
    
    // Получаем построчно исходный текст
    // примечание: если есть средство работающее без регулярок, то лучше использовать его
    $arProcess = explode("\n", $process);
    
    // Применяем к каждому элементу нашу функцию, модицифируя ее значения
    // см: http://php.net/array-map
    $arProcess = array_map('spanElement', $arProcess);
    
    /*
    При вызове var_dump на $arProcess результат будет следующим:
    
    array(3) {
      [0] =>
      string(24) "<span>Lorem ipsum</span>"
      [1] =>
      string(24) "<span>Lorem ipsum</span>"
      [2] =>
      string(24) "<span>Lorem ipsum</span>"
    }
    */
    
    // Вновь объединяем это все в исходный текст
    $process = implode("\n", $arProcess);
    
    /*
    При вызове var_dump на $process результат будет следующим:
    
    string(74) "<span>Lorem ipsum</span>
    <span>Lorem ipsum</span>
    <span>Lorem ipsum</span>"
    
    */


    Для усвоения работы foreach, рекомендую ознакомиться с документацией: php.net/manual/ru/control-structures.foreach.php
    Ответ написан
    Комментировать
  • Только локальный gulp?

    Zoxon
    @Zoxon
    Веб-разработчик
    Можно ./node_modules/.bin/gulp
    Удобней всего добавить в package.json в секцию scripts
    "gulp": "./node_modules/.bin/gulp",
    "dev": "npm run gulp dev"
    Ответ написан
    Комментировать
  • Как настроить связку PHP+postgresql?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Я бы вам порекомендовал посмотреть в сторону PDO. Всё же унифицированный API для подключения и взаимодействия с базами данных.

    Убедитесь, что расширения для работы с postgres у вас подключены в php.ini.
    Само подключение достаточно простое, как и последующая работа:

    $userId = 20;
    try {
        $db = new PDO("pgsql:dbname=basa;host=localhost", "admin", "123" );
        $sql = "SELECT * FROM public.users WHERE id = ?";
        $sqlQuery = $db->prepare($sql);
        $sqlQuery->execute([$userId]);
        
        while($result = $sqlQuery->fetch(PDO_FETCH_ASSOC)) 
        {
            echo "{$result['id']} / {$result['name']}<br />";      
        }
    
        $dbh = null;
    }
    catch(PDOException $e)
    {
        echo $e->getMessage();
    }
    Ответ написан
    3 комментария
  • Как авторизовать пользователя из соцсети, если у него не указан email?

    @imhuman
    А зачем что-то доставать из соцсети в императивном виде? Достаточно от Socialite получить идентификатор юзера в сети и на его основе создать учетку или прикрепить к существующей, если человек уже залогинен. Все остальные данные можно запросить у человека напрямую, если соцсеть не хочет ими делиться. Например, используя middleware, проверить все ли данные есть у юзера, в случае неполного профиля отобразить страничку с формой заполнения.
    Ответ написан
    Комментировать
  • Как уменьшить тысячи картинок во всех подпапках?

    sim3x
    @sim3x
    Нужны пакеты
    sudo apt-get install jpegoptim imagemagick optipng
    mogrify

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

    Оптимизируем jpeg
    find . -type f \( -name "*.jpeg" -or -name "*.jpg" \) -exec mogrify -resize x100 -quality 90 {} \; -exec jpegoptim -o --strip-all {} \;


    Оптимизируем png
    find . -type f -name "*.png" -exec mogrify -resize x100 {} \; -exec optipng -o1 {} \;


    mogrify -resize ШИРИНАxВЫСОТА -quality КАЧЕСТВО
    если высоты(ширины) нет, то изменяем пропорционально

    optipng -o9 file.png
    максимальное количество проходов по изображению, очень эффективно для запущенных случаев, очень-очень долго
    пару минут на файл 1500х1500

    optipng -o5 file.png
    просто долго

    # код предоставляется как есть

    # почему оптипнг - он офигительный

    # для других типов картинок меняем find и ищем каким софтом их оптимизируют
    Также можно сконвертить картинки в пнг-жпг, но часто это как-то нужно синхронизировать с бд, и тут нет простого пути
    Ответ написан
    12 комментариев
  • Как осуществить множественный insert данных в laravel?

    @D3lphi
    $class->insert([
        [
            'name' => 'Михаил',
            'surname' => 'Лермонтов'
        ],
        [
            'name' => 'Александр',
            'surname' => 'Пушкин'
        ],
        [
            'name' => 'Лев',
            'surname' => 'Толстой'
        ],
    ]);

    Добавит в таблицу 3 новых записи.
    Ответ написан
    Комментировать
  • Как заставить браузер обновить файлы в кэш-хранилище?

    Stalker_RED
    @Stalker_RED
    Самый непробиваемый способ:
    <link rel="stylesheet" type="text/css" href="my.css?ver=42">

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

    Ну и конечно-же, для кеширования есть настройки и параметры, которые передаются в заголовках.
    Первый попавшийся приличный гайд по запросу "http cache headers guide":
    https://www.mnot.net/cache_docs/#CACHE-CONTROL
    Ответ написан
    5 комментариев
  • Как правильно собирать Web-проект?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    Ох, grunt и bower (While Bower is maintained, we recommend yarn and webpack for new front-end projects!) сейчас уже никто не использует. gulp еще кое-где живет, но далеко не везде. Фронтендовые пакеты ставятся npm, сборка — webpack.

    Интеграция с бэкендовой сборкой сводится обычно к запуску npm run build в нужной директории (любой сборщик умеет запускать произвольную внешнюю команду).

    P.S. Да, webpack это больно, но сейчас гораздо проще найти готовый конфиг и минимально допилить под себя. Еще yeoman помогает.
    Ответ написан
    5 комментариев
  • Есть ли в laravel обычная модель, не Eloquent ORM?

    JhaoDa
    @JhaoDa
    LaravelRUS Team
    Это обычный класс. Есть ли в РНР классы? Опять же, для обработки конкретно форм есть FormRequest'ы, для валидации всего прочего есть просто валидатор.
    Ответ написан
    5 комментариев
  • Как загрузить на httpS сайт скрипт с другого сайта, который не httpS?

    @Fixid
    Nginx proxy_pass и подключать по локальному адресу.
    Или выкачать его на свой сервер к своим ресурсам
    Ответ написан
    Комментировать
  • Php, какая цель использование регулярных выражений?

    copist
    @copist
    Empower people to give
    Ответ на вопрос очень легко гуглится. Это настолько популярная тема, что написано уже килотонны материалов на всех языках. Есть предположение, что Sergey0808 получил вопрос на собеседовании и решил не парить голову. Но судя по ответам, тут только много весёлых ребят, которым нечем было занять пятничный вечер :)



    Практические примеры:
    • Проверка валидности URL, имейла, чисел, даты, времени
    • Поиск URL, email, дат, времени в заданном тексте
    • Удаление HTML тегов или иных шаблонных фрагментов, не несущих ценности
    • Обрамление URL, имейла, числа, даты, времени дополнительными HTML тегами, к которым позже с помощью JS добавляются виджеты URL, email, календарь. Например - открыть URL в другом окне, добавить в календарь событие на дату
    • Разбиение строки на части с замысловатым разделителем
    • Работа различных шаблонизаторов основана на замене регулярных конструкций с помощью preg_replace_callback. Например {{ var }} -> <?php echo $var ?>
    • Маршрутизация URL в серверных фреймворках - какой код выполнить в зависимости от URL. Например если на сервер пришёл запрос /admin/user/edit/1 - то выполнить код из модуля Admin класса UserController метода editAction с входным параметром "1"

    Ответ написан
    Комментировать
  • Как периодически менять содержимое буфера обмена?

    @Otrivin
    junior full-stack сисадмин
    Можно велосипедом на экселе :-S

    Создается лист, в ячейки вбиваются фразы.
    Пишется макрос, который раз в заданный промежуток времени проходит по ячейкам сверху вниз и копирует их содержимое в буфер.

    Все оборачивается в бесконечный цикл с проверкой, есть ли в текущей ячейке данные. Если нет - выделяем верхнюю и продолжаем копирование с нее
    Ответ написан
    1 комментарий
  • Какой программой воспользоваться что-бы найти момент изменения кадра в видео файле на 48 часов?

    Moskus
    @Moskus
    Запустить VLC из командной строки, скормив ему нужный файл и добавив опции --video-filter=motiondetect для включения фильтра детектора движения, по вкусу - --rate= для скорости воспроизведения, ну и -vv >logfile.txt - для вывода сообщений в текстовый лог, который потом предстоит изучить.
    Ответ написан
    5 комментариев
  • Как обрабатывать данные в случае, если может придти массив объектов или просто объект?

    Сделайте что-то типа:
    input = Array.isArray(input) ? input: [input];
    // дальше работаем с input как с массивом
    Ответ написан
    5 комментариев
  • Зачем шифровать скрипты, например PHP с помощью ionCube 9?

    Sanasol
    @Sanasol Куратор тега PHP
    нельзя просто так взять и загуглить ошибку
    А если серьезно, то это у них вроде ускоряет загрузку скриптов. Что-то типа компиляции в байт-код.

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

    Объясните, зачем он? Когда применяется? Приведите реальный пример.

    когда продаешь самохостящийся продукт на php в котором есть проверка лицензии или просто супер гениальные алгоритмы которые не хочется раскрывать. Чаще конечно никаких гениальных вещей там нет и шифруют только ради проверки лицензии и отключения софта когда лицензия кончилась.

    Как правило все версии(кроме самых самых свежих) любого шифровальщика относительно легко раскрываются с помощью гугла/форумов DeZender'ов или даже онлайн сервисов.
    Вскрытие не всегда бесплатно естественно и не всегда прокатывает(точность не 100% при восстановлении, суть уловишь, но исходиники будут не рабочие).
    Суть вскрытия в удалении/обходе проверки лицензии.
    Т.к. особо там ничего не придумаешь, то проверка лицензии это зачастую просто запрос на сайт продавца из разряда
    $license_ok = file_get_contents("http://shopcms.com/check_license.php?domin=customer.com");
    if($license_ok) {
    //ok
    } else {
    die("Pay for license");
    }


    Поэтому обходится примерно так:
    Без изменения оригинального кода и работой с зашифрованынми исходниками(в случае если расшифровать не удалось до конца, но суть проверки лицензии понятна)
    1. Заворачиванием сайта продавца на локалхост с вечной лицензией. (прописать в hosts файл)
    2. Подменой глобальных переменных($_SERVER) чтобы проверялся домен на котором есть лицензия. (вставить в index.php или другое место где исходники открыты)

    Если исходники расшифровались правильно и работают
    3. Выпиливанием проверки лицензии из исходников.

    Лень искать, а точнее поиска нет по овтетам, но уже писал.
    Я считаю что шифрование никак не увеличит продажи или защитит от мамкиных хакеров.
    Кто очень хочет - он будет ломать, в случае неудачи просто не будет пользоваться.
    Кто адекватный - будет платить в любом случае за СЕРВИС/ОБСЛУЖИВАНИЕ. Т.е. получать обновления и поддержку разработчиков.

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

    Возможно даже можно сравнить с борьбой с пиратами.
    Закрывают торренты, видео сайты, судятся из-за "упущенной прибыли".
    При этом продолжают снимать и прибыли только растут с годами.
    Никто так и не доказал что раздача кинца/игор на торренте равняется потери прибыли.
    И опять же даже наоборот помогает некоторым продуктам увиличивать аудиторию.

    PS. Забыл решение написать грамотное по моему мнению.

    1. Если у вас действительно супер-пупер секретный алгоритмы которые никто не знает или может повторить.
    Использовать исключительно модель SaaS или производить вычисления через ваш сервер(но продукт всё равно будет стоять на сервере клиентов).

    2. Если никаких алгоритмов взлома гугла/пентагона/игил/телеграма там нет.
    Просто отдавать открытые исходники для работы.

    3. Если вы пишите очень плохой код и вам стыдно или хороший код, но вы жадный.
    Используйте SaaS.
    Технологии позволяют привязать домен клиента к вам, создать ему отдельное рабочее пространство(виртуалку/сервер) и всё что только придумать можно.
    Ответ написан
    4 комментария
  • Зачем шифровать скрипты, например PHP с помощью ionCube 9?

    @Eugeny1987
    Работаю с HostCMS
    ionCube нужен для защиты вашего кода от правок, нелегального использования и т.д.
    Ответ написан
    2 комментария
  • Временное убежище на случай падения хостинга?

    @BorisKorobkov
    Web developer
    Поскольку хост стоит 100 рублей в месяц -- платить за временное решение хочется меньше.

    Если вы оцениваете результат вашей работы (сайт) дешевле 100 руб/месяц, значит, ваша работа - полный трэш. Такое никто и не заметит, если сайт упадет. Так что можно и не париться.
    А если ваша работа стоит сотни тысяч рублей, то жмотиться сотни рублей - это нищебродство
    Ответ написан
    5 комментариев
  • Что должен знать senior frontend developer?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    Я бы сказал, что ответ Александр Вульф тянет скорее на крепкого middle. Senior еще должен как минимум писать юнит-тесты, знать git на уровне git rebase --interactive и git push --force-with-lease, иметь практическое знакомство с TypeScript или Flow, и на базовом уровне разбираться в ООП и ФП паттернах (не совать синглтоны куда не надо, соблюдать SOLID, отличать хотя бы фабрику от фасада, узнавать трансдьюсер и т.п.).
    Ответ написан
    3 комментария