Задать вопрос
Ответы пользователя по тегу PHP
  • Не работает проверка на число в массиве/GET?

    @rPman
    $_GET возвращают только строки и массивы, а is_integer проверяет тип переменной, а не ее значение.

    Чтобы проверить по значению, есть is_numeric, для строк "1" или " -0.123" оно будет true но "1-ая" уже false
    Ответ написан
    Комментировать
  • Какую область программирования выбрать PHP или Java?

    @rPman
    в данном случае язык определит направление дечятельности

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

    java - если смотреть на рынок, это в первую очередь мобильный гейминг android,.. не потому что язык такой, просто так звезды сложились.
    Если спросить меня, какой язык выбирать для создания крупного проекта с долгой поддержкой для бизнеса, java я бы выбрал ну очень в последний момент. Очень многословный язык, да код получается красивым, меньше мест где можно выстрелить себе в ногу и т.п... Из бонусов - кроссплатформенность (как железа так и ОС), уже не такая уж и уникальная опция.

    то о чем в вопросе не было спрошено:

    python - если тебе надо работать с данными, как опция - нейронные сети и т.п. (тоже вполне востребованный кейс, все сразу захотели в маркетинг играть или чего то автоматизировать и соптимизировать на работниках)

    javascript - занял очень интересную позицию в мире, благодаря nodejs он может быть как web бакендом, так и способом разработки браузерного интерфейса на стороне клиента, так и десктопные приложения (electron, чтоб его...) и даже как язык для unity игрового движка, т.е. получается язык получает статистический прирост с нескольких областей а не одной как остальные.
    У языка есть недостаток - как и у php (но он старается избавиться от этого) - свободная типизация, странная реализация ООП и другой синтаксический сахар типа асинхронности (это кстати его плюсы) увеличивают шансы выстрелить себе в ногу и усложняют поддержку проекта на долгосрок (там вообще много где проблем найти, как пример, берешь любой проект с гитхаба с датой последнего комита 3-4 года и пробуешь его обновить и поддержать, советую посмотреть что аудит безопасности npm будет вам писать).

    c# - надо ставить рядом с java (он и .net и создавался майкрософтом как главный конкурент), так же благодаря unity движку, захватывает часть статистики из геймдева. К сожалению, выбор языка гвоздями (да есть способы освободиться, но за все приходится платить и чего то лишаться) прибивает разрабатываемый продукт к майкрософтовской экосистеме, за который бизнесу приходится платить неплохой 'налог', поэтому если у тебя не unity то скорее всего ты либо поддерживаешь какое то легаси либо... ну мне нравится на .net формочки к базе данных делать, нигде такого легкого инструмента который дает ms visual studio и .net - нету, но, если прямо так хочется, там можно и на python.net писать, и на c++.net, и вообще какая разница какой язык программирования, в мире разработчика главенствуют фреймворки и среды разработки.
    Это я к чему - найти деньги с этими знаниями можно только по везению.

    Все остальные языки типа R, Rust, go и прочая экзотика - это издевательства над работодателями.. т.е. если ты найдешь по ним работу, это значит работодатель стал заложником не шибко умного системного аналитика (или его отсутствие/совмещение с разработчиком, который для самообразования решил приколоться), т.е. еще большее везение, делать ставку на это я бы не стал. Хотя для самообразования учить Rust или go очень даже неплохо, много открытых проектов пилят именно на go, вполне возможно, когда в мире количество разработчиков наберется до некоторой критической массы, это станет таким же мейнстримом как сейчас php или javascript.

    Так что еще раз - выбор языков программирования в порядке убывания оценки рекомендации (выше-вероятнее найти работу, кстати оценить уровень оплаты тут сложнее)
    php - и он теряет позиции, потому что SPA приложения захватывают мир
    javascript
    python
    - если не нужен вебдев - то это на первом месте
    java/c# (точнее .net)
    go

    если хочешь быть в вебе то php/javascript
    если хочешь в геймдев java/c#
    если хочешь датасайнс то python
    Ответ написан
  • Терминал для сайта бинарных опционов?

    @rPman
    Из открытых проектов я знаю только https://github.com/StockSharp/StockSharp
    терминал открыт, бизнес модель разработчика - продажа и поддержка коннекторов

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

    p.s. а так гуглится приличное количество торговых терминалов на опенсорс,

    но что то мне говорит разбираться будет дольше чем запилить что то готовое, тебе же не нужно что то многофункциональное, достаточно графика и пары кнопок?

    На рынке криптоэкономике проекты обычно используют библиотеку от tradingview, там есть как опенсорс упрощенная версия так и проприетарная многофункциональная.
    Ответ написан
    Комментировать
  • Как сделать чтобы этот код работал и правильно ли я вообще действую?

    @rPman
    Чтобы на вкладке response в devtools было json-представление, но чтобы на самой странице клиента(фронтенд) не было никакого json-а
    так не получится, браузеры не умеют json автоматически преобразовывать к пользовательскому виду.

    p.s. Если бы вместо json тебе подошел бы xml (тоже инструмент передачи структурированных данных) то можно было бы воспользоваться шаблоном xslt (их поддерживают все браузеры, стандарт старый), пример (кстати в доке ошибка, правильно - в браузере открывают xml файл, который преобразуется с помощью xslt в нормальный html, но в консоли будет только xml)

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

    p.s. есть еще base64 кодирование файла в самой ссылке, в консоли он тоже не отобразится но не уверен что тебе подойдет это, к тому же на сколько я помню браузеры в последние лет пять сломали этот механизм именно для стартовой страницы, проведи эксперименты если прямо надо

    Пример ссылки:
    data:text/html;charset=utf-8;base64,PHNjcmlwdD5hbGVydCgnaGknKTs8L3NjcmlwdD4=
    как видишь хабр такие ссылки режет, так как иначе это огромная дыра в безопасности (украсть куки можно)
    Ответ написан
    4 комментария
  • Обязательно ли возвращать объект в методе, если в PHP его изменение идет по ссылке?

    @rPman
    Нет никаких требований ООП или ограничений на то, как возвращать, надо ли возвращать, сколько возвращать и прочее.

    Делай так как удобно и по возможности так, чтобы сделать меньше всего ошибок.
    Ответ написан
    Комментировать
  • Использования куки в том же браузере где он создался?

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

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

    Само собой, можно попытаться бороться с этим через обфускацию запросов и кода javascript в браузере, чтобы усложнить (сделать дорогой) анализ, на бакэнде делать статистический анализ по таймингам, собирать разный fingerprint, специфичный для браузера (особенности оборудования, шрифты, поведение мышки пользователя и т.п.)... в общем дорогая и сложная защита (полагаю такие компании как гугл, яндекс и прочие, этим активно занимаются)
    Ответ написан
    Комментировать
  • Как грамотней настроить на обычном хостинге создание копии сайта и залив изменений?

    @rPman
    У вас должны быть какие то механизмы развертывания сайта на проде, не важно какие, хоть скрипты, хоть ansible, главное не вручную! Причем такие скрипты должны различать установку с нуля и обновление (обновление - отдельный разговор, к сожалению красиво и универсально с базами данных не получится, но стараться нужно, чтобы иметь повторяемость и тестируемость и получать хоть какие то гарантии того что процесс обновления ничего не сломает)

    Мне нравится способ создания тестового окружения через снапшоты и репликацию...
    Файлы могут попадать простым копирование (развертывание архива, rsync, набор патчей и т.п.) а база данных через поддержание онлайн реплики master->slave, на машине, где можно временно остановить slave реплику, снять снапшот с файловой системы или всей машины (например виртуализация), и поднять копию параллельно в другой сети (виртуальные машины очень красиво позволяют все это разрулить с автоматизацией).

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

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

    @rPman
    И причем тут эластик?

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

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

    Ну и само собой демон или много, берут задачи из списка воркера и ищут.
    Ответ написан
  • Как создавать блок по нажатию кнопки PHP?

    @rPman
    Есть старый подход к созданию web приложений на php, которому обычно учатся начинающие (я надеюсь) который подразумевает следующее - любое действие пользователя на странице отправляется на сервер запросом и о в ответ возвращает НОВУЮ страницу с новым содержимым, 'по счастливой случайности' являющейся точной копией предыдущей кроме ну например появляется div элемент с нужным содержанием.

    Реализуется это следующим образом - php файл это программа, которая генерирует все формы страницы, которые могли бы быть (может быть много разных php файлов, обычно разделяемых по смыслу, например разные разделы сайта), а url в браузере (адрес этой страницы) описывает как именно нужно генерировать страницу, на практике это реализуется http GET параметрами в формате:
    http://site.com/cool_prog.php?param=value&other_param=other_value

    в php программе список этих параметров хранится в переменной $_GET в виде массива (кстати там возможны параметры массивы с именами типа param[]=value1&param[]=value2)

    Отсюда при нажатии на кнопку у тебя должна открываться к примеру страница
    http://site.com/cool_prog.php?show_div=
    а в коде php, где нужно вставить какой то кусок html проверка
    <?php if(isset($_GET['show_div'])) { ?>
    <div>yooo!</div>
    <?php } ?>


    Само собой способов передать состояние приложения много, так же с помощью настроек веб сервера (у apache к примеру это .htaccess модуль mod_rewrite) можно подменить часть некрасивых к примеру &category=value на приятные глазу https://site.com/value/

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

    Лучше всего на сервере реализовывать только бизнеслогику и работу с данными, а все что касается визуальной части - релизовывать на javascript в браузере у клиента.
    Ответ написан
  • Как сделать цикл функции в PHP?

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

    Кстати не обязательно переписывать весь проект на новую архитектуру, можно по частям, сначала вот эта часть, уведомляющая об каких то изменениях реализуется рядом в виде сервиса, затем опросы базы данных подменяются колбеками между основным бакэнждом и этим сервисом (пусть временно через те же http запросы) но потом постепенно приложение может переехать полностью в эту часть.

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

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

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

    Единственное скажу что 'эти проблемы' у подхода начинаются с десятков и сотен тысяч пользователей.
    Ответ написан
    2 комментария
  • Как удалить пустые строки в CSV файле PHP функцией?

    @rPman
    осторожно, пустые строки в csv могут оказаться частью данных в строковых колонках, php fgetcsv корректно их обрабатывает а вот всякие упрощенные file и fgets ... нет

    правильно - написать приложение из 10 строчек типа такого:
    $r=fopen('filename.csv','r');
    $w=fopen('result.csv','w');
    while(!feof($r))
    {
      $row=fgetcsv($r,0,',','"'); // из-за 0 вторым параметром будет работать медленно, если знаешь максимальную длину строки в файле, пропиши ее тут с запасом
      if(empty($row)) continue;
      fputcsv($w,$row,',','"');
    }
    fclose($w);
    fclose($r);


    идеально - не пользоваться этим говноинструментом, на столько отвратительного способа передачи данных еще нужно поискать, сколько занимаюсь обработкой данных, столько натыкаюсь на постоянные ошибки тех кто экспортирует данные в csv. Ну есть же другие удобные инструменты, выдай дамп json (есть неплохой вариант - размещать записи построчно, одна строка один json объект), или одно время любили xml (у него тоже есть проблемы)

    Абсолютно верный путь - передавать данные в базе данных sqlite, или пусть будет проприетарный майкрософтвский .mdb если это принципиально, главное чтобы не изобретали способы сериализации чисел строк дат, списков и прочего.

    p.s. для тех кто не понял, \n внутри строк это часть стандарта
    escaped = DQUOTE *(TEXTDATA / COMMA / CR / LF / 2DQUOTE) DQUOTE
    Ответ написан
    Комментировать
  • Сurl выдаёт ошибку, что делать?

    @rPman
    "SSL certificate problem: self signed certificate in certificate chain"

    Запусти:
    curl -vvI https://api.telegram.org/
    и если ответ не будет что то типа
    * SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
    * ALPN, server accepted to use h2
    * Server certificate:
    *  subject: CN=api.telegram.org
    *  start date: Mar 24 15:21:45 2022 GMT
    *  expire date: Apr 25 15:21:45 2023 GMT
    *  subjectAltName: host "api.telegram.org" matched cert's "api.telegram.org"
    *  issuer: C=US; ST=Arizona; L=Scottsdale; O=GoDaddy.com, Inc.; OU=http://certs.godaddy.com/repository/; CN=Go Daddy Secure Certificate Authority - G2
    *  SSL certificate verify ok.

    то поздравляю, ваш vps провайдер атакует ваши соединения атакой Man-in-the-middle

    p.s. более подробно сертификат сервера смотреть можно так:
    echo | openssl s_client -showcerts -servername api.telegram.org -connect api.telegram.org:443 2>/dev/null | openssl x509 -inform pem -noout -text

    выполни команду на надежной машине и на твоем vps и сравни вывод

    p.p.s. допускаю что на новой vps какие то проблемы с корневыми сертификатами, такое тоже возможно, если они не те что нужны а измененные, но тогда бы вообще ошибки не возникло бы (либо они забыли подменить сертификаты везде, в том числе у php-curl там кажется отдельная копия)
    Ответ написан
    Комментировать
  • Как отсортировать массив в php?

    @rPman
    Отсортировать как обычно и транспонировать матрицу, (x,y) элементы которой это элемент в твоем массиве = x+y*количество_столбцов, транспонированная матрица будет соответственно y+x*количество_строк.

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

    p.s. это не эффективный но самый понятный алгоритм.
    эффективный это просто перестановка элементов, пробегаясь по диагоналям итоговой таблицы
    Ответ написан
    Комментировать
  • Как отправить curl через Open Server на другой сайт который находится так же на open server?

    @rPman
    добавь отображение заголовков
    CURLOPT_HEADER, true
    возможно сервер там что-нибудь вернет полезное

    либо CURLOPT_VERBOSE, true тогда вся информация о запросе будет в stderr

    а еще посмотри что возвращает curl_getinfo и curl_error
    Ответ написан
  • Yii2 как сделать несколько сайтов с одной кодовой базой?

    @rPman
    За то, какой именно код будет запускаться на разных доменах, обычно отвечает веб сервер, смотри настройки в нем. Там на каждый домен своя секция конфига. Работать такие сайты будут совершенно независимо, т.е. база сессий у каждого своя, ну а настройки баз данных сам пропишешь в коде у каждого свой.
    Ответ написан
    2 комментария
  • Как декодировать файл в js?

    @rPman
    В приведенном коде, если ты уберешь base64_encode и оставишь только file_get_contents то код должен заработать

    Но вот так <?= вставляем огромный json ?> делать - страшный быдлокод, так делать не надо.

    Нормально, передавать файл простым http запросом без сериализации (пусть сам веб сервер его и отдает) а на клиенте получаешь файл простым ajax запросом

    вот тут документация и куча примеров по работе с бинарными блобами в браузере
    Ответ написан
    Комментировать
  • Как перенести данные из нескольких таблиц в одну?

    @rPman
    последовательно выполнить
    insert into new_table select from old_table
    если в таблице есть foreign key индксы ли другие constraint, которые могут препятствовать простому их копированию, то отключаешь их перед копированием (для innodb придется удалять и позже создавать заново, для myisam есть метод alter table ... disable keys)
    Ответ написан
    1 комментарий
  • Как посмотреть чем занят процесс (php-fpm сайта)?

    @rPman
    /proc/{идентификатор_процесса}/
    содержит кучу информации о процессе, например cmdline - команду запуска, а environ - переменные окружения, fd/... список открытых файловых дескрипторах выглядящих как симлинки на соответствующие файлы или сокеты

    на сколько я знаю, fpm передает подробную информацию о запросе в переменных окружения, так что смотри там

    p.s. формально ты можешь приаттачить отладчик gdb к процессу, но помним что это интерпретатор php, без отладочной информации понять будет что либо сложно
    Ответ написан
    Комментировать
  • Как сделать, чтобы изменения php.ini входили в силу?

    @rPman
    В конфигурационном файле php.ini изменил
    а в каком именно файле произвел изменения?
    в /etc/php есть каталоги по версиям и по apache/cli/... менять настройки нужно в правильном месте
    Ответ написан
    Комментировать