Попытка представить в 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, но это дает мне ошибку, что файл пуст.
Вы должны сделать запрос для каждого файла. Поместите свое выполнение 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;
}
?>
Он отлично работает для меня. Надеюсь, это поможет 🙂
Других решений пока нет …