поиск — Отправьте XML в GSA с помощью цикла PHP / foreach

Попытка представить в GSA (Google Search Appance). Хорошо работает для 1 XML-файла. Но я пытаюсь перебрать все файлы в каталоге и отправить в GSA с циклом, но не могу заставить его работать.

<?php

$target_url = 'http://1.1.1.1:19900/xmlfeed';

$header = array('Content-Type: multipart/form-data');

$directory = 'xml';

if (! is_dir($directory)) {
exit('Invalid diretory path');
}

$files = array();

foreach (scandir($directory) as $file) {
if ('.' === $file) continue;
if ('..' === $file) continue;

}

//print $file;$fields = array(
'feedtype'=>'incremental',
'datasource'=>'testing',
'data'=>file_get_contents(realpath($file))
//'data'=>file_get_contents(realpath('test.xml')) //works fine

);$ch = curl_init();

curl_setopt($ch, CURLOPT_HTTPHEADER,$header);
curl_setopt($ch, CURLOPT_TIMEOUT,120);
curl_setopt($ch, CURLOPT_URL,$target_url);
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);

$return = curl_exec($ch);

if (curl_errno($ch)) {
$msg = curl_error($ch);
}

curl_close ($ch);echo $return;

?>

Попытка добавить цикл foreach, но это дает мне ошибку, что файл пуст.

1

Решение

Вы должны сделать запрос для каждого файла. Поместите свое выполнение curl в цикл foreach, и все должно быть в порядке:

<?php

$target_url = 'http://1.1.1.1:19900/xmlfeed';
$header = array('Content-Type: multipart/form-data');
$directory = 'xml';

if (! is_dir($directory)) {
exit('Invalid diretory path');
}

$files = array();

//List all files in the directory
foreach(glob($directory."/*.*") as $file) {

//Check the file extension
$ext = pathinfo($file, PATHINFO_EXTENSION);
if($ext != 'xml') continue;

//Add the fields
$fields = array(
'feedtype'=>'incremental',
'datasource'=>'testing',
'data'=>file_get_contents($file)
);

//Post the request
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER,$header);
curl_setopt($ch, CURLOPT_TIMEOUT,120);
curl_setopt($ch, CURLOPT_URL,$target_url);
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);

$return = curl_exec($ch);

if (curl_errno($ch)) {
$msg = curl_error($ch);
}

curl_close ($ch);

//Print the result for each file
echo "Result for " . basename($file) . " is : " . $return;
}
?>

Он отлично работает для меня. Надеюсь, это поможет 🙂

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]