قم بإنشاء ملف PHP DOM XML وإنشاء ملف/موجه حفظ ملف دون كتابة الملف إلى الخادم عند إرسال الرؤوس بالفعل

StackOverflow https://stackoverflow.com/questions/202305

  •  03-07-2019
  •  | 
  •  

سؤال

لقد قمت بإنشاء قطعة PHP DOM XML وحفظتها في سلسلة مثل هذه:

<?php
  // create a new XML document 
  $doc = new DomDocument('1.0');
  ...  
  ...
  ...
  $xmldata = $doc->saveXML();
?>

الآن لا يمكنني استخدام الرؤوس لإرسال موجه تنزيل ملف ولا يمكنني كتابة الملف إلى الخادم ، أو بالأحرى لا أريد أن يضع الملف عليه.

شيء مثل رابط حفظ هذا الملف أو موجه التنزيل سيكون جيدًا. كيف فعلتها؟

هل كانت مفيدة؟

المحلول

أرى من التعليقات التي تعمل من داخل إطار عمل CMS ولا تستطيع إيقاف المحتوى من الإخراج قبل مكان وجود الرمز الخاص بك.

إذا كان البرنامج النصي الذي تعمل فيه قد خرج بالفعل من المحتوى (خارج عنك) ، فلا يمكنك فعل ما تحاول تحقيقه في برنامج نصي واحد فقط.

يمكن أن يرسل البرنامج النصي إما رؤوسًا تقول "المحتوى التالي هو HTML" ثم يخرج HTML أو إرسال رؤوس تقول "المحتوى التالي هو XML ، هو مرفق وله اسم ملف معين". لا يمكنك فعل كليهما.

يمكنك إما إخراج HTML يحتوي على رابط إلى برنامج نصي منفصل لتنزيل ملف XML أو يمكنك إصدار تنزيل ملف وإخراج No HTML.

لذلك ، سيتعين عليك إضافة رابط تنزيل في إخراج البرنامج النصي CMS الذي تقوم بتعديله ثم التعامل مع التنزيل في برنامج نصي منفصل.

لقد قدمت مثالاً يعمل من شأنه أن يساعد. يتضمن المثال مستند HTML بسيط يحتوي على رابط تنزيل ، ونصي PHP الذي يعالج التنزيل بعد ذلك.

عرض الرمز أدناه أو ألق نظرة على مثال مباشر.

HTML (تم إزالة الزغب الغريب ، وليس بالضرورة صالحة)

<html>
<head>
<title>XML Download Example</title>
</head>

<body>

<a href="download.php">Download XML example</a>

</body>
</html>

بي أتش بي

<?php
// Populate XML document
    $doc = new DomDocument();
    // ... various modifications to the document are made

// Output headers
    header('Content-type: "text/xml"; charset="utf8"');
    header('Content-disposition: attachment; filename="example.xml"');

// Output content
    echo $doc->saveXML();
?>

إذا كنت غير قادر تمامًا على التعامل مع التنزيل عبر برنامج نصي ثانٍ (ربما لا يمكنك الوصول إلى البيانات ذات الصلة) ، فسيتعين عليك إعادة التفكير في المشكلة.

نصائح أخرى

يمكنك تمكين output_buffering في php.ini الخاص بك ، ثم قد يكون لديك بعض الخيارات مع إرسال الرؤوس.

http://us.php.net/manual/en/function.headers-sent.php

The same thing worked for me. But i am not using XML DOM. i use SimpleXML to parse my xml.

$xml = new SimpleXMLElement("<root></root>");

I want to give my view a custom xml which will be generated depending upon the data they give through the form. On submiting the form they get the xml as download with thier own desired name.

header('Content-type: "text/xml"; charset="utf8"');

header('Content-disposition: attachment; filename="'.$_POST['filename'].'.xml"');

echo $xml->asXML();

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top