Конкретный массив в файл CSV

У меня проблема с отправкой данных из таблицы в файл CSV.

Array

[link1] => HTTP Code
[link2] => HTTP Code
[link3] => HTTP Code
[link4] => HTTP Code

Мне нужно отправить данные в файл CSV, чтобы ссылки не повторялись.
К сожалению, я не знаю, как отправить ссылку за ссылкой (я работаю в цикле foreach), чтобы извлечь каждую из этих ссылок и отправить ее в CSV, и в то же время проверить, что уже не показывалось.

Это мой код:

require('simple/simple_html_dom.php');
$xml = simplexml_load_file('https://www.gutscheinpony.de/sitemap.xml');
$fp = fopen('Links2.csv', 'w');
set_time_limit(0);

$links=[];

foreach ($xml->url as $link_url)
{

$url = $link_url->loc;

$data=file_get_html($url);
$data = strip_tags($data,"<a>");
$d = preg_split("/<\/a>/",$data);

foreach ( $d as $k=>$u ){
if( strpos($u, "<a href=") !== FALSE ){
$u = preg_replace("/.*<a\s+href=\"/sm","",$u);
$u = preg_replace("/\".*/","",$u);

if ( strpos($u, "http") !== FALSE) {
$ch = curl_init($u);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if(strpos($u, "https://www.gutscheinpony.de/") !== FALSE )
$u = substr($u, 28);

if($u == "/")
$u = $url;
}

$links[$u] = $http_code;

$wynik = array( array($u, $url , $http_code));foreach ($wynik as $fields) {
fputcsv($fp, $fields);
}
}
}
}curl_close($ch);
fclose($fp);

echo 'Send to CSV file successfully completed ... ';

Мне нужно получить каждую ссылку из .xml, загрузить ссылки, которые находятся на той же странице, и указать статус HTTP. Эту часть я сделал. Я не могу только соответствующий способ отправить данные в файл CSV.

Я рассчитываю на вашу помощь.

0

Решение

Код ниже по сути ваш код с несколькими изменениями. Было также замечание, что :// не кажется приемлемым как часть PHP Array Keys.

    <?php

require __DIR__ . '/simple/simple_html_dom.php';
$xml        = simplexml_load_file('https://www.gutscheinpony.de/sitemap.xml');
$fp         = fopen(__DIR__ . '/Links2.csv', 'w');
set_time_limit(0);
$links      = [];
$status     = false;

foreach ($xml->url as $link_url){

$url    = $link_url->loc;
$data   = file_get_html($url);
$data   = strip_tags($data,"<a>");
$d      = preg_split("/<\/a>/",$data);

foreach ( $d as $k=>$u ){
$http_code = 404;
if( strpos($u, "<a href=") !== FALSE ){
$u = preg_replace("/.*<a\s+href=\"/sm","",$u);
$u = preg_replace("/\".*/","",$u);

if ( strpos($u, "http") !== FALSE) {
// JUST GET THE CODE ON EACH ITERATION,
// OPENING THE STREAM & CLOSING IT AGAIN ON EACH ITERATION...
$http_code  = getHttpCodeStatus($u);

if(strpos($u, "https://www.gutscheinpony.de/") !== FALSE ){
$u = substr($u, 28);
}

if($u == "/") {
$u = $url;
}
// THIS COULD BE A BUG... USING :// AS PART OF AN ARRAY KEY SEEMS NOT TO WORK
$links[str_replace("://", "_", $u)] = $http_code;

// RUN THE var_dump(), TO VIEW THE PROCESS AS IT PROGRESSES IF YOU WISH TO
var_dump($links);
$status = fputcsv($fp, array($u, $url , $http_code));
}

}
}
}fclose($fp);
if($status) {
echo count($links) . ' entries were successfully processed and written to disk as a CSV File... ';
}else{
echo  'It seems like some entries were not successfully written to disk  - at least the last entry... ';
}

function getHttpCodeStatus($u){
$ch         = curl_init($u);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output     = curl_exec($ch);
$http_code  = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return $http_code;
}
0

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

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

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