0

私は現在CMSを作成していますが、CMSの主要な機能の1つはデータフィードシステムです。このウェブサイトは、そのデータベースの1つのコンテンツを多数のリストサイトに転送するためのものです。各サイトには、この情報のフォーマットに関する独自の仕様があり、プログラマー以外のデータフィードを簡単に変更および追加するために使用できるバックエンドを作成する必要があります。

これまでに受け取った形式のうち、XML、CSV、TXTの3つのファイルタイプがあります。これらのファイルタイプ内でもフォーマットにはさまざまな標準があり、フィールドの順序が異なり、引用符があるものとないものがあります。私はしばらくこれについて困惑してきましたが、これが私の解決策です。

  • 各フィードには、個別のデータベーステーブルに保存されたテンプレートがあります。テンプレートは、フィードに必要な構造(XML、CSV、TXT)とプレースホルダー値({{NAME}}など)で構成されます。次に、スクリプトが各データベースエントリをループし、プレースホルダーを変数値に置き換え、完成したドキュメントを正しいファイル拡張子で保存します。

私の問題は、1つのPHPファイルを使用して複数のファイルを保存する方法(おそらく別のPHPファイルから同じファイルを複数回呼び出す方法)と、このようなさまざまなファイルタイプを保存する方法を理解することです。基本的に、拡張子を設定してファイルを保存するにはどうすればよいですか?

4

2 に答える 2

1

最初のファイルを保存するのと同じように、複数のファイルを保存します。

にファイルの内容が$filecontentあり、に使用するファイル名(適切な拡張子が付いている)が$filepathある場合は、次を使用できます。

file_put_contents($filename, $filecontent)

ループでそれを行うと、完了です。

file_put_contentsの詳細については、そのphpマニュアルページを参照してください。

于 2012-07-28T22:12:20.887 に答える
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クエリを受け入れてオブジェクトの配列を返すをData作成することにより、データベースからオブジェクトを作成できます。それらをシリアル化するには、フォーマットごとに実装したメソッドを呼び出すだけです。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 に答える