Ответы пользователя по тегу PHP
  • Каким способом закодирован php-скрипт?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Вычисляется sha1 от $_GET['auth_in'], преобразуется в 20 байт, побайтово ксорится с 73A9B8B5C18C1C1C1C1CDADBDC07C8A89801800C и выводится. Что именно выведется, зависит от того, что передано в параметре auth_in.
    Ответ написан
    Комментировать
  • Не поддерживает русский язык, формат xls?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Во-первых, вы выгружаете не в xls, а в HTML. Для работы с xls- и xlsx- файлами есть отдельные библиотеки, например https://github.com/PHPOffice/PhpSpreadsheet.
    А проблема с кодировкой у вас в том, что Excel по ожидает текст в однобайтной кодировке (например, Windows-1251), а вы передаёте в многобайтной UTF-8.
    Перекодируйте текст через iconv.
    Ответ написан
    Комментировать
  • Что означет ошибка, которую выводит SOAP-клиент?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Читаем wsdl. Находим нужный запрос.
    operation Tracking
    <operation name="Tracking">
      <input message="tns:TrackingRequestMessage"/>
      <output message="tns:TrackingResponseMessage"/>
    </operation>

    Значит запрос Tracking принимает на вход TrackingRequestMessage. Смотрим дальше
    message TrackingRequestMessage
    <message name="TrackingRequestMessage">
      <part name="parameters" element="tns:Tracking"/>
    </message>

    Единственное поле parameters с типом Tracking. Ищем этот тип.
    element Tracking
    <xs:element name="Tracking">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="Language" type="xs:string" nillable="true"/>
          <xs:element name="Login" type="xs:string" nillable="true"/>
          <xs:element name="Password" type="xs:string" nillable="true"/>
          <xs:element name="Type" type="xs:string"/>
          <xs:element name="Documents" type="xs:string" nillable="true"/>
        </xs:sequence>
      </xs:complexType>
    </xs:element>

    Получаем объект или ассоциативный массив с текстовыми полями Language, Login, Password, Type и Documents, причём все поля кроме Type могут иметь значение null.
    Значит запрос должен выглядеть как
    $result = $client->Tracking([
        'Language' => ?string,
        'Login' => ?string,
        'Password' => ?string,
        'Type' => string,
        'Documents' => ?string
    ]);

    То же самое можно получить и средствами PHP. После подключения к клиенту получим список методов.
    var_dump($client->__getFunctions());
    /* ...
    [92] => string(47) "TrackingResponse Tracking(Tracking $parameters)"
    ... */

    Значит метод Tracking принимает один параметр с типом Tracking и возвращает ответ типа TrackingResponse.
    Запросим типы.
    var_dump($client->__getTypes());
    Результат запроса
    /* ...
    [120] => string(103) "struct Tracking {
     string Language;
     string Login;
     string Password;
     string Type;
     string Documents;
    }"
    [121] => string(51) "struct TrackingResponse {
     ResultTracking return;
    }"
    [24] => string(81) "struct ResultTracking {
     TrackingInfo Items;
     boolean Error;
     string ErrorInfo;
    }"
    [28] => string(227) "struct TrackingInfo {
     boolean Error;
     string Type;
     string Number;
     string Info;
     string AgentURL;
     dateTime CreateDate;
     string State;
     dateTime DeliveryDate;
     string DeliveryInfo;
     TrackingEvent History;
     Waybill Waybills;
    }"
    [27] => string(83) "struct TrackingEvent {
     dateTime EventDate;
     string EventName;
     string EventInfo;
    }"
    [31] => string(546) "struct Waybill {
     string Type;
     string Number;
     dateTime CreateDate;
     string State;
     dateTime DeliveryDate;
     string Sender;
     string SenderGeography;
     string Recipient;
     string RecipientGeography;
     string RecipientAddress;
     dateTime SendDate;
     string Payer;
     int CargoQty;
     float NetWeight;
     float GrossWeight;
     string ConsolidationNumber;
     string InventoryWaybillNumber;
     string DeliveryMethod;
     float Volume;
     boolean RequirePaymentInCash;
     float PaymentInCash;
     string PaymentInCashCurrency;
     string RecipientOfficial;
     TrackingEvent History;
    }"
    ... */


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

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

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    В WSDL-файле прописано
    <soapbind:address location="http://89.208.141.8:8888/CargoMSK/ws/Web1C.1cws"/>

    При этом порт 8888 данного IP-адреса никто не слушает, порт закрыт.
    Ответ написан
  • Проблема с интеграцией апи, получаю ошибку 401?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    https://api.daxko.com/v3/docs/tutorials/authentica...
    If you haven’t already been granted access to the Daxko Operations API, you should contact your sales representative and request access. Once this step has been done, you should have a username, password and refresh token for your API account. You will need this information to authenticate to the API.

    username и password вижу, а refresh_token не указан.
    Ответ написан
  • Почему unserialize не работает?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    <?php
    $s = [
        [
            'title' => 'Услуги',
            'content' => 'На базе стоматологии «ПрезиДент» на Выставочной проводятся экспертные консультации, лечение под наркозом и с седацией, лечение под микроскопом; компьютерная томография и рентгенография, составляется план лечения. Имеется детское отделение.Оказываются услуги по таким направлениям, как терапия, хирургия, ортопедия, профессиональная гигиена, пародонтология. Предоставляются следующие виды услуг лечение кариеса и патологий пародонта, пломбирование зубов композитами, отбеливание эмали по технологии ZOOM 4, вживление имплантов и инсталляция коронок из металлокерамики и диоксид циркония.'
        ], [
            'title' => 'Проезд',
            'content' => 'До стоматологии «ПрезиДент» на Выставочной можно доехать на метро. Ближайшие остановки «Шелепиха» или "Выставочная". От "Выставочной" необходимо подняться к Экспоцентру повернуть налево и следовать прямо до стоматологии. От метро "Шелепиха" - поднявшись на поверхность, нужно сесть на любой автобус № т54, т66, 4, 69, 152 и проследовать до остановки «Детская больница». Покинув транспорт, надо повернуть на улицу Антонова-Овсеенко и пройти к высотному зданию по адресу ул. 3-я Красногвардейская дом 3 (вход с улицы Антонова-Овсеенко).' 
        ], [
            'title' => 'Парковка',
            'content' => 'Для пациентов есть бесплатная парковка. Въезд с улицы Антонова-Овсеенко. Для въезда на территорию нужно позвонить администратору за 2 минуты до прибытия.'
        ]
    ];
    $s = serialize($s);
    print $s;

    Получаем
    a:3:{i:0;a:2:{s:5:"title";s:12:"Услуги";s:7:"content";s:1085:"На базе стоматологии «ПрезиДент» на Выставочной проводятся экспертные консультации, лечение под наркозом и с седацией, лечение под микроскопом; компьютерная томография и рентгенография, составляется план лечения. Имеется детское отделение.Оказываются услуги по таким направлениям, как терапия, хирургия, ортопедия, профессиональная гигиена, пародонтология. Предоставляются следующие виды услуг лечение кариеса и патологий пародонта, пломбирование зубов композитами, отбеливание эмали по технологии ZOOM 4, вживление имплантов и инсталляция коронок из металлокерамики и диоксид циркония.";}i:1;a:2:{s:5:"title";s:12:"Проезд";s:7:"content";s:960:"До стоматологии «ПрезиДент» на Выставочной можно доехать на метро. Ближайшие остановки «Шелепиха» или "Выставочная". От "Выставочной" необходимо подняться к Экспоцентру повернуть налево и следовать прямо до стоматологии. От метро "Шелепиха" - поднявшись на поверхность, нужно сесть на любой автобус № т54, т66, 4, 69, 152 и проследовать до остановки «Детская больница». Покинув транспорт, надо повернуть на улицу Антонова-Овсеенко и пройти к высотному зданию по адресу ул. 3-я Красногвардейская дом 3 (вход с улицы Антонова-Овсеенко).";}i:2;a:2:{s:5:"title";s:16:"Парковка";s:7:"content";s:281:"Для пациентов есть бесплатная парковка. Въезд с улицы Антонова-Овсеенко. Для въезда на территорию нужно позвонить администратору за 2 минуты до прибытия.";}}

    Если сравнить с вашей строкой, то разница только в заявленных длинах строк 1085 байт вместо 1094 и 960 вместо 966. Непонятно, куда и какие делись символы из оригинального текста, сравнивайте побайтно оригинальную строку и строку с ошибкой unserialize.
    А в целом, IMHO, для хранения в базе данных лучше использовать JSON в кодировке utf8mb4, а если с этими данными надо ещё и активно работать, то выносить их в отдельную таблицу свойств.
    Ответ написан
    Комментировать
  • Как подключится к БД Mysql 5.3 через php 5.6 или php 7.4?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Лучше всего создать дополнительного пользователя для подключения из новой версии PHP.
    https://dev.mysql.com/doc/refman/5.7/en/password-h...
    В консоли MySQL:
    SET @@SESSION.old_passwords = 0;
    CREATE USER 'newuser'@'%' IDENTIFIED BY 'newpass';
    GRANT SELECT, INSERT, UPDATE, DELETE ON `database`.* TO 'newuser'@'%';
    FLUSH PRIVILEGES;
    Ответ написан
  • Как правильно определить позицию символа при substr_replace?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Когда вы меняете подстроку на подстроку другой длины, все найденные правее позиции сдвигаются. Так что менять надо начиная с последней позиции.

    А вообще, такое делается гораздо проще через str_replace, возможно с массивами, или, в сложных случаях, через preg_replace/preg_replace_callback.
    Ответ написан
  • Как использовать IF в переменной?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Тернарный оператор
    $dir = __DIR__ . DIRECTORY_SEPARATOR;
    $linksKey = $links ? '-k' : '';
    $filesKey = $files ? '-p' : '';
    $command = "C:\\wget.exe -P {$dir} r {$depth} {$linksKey} -l '. {$depth} {$filesKey} -E -nc 2>&1";
    Ответ написан
  • Что 3а двухбуквенный бред?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Ошибка в кодировке Windows-1251, записанная hex-кодами символов. Берёте таблицу и читаете.
    Не найдена указанная процедура.
    Ответ написан
    7 комментариев
  • Как правильно написать калькуляцию для логистики?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    const CALL_COST = 20;
    const DIST_COSTS = [
        ['range' => 0, 'cost' => 1],
        ['range' => 10, 'cost' => 1.5],
        ['range' => 20, 'cost' => 0.5], // 2 - 1.5
    ];
    
    function distPrice($distance) {
        $price = 0;
        for ($i = 0; $i < count(DIST_COSTS) && $distance >= DIST_COSTS[$i]['range']; $i += 1) {
            $price += ($distance - DIST_COSTS[$i]['range']) * DIST_COSTS[$i]['cost'];
        }
        return $price;
    }
    
    function routePrice($distFrom, $distTo) {
        return CALL_COST + distPrice($distTo) - distPrice($distFrom);
    }
    
    print routePrice(0, 30) . "\n"; // 85
    print routePrice(10, 28) . "\n"; // 69

    Запись в массиве - начиная с какого километра на сколько увеличивается цена за километр.
    Ответ написан
    8 комментариев
  • Как добавить id в titile при выводе DOM через php?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    echo "<option title=\"{$row['id']}\">";
    https://www.php.net/manual/en/language.types.strin...
    Ответ написан
    Комментировать
  • Как отфильтровать массив при частичном совпадении ключа?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    strpos($fulldate, $month) === 0
    substr($fulldate, 0, 7) === $month
    Ответ написан
    Комментировать
  • Как заменить значение выводимое из массива в PHP?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    1 комментарий
  • Как вывести массив в PHP?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    foreach ($data['videos'] as $video) {
        ...$video['thumbnail']...
    }
    Ответ написан
    1 комментарий
  • Как вывести всех родителей у подкатегории до главной категории?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    В MySQL 8 решается одним запросом:
    WITH RECURSIVE `cte` (`id`, `parent_id`, `title`, `n`) AS (
      SELECT `id`, `parent_id`, `title`, 0
        FROM `table`
        WHERE `id` = :categoryId
      UNION
      SELECT `t`.`id`, `t`.`parent_id`, `t`.`title`, `n`+1
        FROM `cte`
        JOIN `table` AS `t` ON `t`.`id` = `cte`.`parent_id`
    )
    SELECT `id`, `title`
      FROM `cte`
      ORDER BY `n` DESC
    Остаётся только выбрать все строки из ответа и вывести их в цикле.
    Ответ написан
    1 комментарий
  • Как раскодировать букву "ё"?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    А зачем нужен весь этот изврат?
    $data = [[
        "id" => 25,
        "pid" => "0CjqYfx3NU1AghsPVoGFullXwl4umV",
        "message" => "Одно лишь ё - это безумие!"
    ]];
    echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
    /*
    [
        {
            "id": 25,
            "pid": "0CjqYfx3NU1AghsPVoGFullXwl4umV",
            "message": "Одно лишь ё - это безумие!"
        }
    ]
    */
    Ответ написан
    3 комментария
  • Как получить id в цикле foreach?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Так нужен $row['id'] или $row['g_id']?
    Если последний, то он у вас в $key.
    Если $row['id'], то
    $imageList[$row['g_id']][$row['id']] = $row['path'];
    и
    foreach ($value as $id => $val)
    Ответ написан
  • Условие в цикле foreach как получить определенный массив?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    $result = array_filter(
        $data['Items'],
        function($el) {
            return $el['Audit']['CreatedBy'] === 'system';
        }
    );
    Ответ написан