Вывод информации из базы данных в нескольких форматах

В настоящее время я создаю CMS, и одной из основных функций CMS является система передачи данных. Веб-сайт должен передавать содержимое одной из своих баз данных большому количеству сайтов, включенных в список. Каждый сайт имеет свои собственные спецификации для форматирования этой информации, и мне было поручено создать бэкэнд, который можно использовать для простого изменения и добавления каналов данных для непрограммистов.

Пока что из форматов, которые я получил, есть три типа файлов: XML, CSV и TXT. Существуют разные стандарты форматирования даже внутри этих типов файлов, разный порядок полей, некоторые имеют цитаты, некоторые нет и т. Д. Я некоторое время ломал голову над этим, и вот мое решение:

  • Каждый канал будет иметь шаблон, хранящийся в отдельной таблице базы данных. Шаблоны будут состоять из любой структуры, которая требуется фиду (XML, CSV, TXT) со значением заполнителя (например, {{NAME}}). Затем скрипт будет перебирать каждую запись в базе данных, заменять заполнители значениями переменных и сохранять заполненный документ с правильным расширением файла.

Моя проблема состоит в том, чтобы выяснить, как сохранить несколько файлов, используя один файл PHP (возможно, вызывая один и тот же файл несколько раз из другого файла PHP?), И, кроме того, как сохранить файлы разных типов, как этот. Как установить расширение и сохранить файл?

2 ответа

Решение

Вы сохраняете несколько файлов, как вы сохраняете первый.

Если у вас есть содержимое файлов в $filecontentи имя файла, которое будет использоваться (с соответствующим расширением) в $filepath, ты можешь использовать

file_put_contents($filename, $filecontent)

Сделайте это в своем цикле, и все готово.

Для получения дополнительной информации о файле file_put_contents см. Справочную страницу php.

Я бы порекомендовал объектно-ориентированный подход ко всему этому:

1) Создайте интерфейсы для каждого типа данных, в который вам нужно преобразовать каждый объект

interface xmlSerializable {
    public function toXML();
}

interface csvSerializable {
    public function toCSV();
}

interface txtSeriablizable() {
    public function toTXT();
}

2) Создайте класс для представления типа данных, которые вам нужно сериализовать в различные форматы для ваших клиентов, и implement каждый из интерфейсов

class Data implements xmlSerializeable { // I only implemented one for brevity
    private $id         = null;
    private $stuff      = null;
    private $otherStuff = null;
    private $stuffArray = array();

    public __construct($id, $stuff, $otherStuff, $stuffArray) {
        $this->id         = $id;
        $this->stuff      = $stuff;
        $this->otherStuff = $otherStuff;
        $this->stuffArray = $stuffArray;
    }

    public function getId() { return $this->id; }

    public function toXML() {
        $output = '<?xml version="1.0" encoding="UTF-8"?>'."\n".
                  '<data>'."\n\t".
                  '<id>'.$this->id.'</id>'."\n\t".
                  '<stuff>'.$this->stuff.'</stuff>'."\n\t".
                  '<otherStuff>'.$this->otherStuff.'</otherStuff>'."\n\t".
                  '<stuffArray>'."\n\t\t";

        foreach($this->stuffArray as $stuff) {
            $output .= '<stuff>'.$stuff.'</stuff>'."\n\t\t";
        }

        $output .= '</stuffArray>'."\n".
                   '</data>';

        return $output;
    }
}

Теперь вы можете создавать Data объекты из вашей базы данных путем создания DataFactory который принимает запрос SQL и возвращает массив Data объекты. Чтобы сериализовать их, просто вызовите метод, который вы реализовали для каждого формата:

$df    = new DataFactory($pdo);
$datas = $df->query('SELECT * FROM Data');

foreach($datas as $data) {
    file_put_contents('/data/xml/'.$data->getId().'.xml', $data->toXML());
    // You can add other formats here in the above fashion
}
Другие вопросы по тегам