こんにちは、ファイルを作成してサーバーに保存するスクリプトがあります。このファイルは UTF-8 でエンコードされており、cmap ソフトウェア用の一種の xml ファイルです。
サーバーから直接ファイルを開くと、問題はなく、ファイルを読み取ることができます。
ユーザーが特定の URL にアクセスしたときに、このファイルのダウンロードを強制しています。このようなダウンロードの後、ファイルは cmap ソフトウェアで読み取ることができません。テキスト エディタ (notepad++) でエンコーディングを UTF-8 から BOM なしの UTF-8 に変更する必要があります。
間違ったヘッダーを送信していますか? ファイルをダウンロードしているときにphpはファイルに何かをしていますか?
これに関するアドバイスをいただければ幸いです。
チアーズ・ドリュー
編集
申し訳ありませんが、いくつかの異なるクラスに関連する多くのコードがあります。ファイルをブラウザに送信するために使用しているコードを含めました。
function exportCMAP()
{
$serializer = new Serializer();
$serializer->serializeCmap();
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=export.cxl");
header("Content-Type: x-cmap/text-xml");
header("Content-Transfer-Encoding: binary");
readfile("temp/export.cxl");
}
(XMLWriter を使用して) xml を生成するコードが必要な場合は、それも投稿できます。
編集
ここで要求されているのは、xml が生成されているコードです。これは別のクラスにあります。
function serializeCmap()
{
$storeManager = new StoreManager();
$linkedNodes = $storeManager->getLinkedNodes();
$namespaces = Array();
$writer = new XMLWriter();
$writer->openMemory();
$writer->setIndent(4);
$writer->startDocument('1.0', 'utf-8');
$writer->startElement('cmap');
$writer->writeAttribute('xmlns', 'http://cmap.ihmc.us/xml/cmap/');
$writer->writeAttribute('dc', 'http://purl.org/dc/elements/1.1/');
$writer->startElement('res-meta');
$writer->writeElement("dc:title", "Full schema for Cmap");
$writer->writeElement("dc:description", "Description Goes Here");
$writer->endElement();
$writer->startElement('map');
$writer->startElement('concept-list');
foreach($linkedNodes['nodes'] as $node=>$id) {
$writer->startElement('concept');
$writer->writeAttribute("id", $id);
$writer->writeAttribute("label", $node);
$writer->endElement();
}
$writer->endElement();
$writer->startElement('linking-phrase-list');
foreach($linkedNodes['phrases'] as $phrase=>$id) {
$writer->startElement('linking-phrase');
$writer->writeAttribute("id", $id);
$writer->writeAttribute("label", $phrase);
$writer->endElement();
}
$writer->endElement();
$writer->startElement('connection-list');
foreach($linkedNodes['connections'] as $key=>$val) {
$writer->startElement('connection');
$writer->writeAttribute("from-id", $val['from']);
$writer->writeAttribute("to-id", $val['phrase']);
$writer->endElement();
$writer->startElement('connection');
$writer->writeAttribute("from-id", $val['phrase']);
$writer->writeAttribute("to-id", $val['to']);
$writer->endElement();
}
$writer->endElement();
$writer->endElement();
$writer->endElement();
$writer->endDocument();
file_put_contents("temp/export.cxl",$writer->outputMemory());
}