0

我目前正在创建一个 CMS,CMS 的主要功能之一是数据馈送系统。该网站将其数据库之一的内容传输到大量列表站点。每个站点都有自己的信息格式规范,我的任务是创建一个后端,该后端可用于为非程序员轻松修改和添加数据馈送。

到目前为止,在我收到的三种文件类型中,XML、CSV 和 TXT。即使在这些文件类型中,也有不同的格式化标准,不同的字段顺序,有些有引号,有些没有,等等。我一直对此感到困惑,这是我的解决方案:

  • 每个提要都有一个模板存储在单独的数据库表中。模板将包含提要所需的任何结构(XML、CSV、TXT)和占位符值(例如 {{NAME}})。然后脚本将遍历每个数据库条目,用变量值替换占位符,并使用正确的文件扩展名保存完成的文档。

我的问题是弄清楚如何使用一个 PHP 文件保存多个文件(可能从另一个 PHP 文件多次调用同一个文件?),此外,如何保存不同的文件类型。基本上,如何设置扩展名并保存文件?

4

2 回答 2

1

我会推荐一种面向对象的方法来解决所有这些问题:

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;
    }
}

现在,您可以通过创建接受 SQL 查询并返回对象数组的Dataa 来从数据库中创建对象。要序列化它们,只需调用您为每种格式实现的方法:DataFactoryData

$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
}
于 2012-07-28T23:00:53.810 回答
1

您可以像保存第一个文件一样保存多个文件。

如果您有 中的文件内容$filecontent,以及要使用的文件名(带有适当的扩展名)$filepath,您可以使用

file_put_contents($filename, $filecontent)

在你的循环中这样做,你就完成了。

有关file_put_contents 的详细信息,请参阅其 php 手册页

于 2012-07-28T22:12:20.887 回答