Конфликт в коде PHP

200
29 июля 2017, 06:49

Добрый день! Столкнулся со странной проблемой, а именно:

Функция query_to_google прекрасно работает сама по себе в отдельном документе, но когда я начинаю ее внедрять в основной модуль массив $a обнуляется сам собой.

Под обнуляется, подразумеваю, что до добавления проблемной строки print_r ($a) выдает DOMNodeList Object ( [length] => 5 ) После добавления проблемной строки, print_r ($a) выдает DOMNodeList Object ( [length] => 0 )

До строки где объявляется массив $material_name_array находится фрагмент кода основного модуля. Конфликт заключается в том, что после добавления строки

 $pExcel = PHPExcel_IOFactory::load($uploadPath); 

массив $a обнуляется и у меня не выполняется вложенный foreach, который предназначен для обработки ссылки.

Пока этой строки нет, код работает отлично.

Прошу, подскажите с чем это может быть связано? В php неопытен.

require_once 'Classes/PHPExcel.php';
// Каталог, в который мы будем принимать файл:
$uploaddir = 'uploadFile/';
$uploadfile = $uploaddir.basename($_FILES['uploadfile']['name']);

// Копируем файл из каталога для временного хранения файлов:
if (copy($_FILES['uploadfile']['tmp_name'], $uploadfile))
    {
    echo "<h3>Файл успешно загружен на сервер</h3>";
    //header( 'Refresh: 0; url=../formsComplete.php' );
    }
else {
    echo "<h3>Ошибка! Не удалось загрузить файл на сервер!</h3>"; 
    // header( 'Refresh: 0; url=../formsError.php' );
    }

$uploadPath = 'uploadFile/';
$fileName = $_FILES['uploadfile']['name'];
$uploadPath .= $fileName;
$pExcel = PHPExcel_IOFactory::load($uploadPath);
// выбираем лист, с которым будем работать
$pExcel->setActiveSheetIndex(0);
$aSheet = $pExcel->getActiveSheet(0);
// Цикл по листам Excel-файла
foreach ($pExcel->getWorksheetIterator() as $worksheet) {
    // выгружаем данные из объекта в массив
    $tables[] = $worksheet->toArray();
}
// тут огромный кусок кода обработки Excel файла
// Результатом его работы будет массив $material_name_array
$material_name_array = array("Муфта+соединительная+GUSJ-12/150-240+(E08773-064)+купить");
function query_to_google($material_name_array) {
        foreach ($material_name_array as $query_string) {
        libxml_use_internal_errors(true);
        $dom = new DomDocument;
        $dom->loadHTMLFile("https://www.google.ru/search?q=".$query_string);
        $xpath = new DomXPath($dom);
        $a = $xpath->query('//*[@id="ires"]/ol/div/h3/a/@href');
        print_r ($a); 
           foreach ($a as $b){
            $extract_href = ""; //Переменная в которой будет храниться итоговая обработанная ссылка
            $href_buffer = ""; // Буфер для отсечения куска в начале строки
            $href_buffer2 = ""; // Буфер для отсечения куска в конце строки
            $extract_href = $b->textContent.PHP_EOL;
             echo "<br>Необработанная строка: ", $extract_href,"<br>";
            $href_buffer = explode("/url?q=", $extract_href); 
            $href_buffer2 = $href_buffer[1]; 
            $href_buffer2 = explode("&sa=U&ved", $href_buffer2);
            $extract_href = $href_buffer2[0];
            echo $extract_href;
            echo "</br></br>#######################</br>";
            }
        $freeze_time = rand(3,5);
        sleep($freeze_time);
       }
  }
//~~~~~тело~~~~~
query_to_google ($material_name_array);
Answer 1

Проверьте пути:

$uploaddir = __DIR__.'/uploadFile';
$uploadfile = $uploaddir . "/" . basename($_FILES['uploadfile']['name']);
$uploadPath = __DIR__.'/uploadFile/';
$fileName = $_FILES['uploadfile']['name'];
$uploadPath .= $fileName;

И замените loadHTMLFile на CURL:

$ch = curl_init("https://www.google.ru/search?q=".$query_string);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
$cl = curl_exec($ch);
$dom = new DomDocument;
$suc = $dom->loadHTML($cl);
$xpath = new DomXPath($dom);
$a = $xpath->query('//*[@id="ires"]/ol/div/h3/a/@href');
READ ALSO
Экспорт xlsx файла из php

Экспорт xlsx файла из php

Пытаюсь сделать экспорт данных в xlsx файлСначала сделал экспорт в xls таким образом:

513
Как должен выглядеть запрос в данном случае

Как должен выглядеть запрос в данном случае

В цикле вывожу все наименования фирм из таблицы companynameХочу внутри этой таблицы вывести сумму полей из таблицы gtable таким образом

207
Альтернатива циклу на PHP

Альтернатива циклу на PHP

Здравствуйте!

171
Добавление товаров в корзину PHP

Добавление товаров в корзину PHP

Как реализовать функцию добавления товаров в корзину в куки на PHP? Расскажите пожалуйста алгоритм действий

384