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

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Хм. PHP-скрипт на некоем сервере парсит главную страницу с сайта yandex.ru? С новостного сайта? Нет, не с сайта денег money.yandex.ru, а именно с новостного?

    При этом PHP-скрипт сначала ДОЛЖЕН сделать полноценный вход/login на сайт с именем/паролем, сохранить cookies авторизации, и потом с этими cookies обращаться на сайт - только тогда ему будет корректно показан его денежный аккаунт. У вас ничего этого в скрипте НЕТ.

    ИТОГО: Изучайте вопрос, переделывайте скрипт.

    P.S. Сделайте вывод всей страницы, полученной с yandex.ru - и увидите, что данных о деньгах там нет, от слова "вообще". Либо я катастрофически не прав.
    Ответ написан
    1 комментарий
  • Как передать параметы из одно CURL в другой на php?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Из объяснения ничего непонятно. И непонятно, зачем нужен curl_exec() первого скрипта, если значение $idauto выясняется в первых двух строчках? Зачем вообще куда-то делать запрос?

    А мой код, смотрю, пригодился. :-)
    $url = $_POST['link_for_parse'];
    $idauto = basename($url);
    $createdURL = curl("https://www.site.com/data/data/lotdetails/solr/".urlencode($idauto));
    if (preg_match("#<script src=\"(/_Incapsula_Resource\?[^\"]+)\">#", $createdURL, $regs))
    {
        curl("https://www.copart.com{$regs[1]}");
    }
    if ($createdURL = curl("https://www.site.com/data/data/lotdetails/solr/".urlencode($idauto)))
    {
        header('Content-Type: application/json');
        echo $createdURL;
    }
    unlink("/tmp/cookie.txt");
    
    function curl($url){
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_COOKIEFILE, "/tmp/cookie.txt");
        curl_setopt($ch, CURLOPT_COOKIEJAR, "/tmp/cookie.txt");
    
        $response = curl_exec($ch);
        curl_close($ch);
        return $response;
    }
    Ответ написан
    Комментировать
  • Php cUrl ничего не возвращает, а в браузере все ок. Как исправить?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Вобщем что-бы сервер начал отдавать контент - надо разок обратиться к этому самому _Incapsula_Resource... Потом он запоминает клиента, и даже куки не нужны, контент всё равно прёт.
    <?php
    
    $createdURL = curl("https://www.copart.com/public/data/lotdetails/solr/59418659");
    if (preg_match("#<script src=\"(/_Incapsula_Resource\?[^\"]+)\">#", $createdURL, $regs))
    {
        curl("https://www.copart.com{$regs[1]}");
        $createdURL = curl("https://www.copart.com/public/data/lotdetails/solr/59418659");
    }
    echo $createdURL;
    unlink("/tmp/cookie.txt");
    
    function curl($url){
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_COOKIEFILE, "/tmp/cookie.txt");
        curl_setopt($ch, CURLOPT_COOKIEJAR, "/tmp/cookie.txt");
    
        $response = curl_exec($ch);
        curl_close($ch);
    
        return $response;
    }
    
    ?>
    Ответ написан
    1 комментарий
  • Как передать входящий рефер дальше в редирект ссылку?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    В том коде, где {t3} присваивается значение, используйте для присвоения переменную $_SERVER['REFERER']. Так вы передадите входящий реферер.
    Ответ написан
    Комментировать
  • Как настроить кнопку оплаты яндекс.деньги?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    После строки
    <input type="hidden" name="paymentType" value="AC">

    вставьте ещё строку
    <input type="hidden" name="successURL" value="http://server.org/path">
    в которой вместо http://server.org/path напишите свой адрес (своего облака с продуктом).
    Ответ написан
  • Как получить нужный массив?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    print_r($aaa[0]['id']); сработает.

    Хотя нет, скорее всего так: print_r($aaa['id']);
    Ответ написан
  • Что это такое и как от него избавиться?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Вобщем вам надо установить
    composer require zendframework/zend-httphandlerrunner
    Ответ написан
    Комментировать
  • Как исправить 503-299 ошибку, при загрузки файла?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Решение ошибки заключается в поиске и исправлении ошибки. Код 503 говорит только о том, что что-то не удалось. Что именно не удалось - вам ни кто здесь не скажет. Смотрите сами, хотя бы в логах HTTP-сервера, по логике вещей - там всё должно быть сообщено...
    Ответ написан
    Комментировать
  • Как сделать цепочку запросов cURL в php, если во второй ссылке должны использоваться данные из первой?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Это называется persistent connection, и curl_multi() только помешает. Просто создаёте подключение $conn = curl_init();, быстренько пользуетесь им $result = curl_exec($conn); сколько влезет, а потом curl_close($conn);, и всё.
    Ответ написан
  • Почему не работает OR в условии?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    С двумя этими OR у вас всегда будет выполняться код $query = "404";.
    Потому что сработает или одно неравенство (когда $query==403), или другое неравенство (когда $query==404), или оба неравенства (когда $query==401).

    P.S. Только непонятно, а что именно не работает-то? Код без ошибок, рабочий, в чём проблема-то?
    Ответ написан
  • Нужна ли очистка, если есть валидация?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    В принципе - лишний, потому что что он будет, что он не будет, в любом случае FILTER_VALIDATE_EMAIL проверит строку на валидность.
    Если строка валидна (а значит там нет символов, вычищаемых через FILTER_SANITIZE_EMAIL) - работа продолжится. Если строка не валидна - будет ошибка.
    Ответ написан
    1 комментарий
  • Как создать ф-цию запроса в БД?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Возможно несколько вариантов. Можно сделать несколько запросов, и в зависимости от входных аргументов выбирать один из них. Это наиболее правильный вариант.

    Можно, но способ плох, модифицировать запрос в сторону универсальности. Например:
    ... WHERE (B.Country=:country OR :country='') AND ...
    .

    Или совсем "грязный" вариант, менять операцию в зависимости от аргумента:
    ... WHERE B.Country ".(!empty($country) ? "=" : "<>").":country AND ...
    Ответ написан
    Комментировать
  • Как сделать запрос PHP на добавление массива в MySQL?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Потому что массивы $_POST['tovar'] и $_POST['many'] существуют (они передаются из формы), а вот массив $_POST['tovar']['many'] не существует, совсем.

    Должно быть:
    $link = mysqli_connect($db_host, $db_user, $db_password, $db_database) or die("Ошибка:" . mysqli_error($link));
    
    foreach ($_POST['tovar'] as $i => $tovar) {
      if (!empty($tovar) AND !empty($_POST['many'][$i])) {
        $many = $_POST['many'][$i];
        mysqli_query($link,"INSERT INTO tovar(products_id,tovar,many)
                VALUES(
                                '".mysqli_real_escape_string($link, $id)."',
                  '".mysqli_real_escape_string($link, $tovar)."',
                  '".mysqli_real_escape_string($link, $many)."'
                )") or die("Ошибка: ".mysqli_error($link));
      } else {
        $_SESSION['answer'] = "Ошибка";
      }
    }


    И ещё, $id появляется из ниоткуда, да?
    Ответ написан
  • Почему при парсинге слетает кодировка буквы 'Р'?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Вы не дали ссылку на исходную страницу, не привели PHP-шный код разбора данных из текста страницы. Привели только скрипт запуска curl() для загрузки страницы, который к самой проблеме никак... А откуда появилось вот это 7 => string "..." и т.д.? Где этот PHP-код? Не, ну... Ну... Ну это как "у меня авто не едет, а нём все окна помыты и все фары/фонари тряпкой протёрты, помогите-люди-добрые", ей-богу!

    А по поводу порчи русской Р (HEX-код которой 0x04 0x20) - известная проблема. В preg_match/preg_replace надо использовать модификатор u: preg_match("/\S+/su", $str);
    Ответ написан
    Комментировать
  • Почему in_array() не работает в цикле?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    if ($key = array_search("976654", $session['data'])) {
      $result['id'] = $key;
    }


    Но при этом у вас $result не возвращается из функции через return $result;, и не является глобальной переменной, определённой вне функции check(). А значит вне функции check() вы его изменение и не увидите...
    Ответ написан
    2 комментария
  • Превышения объема памяти php?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    В ошибке говорится, что скрипты PHP уже загребли для работы 128 мегабайт (число 134217728, делённое на 1024 - получатся килобайты, и ещё раз делённое на 1024 - будут мегабайты) оперативной памяти. А в php.ini (а может в каком-то другом месте) стоит лимит оперативной памяти (и 128Mb - это значение по умолчанию) на один PHP-процесс в виде строки: memory_limit=128M.
    Вот PHP и пишет "лимит памяти превышен, прекращаю работу".
    Или повышайте лимит, или ищите причину расхода памяти в скриптах.

    P.S. Кстати, большие массивы ненужных данных можно вычищать из памяти командой unset($arr);, где $arr - имя массива с ненужными данными.
    Ответ написан
    Комментировать
  • Как получить chat_id для поиска по базе?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Удостоверьтесь, что в $result["message"]["chat"]["id"] вообще хоть что-то есть. А потом - что это число chat_id, конечно.
    Ответ написан
  • Не работает регистрация, в чем может быть причина?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Копать в сторону ini_set('display_errors', 0); error_reporting(E_ALL); и последующего разгребания ошибок в error.log HTTP-сервера (куда, как правило, складываются ошибки PHP, но бывают варианты...).

    P.S. Потому что и MySQL бывает глючит, и HTTP-сервер повисает, и под нагрузкой оперативная память кончается.
    Ответ написан
    Комментировать
  • Взламывают, как защитить сайт?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Ну тогда хотя-бы так:
    function rights($rights){
    global $http, $user;
    if(!isset($user['rights']) OR empty($rights) OR $user['rights'] < $rights) {
    header('Location: '.$http.$_SERVER['SERVER_NAME']); exit;
    }
    }
    
    $user_id = isset($_COOKIE['uid']) ? fl($_COOKIE['uid']) : '';
    $password = isset($_COOKIE['password']) ? fl($_COOKIE['password']) : '';
    
    if(!empty($user_id) && !empty($password)) {
    $user = $base->query('SELECT * FROM `users` WHERE `id` = "'.mysql_real_escape_string($user_id).'" AND `password` = "'.mysql_real_escape_string($password).'"')->fetch_assoc();
    } else {$user = false;}


    P.S. Но явно дыра где-то в другом месте.
    Ответ написан
    Комментировать
  • Почему 2 http запроса к PHP выполняются по очереди, а не одновременно?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Действительно, однозначная поочерёдность.
    Но если сделать URL уникальным (через index.php?_=random()) - поочерёдности уже нет.
    Ответ написан