Ответы пользователя по тегу PHP
  • Как получить в PHP тот же результат что и в OpenSSL?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    https://stackoverflow.com/questions/34496764/php-i...

    $data = file_get_contents("data");
    $pkeyid = openssl_pkey_get_private("file://key.pem");
    openssl_sign($data, $signature, $pkeyid, OPENSSL_ALGO_SHA256);
    openssl_free_key($pkeyid);
    print base64_encode($signature);
    Ответ написан
    4 комментария
  • Как отправить сообщение telegram, viber, whatsapp - без ботов? PHP?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Тут этот вопрос регулярно задают.

    Telegram - никак, вообще. Пусть нужные пользователи подпишутся на бота, а дальше им по user id можно слать.

    Viber - платно и довольно дорого через Viber Business Messages, цена одного сообщения не меньше чем смс, плюс минимальный ежемесячный платёж довольно большой. Доступ только бизнесам. Точно так же проще сделать бота и слать по id.

    WhatsApp - тут никаких бесплатных ботов легально не предусмотрено вообще, зато можно по номеру телефона тоже довольно дорого через множество посредников. Опять же, только бизнесам. В основном это продают тоже с обязательным минимальным платежом, но тут хотя бы у некоторых (у того же twilio) есть тарифы без абонентки, с оплатой за каждое сообщение. Ещё можно рисковать нелегальными методами через эмуляцию WhatsApp Web.
    Ответ написан
    7 комментариев
  • Как подтянуть сообщения с телеграм канала на свой сайт?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Возможность есть, API телеграма открыт, можно написать бота. Но сообщения в Телеграм будут подписаны ником бота, очевидно.
    Ответ написан
  • Как отправлять сообщения на Viber?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Вебхук надо настроить у себя. Например, mysite.ru/secret_path/h00k.php. Вызовом https://chatapi.viber.com/pa/set_webhook его установить для своего бота.

    Далее надо подписаться на свой public account и написать в него сообщение. Это сообщение прилетит в webhook, у него будет какой-то user_id (у одного и того же пользователя в разных ботах будет разный user_id для анонимности).

    Пока пользователь подписан на public account, ему можно слать сообщения по его user_id. Входящие сообщения от него и статусы по отправленным будут прилетать в webhook.

    В общих чертах так.
    Ответ написан
  • Как настроить смс шлюз Clickatell?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Дешёвые сервисы по отправке смс всегда являлись каналом не очень стабильной доставки, особенно зарубежные, у которых ориентации на Россию нет. Ну и надо понимать, что для операторов A2P-смс трафик - это бизнес. Они под предлогом борьбы со спамом хотят видеть трафик с заранее оплаченной клеинтом альфанумерической подписью. Так что это всегда лотерея.

    Ну а clickatell реально мог получить от своего поставщика статус доставки, который может быть необязательно подлинным. Особенно если реально там трафик идёт по SS7 с зарубежных цифровых номеров. Надо пинать поддержку, чтобы они в свою очередь пинали своих партнёров и добивались решения.
    Ответ написан
    Комментировать
  • Как лаконично сформировать SQL-запрос на основе параметров из GET-запроса?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Если задача извлечения данных по набору параметров из базы, то запрос можно конструировать, безо всяких многоэтажных условий.

    Примерно так:

    $filters = array();
    $values = array();
    
    foreach(array("user_id","city","age","name") as $key) {
      if (isset($_GET[$key])) {
        $filters []= "$key = ?";
        $values []= $_GET[$key];
      }
    }
    
    $sth = $dbh->prepare("SELECT * FROM users WHERE ".implode(" AND ", $filters);
    $sth->execute($values);


    Тут для всех указанных запросов накапливаются условия фильтра и значения в два массива, один затем через AND используется в WHERE, а второй передаётся при выполнении запроса.

    Но реальные сложные проекты так не делают. У них может быть ORM, кэширование и много всякой другой магии, цель которой - увеличить скорость выполнения запросов и уменьшить лишнюю активность. Ну и базы данных могут бычть частично или полностью быть совсем не SQL.
    Ответ написан
    2 комментария
  • Что не так с кодировкой?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Если сервер отдаёт в заголовке не то же самое, что написано в метатэги, то браузер имеет полное право игнорировать метатэг. Плюс ещё в браузерах сейчас есть автодетект кодировок, который иногда тоже доставляет забавностей. Правильнее определять кодировку с помощью своего заголовка:

    Header("Content-Type: text/html; charset=utf-8");

    Но в целом практика хардкодить кодировку в своём коде неправильна, всё это надо делать настройкой веб-сервера.
    Ответ написан
    Комментировать
  • Как сделать компилятор других языков на сайте?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    На реальных олимпиадах по программированию используются системы типа https://ejudge.ru/, в которых тестируемая программа запускается реально в ограниченном окружении.
    Ответ написан
    Комментировать
  • Как сделать несколько воркеров на одну задачу?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Самый простой и по рабоче-крестьянски наивный способ - создать один общий для всех воркеров файл и ставить на него эксклюзивную блокировку (flock LOCK_EX) в момент взятия из очереди. Например, пусть у задачи есть поле proc_status, которое имеет значения NEW, RUNNING, FINISHED, FAILED. Тогда ставим блокировку, берём из базы задание в статусе NEW, делаем update set proc_status='RUNNING' и снимаем блокировку - никто другой одновременно с нами ту же задачу не возьмёт. Финальный статус можно ставить без блокировки.

    Вместо блокировки файла можно использовать блокировки в самой базе, если они там есть (с Mongo не имел дела).

    Ещё один не менее простой способ - распределять задачи по идентификаторам. Например, пусть у нас N воркеров, тогда пусть воркер k (где k=0...N-1) обрабатывает только те задания, где id%N=k.

    В общем, способы есть.
    Ответ написан
    Комментировать
  • Почему header нельзя использовать после оператора вывода?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Потому что в протоколе HTTP заголовки выдаются до любого контента. Если контент уже хотя бы частично выдан, то Header'ы уже выводить нельзя (хотя это можно обойти через ob_start).
    Ответ написан
    5 комментариев
  • Memory_get_usage на хостинге и Денвере отличаются показатели, Почему?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Операционная система, её разрядность, загруженные расширения - всё влияет.
    Ответ написан
    Комментировать
  • Почему письма не доходят в Gmail?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Для начала проверяем RDNS/DKIM/SPF и всё такое. Большинство почтовиков очень плохо отнесутся к письму с невнятного хоста.
    Ответ написан
    Комментировать
  • Как асинхронно выполнить скирпт php?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Поднять time limit в php, чтобы скрипт успевал выполниться.

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

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

    В общем, есть варианты.
    Ответ написан
    Комментировать
  • Как ограничить доступ к api сайта?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Если запрос делается с клиента, то в общем случае никак нельзя запретить клиенту подделать запрос. Но можно усложнить (обфускация, Referer, CORS и всё такое).
    Ответ написан
    3 комментария
  • Как отправить сообщение в WhatsApp?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    WhatsApp такого не предоставляет. Есть только решения для бизнес-аккаунтов.
    Ответ написан
    Комментировать
  • Правильное экранирование кавычек для CSV?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Лучше использовать fputcsv и не пытаться сделать хитрее, чем уже придумали умные люди.
    Ответ написан
    Комментировать
  • Нужно API для расчёта стоимости и срока доставки посылок через Почту России

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Индексы есть в КЛАДР. Ещё есть эталонный справочник индексов, фактически база почтовых отделений info.russianpost.ru/database/ops.html
    Ответ написан
    Комментировать
  • SpreadSheet_Excel_Writer и вкладки (листы) с русскими именами

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    PHPExcel получше будет.
    Ответ написан
    Комментировать