Задать вопрос
  • Как на Ubuntu сервере запустить CRUD?

    JohnHankok
    @JohnHankok
    1. На сервере настраиваете окружение (NGINX, PHP, MYSQL)
    2. Собираете Angular проект и из папки dist копируте в дерикторию nginx для статики( /var/www/html/ )
    3. Копируете PHP проект на серевер
    4. Создаете db в mysql
    5. Не забудьте настроить CORS
    6. Если сервер публичный то все IP адреса заменить на публичные вместо localhost
    Ответ написан
    Комментировать
  • Как определить самый больший процент разници в if?

    @rPman
    В чем совет то тебе дать?

    Почему не работает код? так скажи что в нем не так.

    Про получение данных, если тебе нужны ОПЕРАТИВНЫЕ данные, забудь про http rest, используй websocket, binance выдает в поток в 4 тысячи событий по всем парам, подписывайся на них и анализируй, это ты сможешь сделать в одном подключении. Если же все же http rest то внимательно прочитай про лимиты на запросы, они указываются в минуту и на практике еще меньше
    IP Limits

    Every request will contain X-MBX-USED-WEIGHT-(intervalNum)(intervalLetter) in the response headers which has the current used weight for the IP for all request rate limiters defined.
    Each route has a weight which determines for the number of requests each endpoint counts for. Heavier endpoints and endpoints that do operations on multiple symbols will have a heavier weight.
    When a 429 is received, it's your obligation as an API to back off and not spam the API.
    Repeatedly violating rate limits and/or failing to back off after receiving 429s will result in an automated IP ban (HTTP status 418).
    IP bans are tracked and scale in duration for repeat offenders, from 2 minutes to 3 days.
    The limits on the API are based on the IPs, not the API keys.

    p.s. Исторические данные по фьючерсам недоступны (только в пределах текущего квартала)
    я пользовался, минуток тут более чем достаточно:
    https://dapi.binance.com/dapi/v1/continuousKlines?pair={$pair}&contractType={$type}&limit=1500&interval=1m&startTime={$startTime}&endTime={$endTime}"

    Где startTime и endTime нужно устанавливать на основе предыдущих полученных и сохраненных данных
    https://dapi.binance.com/dapi/v1/exchangeInfo
    Даст всю информацию о рынке (без стакана), там же видно где какой тип контракта PERPETUAL/CURRENT_QUARTER/NEXT_QUARTER какое наименование инструмента, типа LTCUSD_230630 или ETHUSD_230331 (там же есть все данные по времени начала и окончания периода), PERP фьючерсы повторяют spot рынок, поэтому для удобства можно эти данные брать

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

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Даже обидно, что кто-то такого не знает...
    foreach ($url as $k) {
        if (!strstr($k['symbol'], "BUSD")) {
            //записываю	
            $temp[$k['symbol']] = $k['price'];
        }
    }
    Ответ написан
    1 комментарий
  • Как исправить ошибку "Cannot redeclare"?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Вы дважды подключаете этот файл в ходе работы и второй раз объявление функции не удаётся.
    Самое простое, обернуть функцию в проверку:
    if (!function_exists('site_proto')) {
      function site_proto() {
        ...
      }
    }
    Ответ написан
    2 комментария
  • Как в массиве чисел найти средний минимум и средний максимум?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    идти по массиву, вычислять разницу с предыдущим значением.
    Если разница поменала свой знак — предыдущая точка была локальным минимумом или максимум. Смотреть на знак разницы:
    1, 2, 3, 2, 3, 2, 1
    0  +  +  -  +  -  -
          ^  ^  ^ в этих точках знак поменялся
    Складывать найденные точки в два массива: максимумы и минимумы.
    Потом посчитать среднее в каждом.
    Ответ написан
    3 комментария
  • Как увеличить время работы php скрипта на сервере?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Просто возьмите за правило - не запускайте долгоиграющие скрипты через веб-сервер
    Используйте для этого командную строку
    https://www.php.net/manual/ru/features.commandline.php

    Какие бы настройки не выставили в PHP, но если для запуска используется веб-сервер nginx/apache то для этого выделяется воркер веб сервера который висит, и который сдохнет рано или поздно, независимо от настроек самого PHP и тогда работающий процесс PHP который он создал тоже умрет.
    Ответ написан
    Комментировать
  • Как узнать наличие записи в базе данных и получить нужные значения?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Весь код у вас уже есть.
    Вам только надо самому решить, чего вы хотите - проверить наличие записей, или выполнить дальнейшие действия.

    Код у вас - для второго.
    А пытаетесь вы его использовать для первого.

    Чтобы проверить, цикл не нужен. Чтобы обработать - КАК вы обойдетесь без цикла?

    В принципе, я тут не вижу нужды проверять. Просто запросить, да обработать.
    Но если прям жить не можете без проверки, то можно например использовать переменную
    $found = false;
    foreach($result as $row){
        $found = true;
        $orderId = $row["orderId"];
        // делаете что хотите
    }
    if(!$found) {
        print 'нет';
    }


    Если запись может быть только одна, то еще проще

    $result = mysqli_query($mysqli, "SELECT * FROM `Order` WHERE status='NEW'");
    $row = $result->fetch_assoc();
    if ($row) {
        $orderId = $row["orderId"];
    } else {
        print 'нет';
    }
    Ответ написан
  • Как правильно построить таблицу при получении данных из csv файла?

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

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

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Если надо изменить одну строку:
    1. Открываете файл в режиме rw, захватываете его в эксклюзивное пользование, во избежание состояния гонки.
    2. Считываете все строки через fgetcsv, пока не найдёте нужную, запоминая позицию считанной строки.
    3. Считываете в массив все строки до конца файла.
    4. Вносите нужные вам изменения в данные.
    5. Перемещаете указатель файла на запомненную позицию.
    6. Записываете изменённую строку.
    7. Из массива записываете все сохранённые строки.
    8. Закрываете файл, освобождая блокировку.

    Если надо изменить все строки:
    1. Открываете исходный файл на чтение.
    2. Открываете новый файл на запись.
    3. Построчно читаете первый файл через fgetcsv, работаете с данными строки и записываете через fputcsv в новый файл.
    4. Закрываете оба файла.

    А вообще, для таких вещей давно придумали базы данных.
    Ответ написан
    2 комментария
  • Правильная проверка на пустоту переменной?

    KorsaR-ZN
    @KorsaR-ZN
    Начну с различия между isset и empty.

    isset - проверяет на существование переменной или индекса в массиве, т.е она будет ВСЕГДА true, если значение отлично от NULL, именно от константы null, т.е '', 0, "\0" и т.д, будет считаться существующей переменой, false будет только при присвоение ей null или unset($var), во всех остальных true

    empty - проверят именно на пустоту переменной, т.е возвращает true если переменная является пустой и false в противоположном случаи.

    В PHP пустотой считаются следующие значения:
    • ""
    • 0
    • 0.0
    • "0"
    • null
    • false
    • array() (пустой массив)
    • $var; (переменная объявлена, но не имеет значения)


    Что касается проверки на пустоту и как ее правильно делать, то это исходит от Вашей задачи, и что должно для Вас является пустотой, но в большинстве случаем подойдет такая проверка:
    if(isset($var) && $var !== '')  {
    // $var не null и не  ''.
    }

    Еще больше поможет разобраться в сравнение типов, это таблица сравнение типов PHP
    Ответ написан
  • Как исправить ошибку PHP Notice: Undefined variable?

    @KGB1st
    $col не инициализирована!
    Где-то ранее в вашем коде, когда вы её только объявляете,
    напишите значение по умолчанию. Например $col = 12;

    И нет надобности выводить через echo, есть более короткая запись для таких случаев:
    <?php=$col;?>
    или (если поддерживается short_open_tags
    <?=$col;?>
    Ответ написан
  • Как объединить результат foreach и разделить запятыми?

    rozhnev
    @rozhnev Куратор тега PHP
    Fullstack programmer, DBA, медленно, дорого
    Соберите теги в массив и объедините их
    $tags = array_column($val["tags"], "value");
    
    echo implode(',', $tags);


    PHP online
    Ответ написан
    Комментировать
  • Что произойдет, если крон запускать каждую минуту но скрипт не успеет выполниться?

    @Barmunk
    в линуксе есть нативная утилита flock. Она не даст запустить повторный cron пока предыдущий еще работает. Второй процесс может ожидать завершения первого и только после этого запуститься, либо прерывать все повторные запуски, пока работает первый процесс.

    /usr/bin/flock -w 600 /var/tmp/myscript.lock /root/myscript.sh


    так же можешь сделать демона

    while(true) 
    {
        doWork();
        sleep(1);
    }
    Ответ написан
    Комментировать
  • Что произойдет, если крон запускать каждую минуту но скрипт не успеет выполниться?

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

    Melkij
    @Melkij
    PostgreSQL DBA
    Запустится следующий
    Ответ написан
    Комментировать
  • Как работать с таким форматом даты в PHP?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    $dateTime = new DateTime('2021-05-18T15:30:00.000-04:00');
    var_dump($dateTime);
    $dateTime->setTimezone(new DateTimeZone('Europe/Moscow'));
    var_dump($dateTime);
    
    // object(DateTime)#1 (3) {
    //   ["date"] => string(26) "2021-05-18 15:30:00.000000"
    //   ["timezone_type"] => int(1)
    //   ["timezone"] => string(6) "-04:00"
    // }
    //object(DateTime)#1 (3) {
    //  ["date"] => string(26) "2021-05-18 22:30:00.000000"
    //  ["timezone_type"] => int(3)
    //  ["timezone"] => string(13) "Europe/Moscow"
    //}
    
    $timestamp = strtotime('2021-05-18T15:30:00.000-04:00');
    var_dump($timestamp); // int(1621366200)
    date_default_timezone_set('Europe/Moscow');
    $dateTime = date('c', $timestamp);
    var_dump($dateTime); // string(25) "2021-05-18T22:30:00+03:00"
    Ответ написан
    Комментировать
  • Почему preg_match не отдает цифры после точки?

    0xD34F
    @0xD34F
    (int)$url_params['1']

    То есть, привели значение к целому, и удивляетесь, что дробная часть пропала. Умно.

    Замените int на float или оставьте строкой.
    Ответ написан
    Комментировать
  • Как из функции передать значение date ниже по коду?

    KickeRocK
    @KickeRocK
    FrontFinish
    $('.form-control').on('change', function () {
        let date = $(this).val();
        $('#ever').text(date);
        page_description.DPdata.mindate = new Date(date);
    });
    Ответ написан
    3 комментария
  • Как правильно назначить seo url?

    Ste1n
    @Ste1n
    Prove me wrong...
    Не имеет значения как Вы сгенерируете URL - это не даст никакого профита в ранжировании.
    Ответ написан
    Комментировать