1

独自の ERP システムから OpenCart に製品画像を取得しようとしています。

これまでのところ(スタックオーバーフローに関する別の回答の助けを借りて)、次のコードで画像を個別のファイルに保存できました: http://pastebin.com/gv6M8QPT

サンプルの XML ファイルは次のようになります: http://pastebin.com/k6Eq4Rpr

3 つのタグがあります。

  • id: この場合は「1000」
  • ファイル名: この場合は「sampleimage.jpg」
  • mediablob: bin.base64 でエンコードされた画像

単純に XML ファイルを保存する代わりに、次のことを行いたいと思います。

  1. XML ファイルのメディアブロブをバイナリ イメージ ファイルに変換する
  2. タグで使用されている拡張子に基づいて作成された<id>.jpg場所に、画像ファイルを保存します。jpg<filename>
4

3 に答える 3

1
$document = new DOMDocument();
$document->loadXML($xml);
$dataNodes = $document->getElementsByTagName('mediablob');
foreach ($dataNodes as $node) {
    $base64 = $node->textContent;
    $bin = base64_decode($base64);
    file_put_contents('image.jpg', $bin);
}
于 2012-10-23T11:14:34.687 に答える
1

これが完全な解決策です。

$document = new DOMDocument();
$document->loadXML($xml);
$dataNodes = $document->getElementsByTagName('mediablob');
foreach ($dataNodes as $node) {
    // extract image
    $base64 = $node->textContent;
    // decode image
    $bin = base64_decode($base64);
    // get filename
    $filenames=$node->parentNode->getElementsByTagName('filename');
    $filename=$filenames->item(0)->textContent;
    // get ID
    $ids=$node->parentNode->getElementsByTagName('id');
    $id=$ids->item(0)->textContent;
    // get extension
    $extension=preg_replace("/^.+(?=\\.[^\\.]+$)/","",$filename);
    // save file
    file_put_contents($id.$extension, $bin);
}
于 2012-10-23T13:29:35.927 に答える