سؤال

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

المشكلة هي عندما الاختبار مع كبير الملف فقط بتحديث الصفحة كما لو أنني لم أرسل الملف في كل شيء ، ولا أحد من $_POST المتغيرات من النموذج حتى يتم إرسالها إلى الملقم.

أريد أن عرض رسالة خطأ للمستخدم ، السماح لهم معرفة أن الملف كبير جدا.ومع ذلك, لا أستطيع فعل هذا.

لا أحد يعرف ماذا يحدث ؟

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

المحلول

تحقق PHP ini الذي يحكم كيفية الكبيرة ملف PHP سوف تسمح ليتم تحميلها.هذه المتغيرات الهامة:

  • ماكس تحميل حجم الملف (المرفوعة)
  • ماكس بعد حجم البيانات (post_max_size)
  • الحد الأقصى للذاكرة (memory_limit)

أي الإضافات خارج هذه الحدود سيتم تجاهل أو errored ، اعتمادا على الإعدادات الخاصة بك.

هذا القسم في مستندات لديه أفضل ملخص: http://ca3.php.net/manual/en/features.file-upload.common-pitfalls.php

تحرير:نلاحظ أيضا أن معظم المتصفحات لن نرسل بتحميل أكثر من 2 غيغابايت في الحجم.هذا الرابط هو عفا عليها الزمن ، ولكن يعطي فكرة: http://www.motobit.com/help/scptutl/pa98.htm.أحد أفضل مصدر معلومات عن هذا ؟

وهناك أيضا القيود التي يمكن فرضها من قبل الملقم ، مثل Apache: http://httpd.apache.org/docs/2.2/mod/core.html#limitrequestbody

أن نرى حقا ما يحدث, ربما يجب عليك التحقق من سجلات خادم الويب ، راجع تحميل متصفح الحد (إذا كنت تستخدم فايرفوكس), و حاول معرفة ما إذا كان print_r($_FILES) يولد أي فائدة خطأ في الأرقام.إذا فشل كل شيء آخر ، حاول صافي الحركة في رصد الحرائق.والمفتاح هو لتحديد ما إذا كان الطلب حتى الذهاب إلى الخادم ، إذا ما طلب (بما في ذلك الرؤوس) يبدو.مرة واحدة كنت قد حصلت على هذا الحد في السلسلة, ثم يمكنك الذهاب إلى الوراء ونرى كيف PHP والتعامل مع التحميل.

نصائح أخرى

الخاص بك $_POST هو الأرجح فارغة لأن تحميل تجاوزت post_max_size التوجيه:

من PHP توجيهات الصفحة:

إذا كان حجم بيانات أكبر من post_max_size, في $_POST و $_FILES superglobals فارغة.هذا يمكن تتبع بطرق مختلفة ، على سبيل المثالعن طريق تمرير $_GET متغير السيناريو معالجة البيانات ، أي <form action="edit.php?processed=1">, ، ثم التحقق إذا $_GET['معالجتها'] يتم تعيين.

ولا يمكنك معرفة حجم الملف الذي يتم تحميلها، حتى يحصل على تحميلها بالكامل. حتى إذا كنت تريد تحديد حجم الملف، ومن ثم تظهر خطأ لملفات كبيرة، أولا يجب أن يكون الملف الذي تم تحميله، ثم التحقق من حجم الملف. اتباعها لديك ملف كبير تحميلها، يجب تعيين 2 الإعدادات في ملف التكوين الخاص بي، ملف php.ini. فتحه والبحث عن "upload_max_filesize" وتعيين القيمة إلى القيمة القصوى التي تريدها. ثم يجب عليك تعيين الحد الأقصى لقيمة المعلمات وظيفة، لأن استلمت الملفات التي يتم تحميلها عبر طريقة HTTP POST. العثور على "post_max_size" وحدد لها قيمة كبيرة ل.

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

http://martinjansen.com/ 2007/04/28 / الملفات تحميل-التقدم القضبان، مع فب /

والحد الأقصى للتحميل حجم الملف (upload_max_filesize) أقصى حجم بيانات آخر (post_max_size) هي توجيهات تحتاج إلى تعيين. لقد اختبرت ذلك مع OS متعددة، والمتصفحات وغيرها، وهذه هي الشيء اثنين فقط تحتاج للقلق.

وتشكيل بصرف النظر الخيارات كما أجاب المستخدمين السابق:

max upload filesize (upload_max_filesize)
max post data size (post_max_size)
memory limit (memory_limit)

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

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