لا يمكن تنزيل الملف في IE7 ولكن لا توجد أي مشكلة في Firefox وChrome وما إلى ذلك..؟
-
02-07-2019 - |
سؤال
لدي برنامج نصي يتلقى عنوان URL مشفرًا ومن ثم يقوم بإنشاء تنزيل، والمساواة الأكثر أهمية في البرنامج النصي هي كما يلي:
$MimeType = new MimeType();
$mimetype = $MimeType->getType($filename);
$basename = basename($filename);
header("Content-type: $mimetype");
header("Content-Disposition: attachment; filename=\"$basename\"");
header('Content-Length: '. filesize($filename));
if ( @readfile($filename)===false ) {
header("HTTP/1.0 500 Internal Server Error");
loadErrorPage('500');
}
تعمل التنزيلات بشكل سحري في أي متصفح باستثناء IE، لقد رأيت مشكلات تتعلق برؤوس "no-cache" لكنني لا أرسل أي شيء من هذا القبيل، فهم يتحدثون عن أحرف utf-8، لكن لا يوجد أي شيء utf-8 characters
(ولا يحتوي اسم الملف $ على أي أحرف utf-8 أيضًا).
المحلول
هذا الموقع لديه مشكلة مماثلة لك في IE6.كي تختصر:
يرسل session_start() بشكل افتراضي رأس التحكم في ذاكرة التخزين المؤقت بما في ذلك "no-store".يأخذ Internet Explorer هذا حرفيًا بعض الشيء ، ولكن ليس لديه معالجة خطأ مناسبة للحالة ، ونتيجة لذلك تنفجر بشكل خفي عند محاولة حفظ صفحة الإخراج على القرص.
قبل Session_start () ، أضف "Session_cache_limiter ('none') ؛" ، أو ابحث عن هذه الوظيفة وتعديل المحدد حسب الاقتضاء (ربما يكون "الخاص" أقرب إلى العلامة).
أدرك أن مقتطف الشفرة الذي نشرته لا يتضمن اتصالاً بـ session_start();
, ، لكنني اعتقدت أنني سأشارك هذا الحل المحتمل في حالة اتصالك به ولم تظهره لنا.
نصائح أخرى
لقد قمت بحلها عن طريق إرسال الرؤوس
header('Pragma: public');
header('Cache-Control: max-age=0');
لم أكن أعلم أن session_start() يرسل الرؤوس بمفرده.
لقد وجدت الإجابة في قسم التعليقات: خطأ:يتعذر على Internet Explorer تنزيل اسم الملف من WebServer
استخدم هذا
في IE7 Browser ، انتقل إلى خيار الإنترنت-> الأمان ---> المستوى المخصص ---> التنزيلات ثم تمكين المطالبة التلقائية لتنزيل الملف.
هذا سوف يحل المشكلة.
نأمل أن يساعد هذا