Dram

Рейтинг
1114
Регистрация
28.06.2008
livetv #:

Сюда 

curl_setopt($ch, CURLOPT_POSTFIELDS, $array);

нужно отправлять строку, а не массив.

$ch = curl_init('https://www.immowelt.de/liste/getlistitems');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'query=geoid%3D10814285250%26etype%3D2%26esr%3D1%26sort%3Drelevanz&offset=4&pageSize=4');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
$html = curl_exec($ch);
curl_close($ch);

echo $html;

Не помогло... и туда можно отправлять массив https://www.php.net/manual/ru/function.curl-setopt.php

Этот параметр может быть передан как в качестве url-закодированной строки, наподобие 'para1=val1&para2=val2&...', так и в виде массива, ключами которого будут имена полей, а значениями - их содержимое. 
ArbNet #:

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

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

Странность для мня по сути вот в чем - если на данной итерации в переменную не приходило данных (парсер не находил инфы на странице), то я ожидал что переменная станет пустой, а она оставалось со значением из прошлой итерации.

придумал, отвечаю по традиции сам себе

$re = '~^(.*)((([А-ЯA-Z]|[А-ЯA-Z][\x27а-яa-z]{1,}|[А-ЯA-Z][\x27а-яa-z]{1,}\-([А-ЯA-Z][\x27а-яa-z]{1,}|(оглы)|(кызы)))\040[А-ЯA-Z][\x27а-яa-z]{1,}(\040[А-ЯA-Z][\x27а-яa-z]{1,})?))$~muU';
$str = 'Усов Василий Николаевич
Смелянский Александр Юрьевич
Ооо "МираторгБелгород" Прохоров Владимир Иванович
Якушев Михаил Вячеславович
Шильников Александр Сергеевич
Скляренко Виктор Владимирович
Попов Александр Иванович
КОЛХОЗА Товстяк Владимир Васильевич
Бигас Анатолий Степанович
Высоцкий Николай Семенович
Чефранов Михаил Эдуардович
ЛИКВИДАТОР Помельников Юрий Михайлович
Ооо "Ук ПродимексСахар" Данькевич Григорий Николаевич
ИСПОЛНЯЮЩИЙ ОБЯЗАННОСТИ ГЕНЕРАЛЬНОГО А Астахов Анатолий Николаевич
Управляющий Фоминов Василий Иванович
Управляющий Ретунский Алексей Иванович
Быковец Людмила Сергеевна
Жабин Сергей Викторович
Камолин Александр Валерьевич
Школлер Роман Александрович
Головин Максим Валентинович
';
$subst = '$2';

$result = preg_replace($re, $subst, $str);

echo "The result of the substitution is ".$result;
С появлением http2 это уже несколько лет не актуально
ArbNet #:

Смотреть вариант 1.

Прописал перед определением каждой переменной в цикле присвоение ей пустоты (очищаю каждую переменную при итерации) и все глюки пропали.

Было так

$full_name = addslashes(trim($pq->find('.c2m')->find('p')->find('a:eq(0)')->text()));

стало так

$full_name = '';
$full_name = addslashes(trim($pq->find('.c2m')->find('p')->find('a:eq(0)')->text()));
ArbNet #:

Тут два варианта:

Скрипт написал я. Значит описанное мной предположение невозможно? Переменные затираются при каждой итерации даже пустотой?

Главное что смущает - вот ловлю я ошибку, смотрю страницу на которой ее поймал, но там дата в нужном формате, запускаю парсер заново и он без ошибок проходит эту же страницу, где только что вывалился с ошибкой. Вот этот момент мне и не понятен. То есть ошибка, то нет... Такое впечатление что как бы не успевает распарситься перед вызовом функции, но это же бред...
Спасибо за помощь, понял куда копать, буду ловить!

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


$tmp = 0;
$newArr = [];
for($i=0;$i<317;$i++){
    if(!in_array(1, $tempArr[$i])) {
        //добавляем первый подмассив, или если после цепочки единиц начались нули $tmp еще не перезатерлась и скажет нам об этом
        if(count($newArr)==0 || $tmp == 1){
            array_push($newArr, $tempArr[$i]);
        }else{
            foreach ($tempArr[$i] as $item) {
                array_push($newArr[count($newArr)-1], $item);
            }
        }
        $tmp = 0;

    }  else {
         //пушим новый подмассив с единицами, если он пошел после цепочки нулей $tmp еще не перезатерлась и скажет нам об этом
        if($tmp == 0){
            array_push($newArr, $tempArr[$i]);
        }
        if($tmp == 1){
            foreach ($tempArr[$i] as $item) {
                array_push($newArr[count($newArr)-1], $item);
            }
        }
        $tmp = 1;
    }
}
Установил плагин (уже забыл как он называется) и он остановил спам.
Всего: 6924