تعتبر الإرشادات الموجودة في مستند تعليمات PHP حول تشغيل PHP للتنزيلات من خلال الترويسات بسيطة نسبيًا، ويوجد عدد قليل جدًا من المقالات حول هذا الجانب على الإنترنت، ولا يمكن للعديد من المقالات تحقيق التأثير المطلوب. سأتحدث اليوم أيضًا عن هذا الموضوع، إذا شعرت أنه تم تحسينه مقارنة ببعض المقالات الموجودة على الإنترنت، فسوف أكون راضيًا جدًا.
من وجهة نظر دقيقة، فإن مستند PHP هو الأكثر دقة، لأنه يسرد بإيجاز البيانات الثلاثة المطلوبة لبدء تنزيل الملفات النصية. خذ PDF كمثال:
فيما يلي المحتوى المقتبس:
// سنقوم بإخراج
رأس PDF('نوع المحتوى: application/pdf');
// سيتم استدعاؤه download.pdf
header('Content-Disposition: Attachment; filename="downloaded.pdf"');
// مصدر PDF موجود في original.pdf
readfile('original.pdf');
هذه الجمل الثلاثة صحيحة، ولكن يمكن أن تحدث بعض المشكلات غير المتوقعة بسهولة أثناء الاستخدام الفعلي. إذا كنت شخصًا شديد الحذر، فيمكنك بسهولة تجنب هذه المشكلات. لكنني لست كذلك، لذلك واجهت مثل هذه المشكلة وهنا سأتحدث باختصار عن مشكلتي.
بالنسبة للجملة الأولى، يجب ألا يكون هناك ما يمكن قوله، فقط قم بتغيير نوع المستند. على سبيل المثال، إذا كنت تقوم بتنزيل ملف txt، فقم بتغييره إلى header('Content-type: application/txt'). );. الجملة الثانية ليس هناك ما يمكن قوله، فقط قم بتسمية المستند الذي قمت بتنزيله إذا كان ملف txt، فيمكنك تغييره إلى header('Content-Disposition: Attachment; filename="downloaded.txt"') ؛، سؤال الجملة الثالثة، هناك المزيد. تعني وظيفة readfile قراءة الملف وإخراجه. يجب أن يكون مسار الملف هنا هو مسار الملف الحقيقي. إذا كان ملفًا أصليًا ضمن مجلد التنزيلات يمكن كتابة readfile('downloads/ original.txt')؛ وإذا كانت الصفحة المرسلة ستخرج نصًا وأحرفًا أخرى، فسيكون الملف الذي تم تنزيله عبارة عن ملف مختلط من الملف الأصلي original.txt والنص الناتج بواسطة الصفحة المرسلة. كنت أفتقر إلى الملاحظة الدقيقة هنا، بمجرد أن رأيت شيئًا خاطئًا، قمت بفحص الكود على الفور، لكنني لم أجد أن النص أعلاه هو ما أحتاج إليه، بعد اكتشاف هذا الجزء من المحتوى، يمكنك التفكير بسرعة في كيفية حله هذه المشكلة، أي إيقاف تشغيل إخراج المحتوى النصي للصفحة المقدمة. عند هذه النقطة، تم حل المشكلة، ويتم تشغيل مربع حوار التنزيل عند النقر فوق رابط الملف النصي.