كيفية تغيير الحد الأقصى لحجم الملف المرفوع في PHP: دليل كامل

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

لماذا لا يسمح PHP برفع ملف أكبر من 2 ميجابايت؟

\n

هل سبق لك أن حاولت رفع صورة عالية الجودة أو عرض تقديمي أو فيديو إلى موقع الويب، وأجابك PHP بجفاف: «The uploaded file exceeds the upload_max_filesize directive in php.ini»؟ مألوف؟ هذه مشكلة كلاسيكية تظهر في كل مشروع ثانٍ. على Stack Overflow، حصد سؤال «Change the maximum upload file size» عشرات الآلاف من المشاهدات - وهذا ليس من قبيل الصدفة.

\n

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

\n\n

كيف يحد PHP من رفع الملفات؟

\n

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

\n\n

1. upload_max_filesize - الحد المباشر للملف

\n

هذا هو المعامل الأكثر وضوحًا. يحدد الحد الأقصى لحجم ملف واحد يتم رفعه. افتراضيًا، في PHP هو 2M (2 ميجابايت). للزيادة، على سبيل المثال، إلى 100 ميجابايت، اكتب:

\n
upload_max_filesize = 100M
\n\n

2. post_max_size - حجم طلب POST بالكامل

\n

هنا يقع الكثيرون في الفخ. حتى لو قمت بزيادة upload_max_filesize ولكن نسيت post_max_size، فلن يعمل الرفع. لماذا؟ لأن الملف يُرسل داخل طلب POST، وإذا تجاوز حجم الطلب بالكامل الحد - فسيقوم PHP ببساطة بقصه.

\n

القاعدة بسيطة: يجب أن يكون post_max_size أكبر من upload_max_filesize. عادةً ما يتم تعيينه أكبر بنسبة 20-30%. مثال:

\n
post_max_size = 120M
\n\n

3. max_execution_time - وقت الرفع

\n

الملفات الكبيرة لا تُرفع فورًا. إذا كان وزن الملف 100 ميجابايت والإنترنت بطيء، فقد لا يكتمل السكربت في الوقت المخصص. افتراضيًا، max_execution_time = 30 ثانية. للملفات الكبيرة، قم بزيادته إلى 300-600 ثانية:

\n
max_execution_time = 600
\n\n

4. memory_limit - الذاكرة للمعالجة

\n

بعض سكربتات PHP تقوم بتحميل الملف إلى الذاكرة قبل المعالجة. إذا كان memory_limit أصغر من حجم الملف - ستحصل على خطأ. يُوصى بتعيينه أكبر من post_max_size:

\n
memory_limit = 256M
\n\n

أين وكيف تغير الإعدادات؟

\n

الآن بعد أن عرفنا المعاملات المسؤولة عن تغيير الحد الأقصى لحجم الملف المرفوع، دعنا نستعرض أين يمكن تغييرها. لديك ثلاثة طرق رئيسية:

\n\n

الطريقة 1: php.ini (ملف الإعدادات الرئيسي)

\n

هذه هي الطريقة الأكثر موثوقية. ابحث عن ملف php.ini على الخادم (عادةً ما يكون في /etc/php/ أو /usr/local/etc/). افتحه وابحث عن التوجيهات المطلوبة. إذا لم تكن موجودة - أضفها في نهاية الملف:

\n
; السماح برفع الملفات (يجب أن يكون On)\nfile_uploads = On\n\n; الحد الأقصى لحجم ملف واحد\nupload_max_filesize = 100M\n\n; الحد الأقصى لحجم طلب POST\npost_max_size = 120M\n\n; وقت تنفيذ السكربت\nmax_execution_time = 600\n\n; حد الذاكرة\nmemory_limit = 256M
\n

بعد التغييرات، تأكد من إعادة تشغيل خادم الويب:

\n
sudo service apache2 restart   # لأباتشي\nsudo service nginx restart     # لـ Nginx
\n\n

الطريقة 2: .htaccess (لأباتشي فقط)

\n

إذا لم يكن لديك وصول إلى php.ini (على سبيل المثال، في الاستضافة)، يمكنك المحاولة عبر .htaccess في جذر الموقع:

\n
php_value upload_max_filesize 100M\nphp_value post_max_size 120M\nphp_value max_execution_time 600\nphp_value memory_limit 256M
\n

هام: هذه الطريقة تعمل فقط

المدونات

توصيات الكتب