Indirildikten sonra okunmaz PHP Dosya

1 Cevap php

Merhaba ben bir dosya oluşturur ve sunucu üzerinde depolayan bir komut dosyası var. Dosya UTF-8 olarak kodlanmış ve cmap yazılım için xml dosyasının bir tür olduğunu.

I doğrudan sunucudan dosyayı açarsanız o zaman hiçbir problem olmadığı ve dosya okunabilir.

Bir kullanıcı belirli bir url gittiğinde ben bu dosyanın bir indirme zorlama duyuyorum. Böyle bir yükleme sonrasında, dosya cmap yazılım tarafından okunamaz. Benim metin editörü (notepad + +) içine gidin ve BOM olmadan UTF-8 UTF-8 kodlamasını değiştirmek zorunda.

Ben yanlış başlıklar yolluyorum? Onu yüklerken php dosyası için bir şey yapıyor?

Bu konuda herhangi bir tavsiye gerçekten takdir.

Cheers Drew

DÜZENLEME

Üzgünüm, farklı sınıfların bir çift dahil bir sürü kod var. Ben dosyayı tarayıcıya göndermek için kullanıyorum kodu dahil ettik:

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 kullanarak) xml üretir kodu gerekirse ben de bu gönderebilirsiniz.

DÜZENLEME

Burada talep olarak xml üretilmektedir kodu - bu başka bir sınıfta:

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

1 Cevap

Siz iki önemli şeyler eklemek gerekir:

  1. HTTP başlık henüz gönderilmedi ise test ve
  2. ve birden fazla çıkış olduğunu sağlamak readfile.

Yani bu deneyin:

function exportCMAP() {
    if (headers_sent()) {
        // HTTP header has already been sent
        return false;
    }
    // clean buffer(s)
    while (ob_get_level() > 0) {
        ob_end_clean();
    }
    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");
    // avoid any further output
    exit;
}