Ответы пользователя по тегу PHP
  • База данных MySql, как сделать переменную, с индивидуальным значением для всех аккаунтов?

    @rPman
    Если по каким то причинам таблицу для данных создавать не желаете
    то можно использовать вьюху или хранимую процедуру, в которой прописываете буквально все значения от пользователя (или любых других условий)
    SELECT CASE
      WHEN USER() =='one@localhost' THEN 1
    ...
      ELSE 0
    END

    т.е. местом хранения тут будет код хранимой процедуры или вьюхи а для ее обновления потребуется вызов ddl
    Ответ написан
    Комментировать
  • Как объединить N-ое количество mp3 в один?

    @rPman
    ffmpeg умеет работать со всем видом медиа файлов, так же умеет работать с ftp/http протоколами так что достаточно разобрать json, сформировать команду вызхова ffmpeg утилиты и получить результат

    вот дока с примерами
    Ответ написан
    2 комментария
  • Почему значение даты на php записывается задом на перёд, какие исторический предпосылки обусловили этот феномен?

    @rPman
    Потому что это стандарт ISO 8601 (формат в date символом 'c'), основной принцип слева направо от наиболее значимой (длительной) части к более короткой
    Ответ написан
    Комментировать
  • Как спарсить закрытую страницу на PHP?

    @rPman
    Если сайт защищается от подобного, то необходимо более точно сымитировать поведение веб клиента, а именно все заголовки и возможно даже последовательность запросов перед нужным. Не исключено что даже тайминги так же учитываются (а еще я бы с хоста, с которого хоть иногда прилетают нетипичные запросы с юзерагентом curl маркировал бы как опасные и в песочницу бы отправлял с нетипичным поведением, чтобы еще сильнее запутать реверсинежнеринг)

    подробности смотри во вкладке network правая кнопка на запросе - копировать curl bash, там будет очень удобно и понятно все разложено по полочкам с примером
    Ответ написан
    Комментировать
  • Как из уже инициализированного объекта(подключения) PDO получить название базы данных?

    @rPman
    зависит от выбранной базы данных
    например для sqlite:
    PRAGMA database_list;

    postgres:
    SELECT current_database()

    mssql -
    SELECT DB_NAME()

    и т.п.
    Ответ написан
    Комментировать
  • Некорректный curl php запрос (xhr)?

    @rPman
    Так тут тебе не смогут помочь, но

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

    Правая кнопка на записи, копировать, как curl bash - получишь строку в буфере, которая подробно расписывает какие заголовки и каким должен быть запрос, повторяешь его в php (я в одном месте не смог, была какая то особенность различие в php_curl, так я тупо запускал утилиту curl которая работала)

    Вполне возможно сервис ожидает что нужно несколько запросов последовательно (бывают такие программисты не знающие что запросы в REST должны быть с независимыми состояниями, ну это хороший тон)

    p.s. одно время старался, симулировал вызовы, но позже понял что гораздо проще и дешевле для разработки (но дороже по ресурсам cpu и ram) симулировать поведение на самом сайте, особенно если код нужно поддерживать несколько лет а сайт и запросы меняются постоянно), делать это можно как инструментами типа selenium так инжектом javascript кода прямо на страницу сайта с помощью чего то типа greasemonkey
    Ответ написан
    Комментировать
  • Как отобразить индикатор загрузки PWA-приложения?

    @rPman
    статистику можно самостоятельно собрать, по логам на сервере видно когда приложение начало загружаться, а в момент запуска на клиенте приложение может сообщить время серверу когда этот процесс завершился (хотя не обязательно).

    Собираешь статистику по устройствам, подсетям, трафику... все видно будет в логах сервера.

    Затем начинаешь искать зависимости, например время загрузки по тому с какой скоростью и сколько компонент было загружено в первые 2-3 секунды, чем больше уу тебя будет экспериментальных данных, тем точнее будет предсказание.
    Ответ написан
  • Как соединиться через curl с сайтом на опрелененный ip?

    @rPman
    соединиться с сайтом на определенном IP адресе
    как понимать это?
    ip адрес это адрес машины в интернете, с которой соединяешься
    на одной машине может быть несколько сайтов под разными доменными именами

    Бывает когда на один адрес может выдаваться несколько ip адресов- geodns, если это надо обойти, то можно локально для себя (в своей сети) настроить dns на выдачу конкретного ip адреса либо тупо прописать в /etc/hosts

    p.s. у утилиты curl есть ключ
    --connect-to <HOST1:PORT1:HOST2:PORT2>
    какраз для подмены подключений HOST1:PORT1 на HOST2:PORT2
    еще есть
    --resolve <host:port:address[,address]...>
    Provide  a  custom address for a specific host and port pair


    соответствующие им олпции curl_opt - CURLOPT_CONNECT_TO и CURLOPT_RESOLVE
    Ответ написан
    4 комментария
  • Какой из текстовых редакторов Linux умеет работать по FTP?

    @rPman
    докину варианты, в linux есть проект fuse, позволяет монтировать файловые системы, описываемые простой библиотекой, работающей как обычное приложение в userspace, на основе его сделана поддержка всяких экзотических ситуаций, в т.ч. работа по ftp - ftpfs (идет штатно с любым линукс), так же есть sshfs для доступа по ssh, avfs для архивов (сюда же fuse-zip и archivemount) или экзотический winregfs для чтения файлов реестра windows как файлы и т.п. десятки библиотек идут по дефолту в репозитории.

    монтируешь в каталог без root и пользуешься как локальными файлами из любых программ
    Ответ написан
    4 комментария
  • Можно ли отдать небольшой промышленный проект PHP на оценку правильности архитектуры?

    @rPman
    Все зависит от целей - для себя (если ты разработчик или занимаешься внедрением кем то написанного) и своего успокоения или для отчетности и сертификации.

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

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

    @rPman
    netcat (или nc) - консольная утилита, позволяет подключаться по tcp или udp и перенаправлять поток в файл или stdin, максимально примитивный и простой, но в локальной сети можно использовать чтобы файлы перекидывать на максимуме пропускной способности сети

    ps особо извращенные на bash с его помощью делали веб сервер
    Ответ написан
    Комментировать
  • Как правильно обрабатывать запросы в PHP?

    @rPman
    Мне надо проверить что запрос несет в себе json и определенный header, что бы ни кто просто так не мог запросы кидать
    исторически это делают через авторизацию

    Добавить basic auth либо на стороне веб сервера либо прямо в php дело нескольких строчек. Для отправки запроса практически любой библиотекой можно пользоваться следующим форматом url - http://user:password@site.com/path (даже php file_get_contents поддерживает)

    Ну и самое простое - по токену
    токен это буквально пароль, который либо прописан в конфигах/исходниках твоего сервиса либо выдается сервисом авторизации на время. Этот токен можно указывать либо в заголовках (тогда для отправки запроса нужно этот заголовок установить или еще проще - разместить этот токен прямо в запросе, т.е. site.com/doit?auth=secret_password

    Если протокол общения с твоим сервером будет https никто не сможет узнать ни логин пароль, ни токен авторизации, не имея доступа к машине с которой они вызываются
    Ответ написан
    8 комментариев
  • Возможно ли прочитать с помощью php файл который находится на удаленном сервере?

    @rPman
    это basic http auth
    скачать можно простым file_get_contents а логин и пароль указать в самой ссылке в формате:
    https://login:password@site.com/...
    Ответ написан
    Комментировать
  • Ошибка PDO при работе с SQLite?

    @rPman
    наверное нельзя в sqlite внутри запроса ; использовать?
    если тебе надо ускорить вставку, используй транзакции, перед вставкой кучи строк $PDO->beginTransaction() а после соответственно $PDO->commit();

    Если же действительно надо именно одним запросом несколько insert, попробуй вместо кучи insert написать один, вставляющий результат следующего селекта, а он уже в свою очередь собирай с помощью union all селекты с константами::
    INSERT INTO table (idGame, idChannel, dateU)
    SELECT :iG1, :iC1, :dU1
    UNION ALL
    SELECT :iG2, :iC2, :dU2
    Ответ написан
    2 комментария
  • Как заставить wpallimport php 8 использовать несколько ядер?

    @rPman
    что именно нагружает процессор? база данных или php?

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

    @rPman
    Кучи if ($request->input("type") заменяй на switch case, тем более далее по тексту у тебя оно используется, пиши код хотя бы в одном стиле.

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

    Про права доступа, у тебя точно 2 состояния - public и authorized? может у тебя еще есть какой-нибудь superuser? или еще есть права на основе данных (например если статус операции 'такой то' то действие запрещено)... хотя метод по любому должен быть ->allowed() который собирает данные по текущему пользователю, состоянию, данным и т.п. хотя лучше разделять права доступа по роли и по состоянию, пусть будет пара методов.

    Вот такие строчки "required|numeric|min:1|max:10000" - bad practics, магические константы, что значит 10к, 15, 3, 24, 5000... везде разные, что почему зачем, уже через пол года ты не вспомнишь а уж другой программист и подавно не поймет. Оформляй в виде функции-генератора или даже класса, документируй все значения, даже если это значения от балды, когда ты их выдумывал какой то смысл ты в это вкладывал - опиши это в коментариях в этой функции или классе, не обязательно все выносить в конфиг файл, сам отдельно лежащий файл с таким классом уже этот конфиг. Мало того, почему сериализация массива такая странная, на рынке существует уже безоговорочный стандарт json, и machine и human readable, накладные расходы минимальны (можно заставить паковать nginx, по трафику будет не на много больше чем умно оформленный protobuf), тем более у тебя там ошибки уже в json выдаются.
    Ответ написан
    2 комментария
  • Как правильно спроектировать замену классов?

    @rPman
    В php, если ты не проводишь контроль типов используемых экземпляров объектов, методы вызываются по имени, как есть, т.е. достаточно чтобы класс экземпляра объекта имел методы с теми же именами что у тебя используются, и совместимым порядком параметров, и все будет работать.

    Ну а если ты везде тип контролируешь, используй паттерн интерфейс-реализация, указывая в качестве типов - интерфейс.
    Ответ написан
  • Как исправить, ssl блокирует парсер simple_html_dom?

    @rPman
    загрузи страничку вручную тем же curl а парсеру корми строчку методом str_get_html
    Ответ написан
    6 комментариев
  • Посчитать итоговую сумму итого?

    @rPman
    есть только числа и нужна их сумма? нет скобок или вызова функций например?
    $str='200 - 100 - 50 ';
    if(preg_match_all('/\s*([+-]?)\s*(\d+)/',$str,$m))
    {
    	$sum=0;
    	foreach($m[0] as $i=>$v)
    		$sum+=($m[1][$i]=='-'?-1:1)*$m[2][$i];
    	echo 'Сумма: '.$sum;
    } else
    {
    	echo 'Синтаксическая ошибка';
    }
    решение не фонтан, кучу ошибок тупо проигнорирует и ты об этом даже не узнаешь
    Ответ написан
    Комментировать
  • Сжатие html посредством кода, вызывает ли данный код какую-то нагрузку и есть от него польза?

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

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

    Ну и в догонку, указанный код слегка повысит нагрузку на процессор, незначительно но все же.
    Ответ написан
    Комментировать