الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة في ال Header Function

مغلق
بدأه فواز الشمري في 1 يوليو 2006 · 6 رد · 805 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

أقوم بعمل تحميل ملف تلقائيا باستخدام الدالة Header .

بالستخدام الكود التالي :

<?php 
$filename = "thiszip.zip"; 
header('Content-type: application/zip'); 
header("Content-length: " . filesize($filename)); 
header('Content-Disposition: attachment; filename="' . $filename . '"'); 
readfile($filename);

ملاحضة : مع مراعات مسار الملف في السرفر في السطر عند الداله filesize لمعرفة طول الملف بالبايت وهي تاخذ مسار الملف بالكامل وكذلك مسار الملف عند attachment; filename يوضع اسم الملف مع المسار بالكامل .

المشكلة لدي هي اني اريد ان ارسل هذا الملف تلقائيا عند التحميل . بمعنى انه عند الضغط على رابط التحميل اقوم باستدعاء هذا الكود وفي نفس الوقت بعد ان يستدعي الكود المذكور ويضهر مربع الحوار الخاص بتحميل الملف يقوم بمواصلة عرض الصفحة وهي اني اريد ان اضهر له رابط في حال لم يتم التنزيل تلقائيا بحيث يستطيع ان ينقر على الرابط ويعمل معة التنزيل .

المشكلة هي انه الـ Header عند الكود السابق لا تواصل قراءة ما بعدها من أوامر لا اعلم لماذا . فبمجر النقر على الصفحة او الرباط يضهر مباشرة مربع التحميل لتحميل الملف ولا يقوم بعرض بقية الصفحة اي يواصل تحميل الصفحة . لأني عامل كما قلت في نهاية الصفحة رابط للتحميل اليدوي بدون التلقائي . والعملية شبيه بمعلية التحميل في موقع الكواد المقتوحة gp عند النقر تحدد السرفر الذي سوف تقوم من خلاله بالتحميل بعد ذلك يقوم بعرض صفحة اخرى يضهر مربع التحميل بينما الصفحة التي ضهرت تواصل في عرض محتوياتها . أنا لدي لمشكلة ان الصفحة لا تواصل العرض وتتوقف بمجرد ضهور ملف التحميل على الشاشة .

الشي الثاني :

انه لي نفس الصفحة في المنتصف عند النقر على زر التحميل ارسل متغير إلي نفس الصفحة مرة اخرة ولكن بعلامة تبين ان هناك تحميل وأقوم باستدعاء الدالة الخاصة بالتحميل .

في نفس الصفحة لدي include لملف الإعدادات config وبه تعاريف قاعدة البيانات وغيرها .

فعند استدعاء الدالة الخاصة بالتحميل من نفس الصفحة بها طبعا header هذه الداله يخبرني بوجود output في الصفحة عند السطر include

فهل استطيع التخلص من الـ output هذا بدون عزل الصفحة إلى صفحتان .

#2

بسم الله الرحمن الرحيم

إذا أرسلت header يحدد اسم الملف وحجمة ونوعه والملف فلا بد أن ينتهي إكمال عرض الصفحة ( إلا إن كنت تريد أن باقي الصفحة يكون مع الملف المحمل ههههه)

طبعاً أنت تستخدم header مع readfile إذا كنت لا تريد من المستخدم أن يعثر على مسار الملف في السيرفر وهذه فكرة جميلة جداً وآمنة . حتى تجبر الزبون باتباع المسار الذي تحدده .

تأملت بعض المواقع تأملاً سريعاً ووجدتها تستخدم الجافاسيكريبت في التحميل وهذا يحل مشكلة معاودة ضغط الرابط لمعاودة التحميل

انظر إلى هذا الكود

<form method="post" action="/redir.php" name="dlform">
<input type="hidden" name="mirror" value="umn">
<input type="hidden" name="path" value="/camerashy/release0.2.23.1.zip">
<script>
<!--
document.write('<h4>Your download should begin shortly.  If it does not, try <a href="http://umn.dl.sourceforge.net/sourceforge/camerashy/release0.2.23.1.zip" onclick="java script:document.dlform.submit();return false">http://umn.dl.sourceforge.net/sourceforge/camerashy/release0.2.23.1.zip</a> ');
 document.write('or choose a different mirror<br /><br />
<div id="mirrormsg"><a href="http://www.umn.edu" target="_blank"><img border="0" src="http://images.sourceforge.net/images/prdownloads/umn_137x54.png" alt="Mirror icon" /></a>You are using mirror:<br /> <h2>umn.dl.sourceforge.net</h2> </div><br /></h4>');
window.setTimeout('document.dlform.submit()', 5000);
// -->
</script>
<noscript>
<h4><input type="submit" value="Click Here To Start Your Download">
<br />or download from 
http://umn.dl.sourceforge.net/sourceforge/....23.1.zip<br /> if the above button does not work or choose a different mirror
<br /><br /><div id="mirrormsg"><a href="http://www.umn.edu" target="_blank"><img border="0" src="http://images.sourceforge.net/images/prdownloads/umn_137x54.png" alt="Mirror icon" />
</a>You are using mirror:<br /> <h2>umn.dl.sourceforge.net</h2> </div><br /><br /></h4>
</noscript>
</form>

الموجود على الرابط التالي على موقع المتسولين وأنا منهم

http://prdownloads.sourceforge.net/cameras...?use_mirror=umn

تم تعديل هذه المشاركة بواسطة أبو محمد اللحياني في 4 يوليو 2006 في 00:11

ولو وافيت ربك دون ذنب *** وناقشك الحساب إذاً هلكتا

ولم يظلمك في عملٍ ولكن *** عسير أن تقوم بما حملتا

#3

اشكرك اخي محمد :

حاولت بـ Java Script لكن كان لدي مشاكل في سوف اجرب الطريقة المذكورة في الموقع .

لكن المشكلة هي انه عند الضغط على الرابط وانا في الصفحة . لا تشعر أنه تم إعادة تحميل الصفحة من جديد وأكانك لم تقم بالضغط على الرابط اصلاً.

يعني بمجرد الضغط على الرابط يحمل تحميل تلقائيا . بس بون ان يحدث الصفحة حتى اضهر للزائر الرابط اليدوي في حال لم يتم التحميل تلقائياً .

سوف احال بفكرة اخرة .

أكرر شكري لك .

#4

الرابط اليدوي !!!

إذا كنت تستخدم الهيدر لا بد أن يحدث هذا أعني قولك

(لكن المشكلة هي انه عند الضغط على الرابط وانا في الصفحة . لا تشعر أنه تم إعادة تحميل الصفحة من جديد وأكانك لم تقم بالضغط على الرابط اصلاً.)

أنا أعتقد أن هذه ميزة (لأنه يحمي مجلدات الموقع من التطفل والتحميل بدون إذن) ولكن ممكن حل السكوت المطبق في الصفحة بطريقة ما إن شاء الله .

حل آخر

################

استخدم في حدث تحميل الصفحة

<body onLoad="window.location='http://domain/filename';">

وبعدها في الصفحة يكون الرابط اليدوي ولا تستخدم الهيدر بل استخدم الرابط الملف مباشرة

################

بالتوفيق

تم تعديل هذه المشاركة بواسطة أبو محمد اللحياني في 4 يوليو 2006 في 15:29

ولو وافيت ربك دون ذنب *** وناقشك الحساب إذاً هلكتا

ولم يظلمك في عملٍ ولكن *** عسير أن تقوم بما حملتا

#5

أشكرك اخي أبو محمد

فكرة جيدة في بداية تحميل الصفحة باستخدام OnLoad لكن الرابط في هذه الحالة قد يكون مثلا ملف نصي او صوتي وعند المباشرة في التحميل سوف يقوم باستدعاء البرنامج المقترن بالفتح مثل ريل بلاير ويفتح الملف دون عمل تحميل له وضهور مربع التحميل المعروف .

لذلك استخدام الـ Header في هذه الحالة يخبر المتصفح أنه هناك ملف سيتم إرفاقة للصفحة احدد أنا بطبيعة الحال نوع الملف .

على سبيل المثال الملفات المضغوطة وممكن اغير اي نوع اخر من اللمفات . application/zip

أتمنا منك اخي الكريم تجربة ذلك . وسوف اوصل البحث أيضا على اجد حل . ولكن معتمد على فكرتك . منتضرك.

(h)

#6

إذا ضع التحميل في صفحة مستقلة download.php

وضع من header ما يعجبك

ثم استدعي هذا الصفحة بكود أجاكس !! لا، ما هو شيء طويل !! لأنه وباختصار يستخدم الجافا سيكريبت

لماذا كود أجاكس لأن هناك أكواد جاهزة منه وفيه عند النقر على رابط التحميل يظهرك ما يشير للانتظار

loading...

ولو وافيت ربك دون ذنب *** وناقشك الحساب إذاً هلكتا

ولم يظلمك في عملٍ ولكن *** عسير أن تقوم بما حملتا

#7

تقنية Ajax ممتازة بالفعل . لكن . هل لديك الكود الخاص بعمل التحميل هذا بالكامل .

كنت قد شفت ذلك من قبل في احد الموقع حيث يضهر شريط التقدم للتحميل كما لو كان في windows افصد مؤشر التحميل على الموقع نفسة .

هذا الموضوع مغلق.

مواضيع مشابهة