Сохранение массива в виде CSV-файла с использованием PHP

Этот код анализирует содержимое двух веб-сайтов, беря из них все атрибуты href. Затем он находит те, которые имеют наибольшее совпадение значения href из каждого массива, и сохраняет их в файл CSV. Проблема в том, что когда я открываю файл, он возвращает также HTML-данные моего приложения.

В качестве упражнения я могу использовать только HTML и PHP.

<html>
  <body>
    <form action = "<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method = "post">
      website: 
      <input type = "text" name = "website1">
      <br>
      website: 
      <input type = "text" name = "website2">
      <br>
      <input type = "submit" name = "submit">
    </form>
  </body>
</html>

<?php

if (isset($_POST['submit']))
    {

    // form has been submitted

    $url1 = $_POST['website1'];
    $url2 = $_POST['website2'];
    findAndCompare($url1, $url2);
    }
  else
    {
    }

function findAndCompare($url1, $url2)
    {
     libxml_use_internal_errors(true);
    // Create a DOM parser object

    $dom1 = new DOMDocument();
    $dom2 = new DOMDocument();
    $dom1->loadHTMLFile($url1);
    $dom2->loadHTMLFile($url2);
    $arr1 = array();
    $arr2 = array();
    $arr3 = array();

    // Iterate over all the <a> tags

    foreach($dom1->getElementsByTagName('a') as $link)
        {

        // insert the <a href> in arr1

        array_push($arr1, $link->getAttribute('href'));
        }

    // Iterate over all the <a> tags

    foreach($dom2->getElementsByTagName('a') as $link)
        {

        // insert the <a href> in arr2

        array_push($arr2, $link->getAttribute('href'));
        }

    for ($i = 0; $i < count($arr1); $i++)
        {
        $max_elem = $arr2[0];
        $max = 0;
        for ($j = 0; $j < count($arr2); $j++)
            {
            similar_text($arr1[$i], $arr2[$j], $perc);
            if ($perc > $max)
                {
                $max = $perc;
                $max_elem = $arr2[$j];
                }
            }

        $tmp = array($arr1[$i],$max_elem,$max);
        array_push($arr3,$tmp);
        }

    function convert_to_csv($input_array, $output_file_name, $delimiter)
        {
        $temp_memory = fopen('php://memory', 'w');

        // loop through the array

        foreach($input_array as $line)
            {

            // use the default csv handler

            fputcsv($temp_memory, $line, $delimiter);
            }

        fseek($temp_memory, 0);

        // modify the header to be CSV format

        header('Content-Type: application/csv');
        header('Content-Disposition: attachement; filename = "' . $output_file_name . '";');

        // output the file to be downloaded

        fpassthru($temp_memory);
        }

    convert_to_csv($arr3, 'export.csv', ',');
    }

?>

ОБНОВИТЬ Я решаю это, поставив ob_clean(); перед header

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
104
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

HTML действительно будет выводиться, потому что это первое, что делает ваш код.

Как вы уже знаете, PHP позволяет смешивать HTML и код в одном файле с помощью маркеров <?php и ?> для обозначения начала и конца кода PHP.

Все, что находится за пределами этих маркеров, считается выводом и отправляется в браузер точно так же, как если бы вы использовали инструкцию print() или echo().

Ваш код начинается с блока HTML, перед которым ничего нет. Это точно так же, как если бы вы запустили программу с оператором print(), содержащим этот HTML.

Если вы не хотите, чтобы HTML выводился во всех случаях, вам понадобится код перед этим, чтобы сообщить, когда и нужно ли его выводить.

Вы не можете использовать header(), если он уже есть.

Переместите форму html в первый оператор else.

Кроме того, не забудьте включить отчет об ошибках, потому что php вам это ясно дал бы.

Другие вопросы по теме