Ответы пользователя по тегу PHP
  • Почему не работает curl?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Вы формируете невалидный JSON. В нём лишняя запятая и, если в $param не число, то ещё и неправильно заданное значение.
    Ну и добавьте заголовок Content-Length.
    +$data = json_encode(
    +    ['param' => $param],
    +    JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES,
    +);
    $headers = array(
        'Content-Type: application/json',
    +    'Content-Length: ' . strlen($data),
    );
    
    -$data = <<<DATA
    -{
    -"param": $param,
    -}
    -DATA;
    Ответ написан
    1 комментарий
  • Почему INSERT INTO равно null (не работает)?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Не ищите сообщения об ошибке там, где их нет.
    query в случае ошибки возвращает false. А у false никакого errorCode быть не может.
    Используйте исключения и подготовленные выражения.
    --$conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
    --$conn -> query("SET NAMES utf8");
    ++$conn = new PDO(
    ++    "mysql:host=$host;dbname=$dbname",
    ++    $username,
    ++    $password
    ++    [
    ++        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    ++        PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'",
    ++    ],
    ++);
    --$err = $conn -> query("INSERT INTO RECIPE(recipe_id,aspect_ratio,yields,cook_time_minutes,country,descriptions,prep_time_minutes,total_time_minutes,name,thumnai_url) VALUES('$id','$asp','$yie','$c_t_m','$country','$desc','$p_t_m','$t_t_m','$name','$t_url')");
    --echo "\nrec PDOStatement::errorCode(): ";
    --print $err->errorCode();
    ++$req = $conn->prepare(<<<REQ
    ++    INSERT INTO RECIPE (
    ++        recipe_id, aspect_ratio, yields, cook_time_minutes, country, descriptions,
    ++        prep_time_minutes,total_time_minutes,name,thumnai_url
    ++    ) VALUES (
    ++        :recipe_id, :aspect_ratio, :yields, :cook_time_minutes, :country, :descriptions,
    ++        :prep_time_minutes, :total_time_minutes, :name, :thumnai_url
    ++    )
    ++REQ);
    ++$req->execute([
    ++    'recipe_id' => $data['id'],
    ++    'aspect_ratio' => $data['aspectRatio'],
    ++    'yields' => $data['yields'],
    ++    'cook_time_minutes' => $data['cookTimeMinutes'],
    ++    'country' => $data['country'],
    ++    'descriptions' => $data['description'],
    ++    'prep_time_minutes' => $data['prepTimeMinutes'],
    ++    'total_time_minutes' => $data['totalTimeMinutes'],
    ++    'name' => $data['name'],
    ++    'thumnai_url' => $data['thumbnailUrl'],
    ++]);
    Ответ написан
    Комментировать
  • Как перед однозначным номером даты поставить ноль?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    <?php
    $fmt = new IntlDateFormatter(
        'ru_RU',
        IntlDateFormatter::MEDIUM,
        IntlDateFormatter::NONE,
        'Europe/Moscow',
        IntlDateFormatter::GREGORIAN,
    );
    $date = new DateTimeImmutable('2021-5-1');
    print $fmt->format($date);
    // 01 мая 2021 г.
    Ответ написан
    2 комментария
  • Как вывести элемент из json?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Сделайте var_dump($result) и посмотрите тип данных. Гарантирую. там будет String - строка. А значит надо предварительно эту строку распарсить в объект или массив через json_decode()
    Ответ написан
    3 комментария
  • Стоит ли использовать phpdoc для описания методов, если я использую тайпхинт и указываю возвращаемые значения?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    IMHO, там где понятно по тайпхинтам, смысла в phpdoc нету. А вот там где непонятно
    /**
     * @return array{uid: string, name: string, isAdmin: bool}
     * @throws AuthenticationException on authentication error
     */
    private static function authenticate(string $login, string $password): array
    {
    }
    Ответ написан
    Комментировать
  • Почему не работает код на php?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    А вы сделайте var_dump($_GET['coordinate']); и посмотрите, что вам приходит.
    Ответ написан
  • Ускорения цикла для подсчета корня?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    У вас и формула Герона неверно задана, и условие завершения цикла кривое.
    Напишете правильно, будет считать быстро.
    Ответ написан
  • Калькулятор возвращает неправильный результат?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Вы выбираете операторы слева направо (foreach), а операнды справа налево (array_pop).
    Ну и в целом, ваш способ слишком примитивный. Попробуйте посчитать им 2*2+2*2.
    Ответ написан
    6 комментариев
  • PHP как получить порядковый номер дня?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    date_default_timezone_set('Europe/Moscow');
    $start = new DateTimeImmutable('10.11.2022');
    $target = new DateTimeImmutable('05.04.2023');
    $interval = $target->diff($start, true);
    print $interval->days + 1;
    // 147
    Ответ написан
    Комментировать
  • Почему при использовании substr в php, если в тексте есть символ точки, то он считает не корректно?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    substr работает не с символами, а с байтами. Для многобайтовых кодировок, где один символ может представляться несколькими байтами (кириллица в UTF-8 - два байта на символ) надо использовать библиотеку mbstring. Соответственно, substr заменяется на mb_substr.
    Ответ написан
    Комментировать
  • Как узнать процент похожести текста?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    "Вчера на площади Свердлова попал под лошадь извозчика 8974 гр. О. Бендер. Пострадавший отделался легким испугом."
    "Сегодня на площади Свердлова попал под лошадь извозчика 1234 гр. О. Иванов. Пострадавший отделался легким испугом."
    Схожесть по словам 81% (13/16), но новости то разные.
    Вам надо выделять ключевые слова - тип происшествия, даты, фамилии, адреса, номера и модели автомобилей и т.п. и сравнивать по ним.
    Ответ написан
    Комментировать
  • Правда ли, что квадратные скобки в php - это оператор?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Кто вам такое сказал?
    A full list of PHP operators follows in the section Operator Precedence.
    И квадратных скобок там нет.
    Ответ написан
  • Почему скрипт не видит класс при запуске через CRON?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Относительный путь считается не от каталога, в котором находится скрипт, а от текущего рабочего каталога (cwd).
    --include '../../path/test.php';
    ++include __DIR__ . '/../../path/test.php';
    Ответ написан
    Комментировать
  • Почему PHP так сравнивает строку и число?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    PHP 8.0
    If both operands are numeric strings, or one operand is a number and the other one is a numeric string, then the comparison is done numerically.

    Более ранние версии PHP:
    If a string is compared to a number or a numeric string then the string was converted to a number before performing the comparison.

    То есть, когда вы в 7.4 сравниваете строку с числом, то строка в любом случае приводится к числу. В 8.0, при сравнении нечисловой строки с числом, число будет приведено к строке.
    А дальше у вас, похоже, проблема XY. Вам надо искать не "как сравнить через ==", а как решить исходную задачу, для которой нужно такое сравнение.
    Ответ написан
    Комментировать
  • Как сделать curl PUT-запрос к API метрики на изменение счетчика (PHP)?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    ++$data = '{"counter":{"mirrors2":[{"site":"test.example.com"},{"site":"test2.example.com"},{"site":"test3.example.com"},{"site":"test4.example.com"},{"site":"test5.example.com"}]}}';
    $headers = [
        "Host: api-metrika.yandex.net",
        "Authorization: OAuth $TOKEN_VAR",
        "Content-Type: application/x-yametrika+json",
    ++  "Content-Length: " . strlen($data),
    ];
    --$data = '{"counter":{"mirrors2":[{"site":"test.example.com"},{"site":"test2.example.com"},{"site":"test3.example.com"},{"site":"test4.example.com"},{"site":"test5.example.com"}]}}';
    Ответ написан
  • Как раскодировать строку на PHP?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Сдвинуть обратно и использовать atob
    Ответ написан
    Комментировать
  • Как сделать mysql запрос?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    1. У вас синтаксическая ошибка в запросе, нет закрывающей скобки.
    2. Надо использовать подготовленные выражения и не пихать в строку запроса данные, пришедшие от клиента.
    Ответ написан
    3 комментария
  • Как разделить DateInterval на равные части?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Проще использовать не DateInterval, а разницу таймстампов. Будет количество секунд, которое легко делится на любое количество частей.
    Ответ написан
    Комментировать
  • Инвертированы часовые поясы. В чём дело?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    The special area of "Etc" is used for some administrative zones, particularly for "Etc/UTC" which represents Coordinated Universal Time. In order to conform with the POSIX style, those zone names beginning with "Etc/GMT" have their sign reversed from the standard ISO 8601 convention. In the "Etc" area, zones west of GMT have a positive sign and those east have a negative sign in their name (e.g "Etc/GMT-14" is 14 hours ahead of GMT)
    https://en.wikipedia.org/wiki/Tz_database#Area
    Ответ написан
    Комментировать
  • Заморозка сервера в конец срока оплаты?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Дык у вас бесконечный цикл.
    1. Получать из базы надо только нужные данные, а не все разом.
    2. mysqli_fetch_assoc надо вызывать для получения каждой следующей строки из базы.
    --$sql2 = "SELECT * FROM `servers`";
    ++$sql2 = "SELECT 'id' FROM `servers` WHERE `pay_date` = CURDATE()";
    --$ress2 = mysqli_fetch_assoc($res2);
    --while($ress2) {
    ++while ($ress2 = mysqli_fetch_assoc($res2)) {

    Я бы ещё добавил условие, что сервер не заморожен.
    И вызывать такой скрипт достаточно раз в сутки, так как он завязан только на текущую дату.
    Ответ написан
    1 комментарий