الدالة move_uploaded_file()‎ في PHP

من موسوعة حسوب
< PHP
مراجعة 02:30، 28 أبريل 2018 بواسطة عبد اللطيف ايمش (نقاش | مساهمات) (←‏ملاحظات)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)
اذهب إلى التنقل اذهب إلى البحث

(PHP 4 >= 4.0.3, PHP 5, PHP 7)

تنقل الدالة move_uploaded_file()‎ ملفًا مرفوعًا إلى موقع جديد.

الوصف

bool move_uploaded_file ( string $filename , string $destination )

تتحقَّق هذه الدالة إن كان الملف filename مرفوعًا بطريقة صحيحة (أي أنَّه رُفِع باستعمال الطريقة POST) ثمَّ تنقله إلى الموقع destination المعطى.

التحقُّق الذي تجريه الدالة له أهمية كبيرة إذ يمكن مصادفةً أن تؤدي أي عمليَّة تُجرى على الملفات المرفوعة إلى إظهار محتواها للمستخدم أو المستخدمين الآخرين الموجودين على النظام ذاته.

المعاملات

filename

اسم الملف المرفوع المراد نقله.

destination

الموقع المراد نقل الملف إليه.

القيم المعادة

تُعاد القيمة TRUE عند نجاح العمليَّة.

إن كان المعامل filename ملفًا مرفوعًا بطريقة غير صحيحة، فلن يُتخذ أي إجراء وستُعاد القيمة FALSE.

إن كان العامل filename ملفًا مرفوعًا بطريقة صحيحة ولكن لا يمكن نقله لعدَّة أسباب، فلن يُتخذ أي إجراء وستُعاد القيمة FALSE بالإضافة إلى إصدار تنبيه.

أمثلة

المثال 1: رفع ملفات متعدِّدة

<?php
$uploads_dir = '/uploads';
foreach ($_FILES["pictures"]["error"] as $key => $error) {
    if ($error == UPLOAD_ERR_OK) {
        $tmp_name = $_FILES["pictures"]["tmp_name"][$key];
        // (filesystem traversal attacks) هجمات تجاوز نظام الملفات basename() ربما تمنع الدالة
        // إجراء المزيد من عمليات التحقُّق من صحة وسلامة اسم الملف قد يكون كافيًا
        $name = basename($_FILES["pictures"]["name"][$key]);
        move_uploaded_file($tmp_name, "$uploads_dir/$name");
    }
}
?>

ملاحظات

تأخذ الدالة move_uploaded_file()‎ الوضع الآمن (safe_mode) والمتغير open_basedir بالحسبان. على أيِّ حال، ستُطبَّق القيود على المسار destination فقط عند السماح بنقل الملفات المرفوعة إليه إذ قد يتعارض اسم الملف filename مع بعض القيود تلك.

تتأكَّد الدالة move_uploaded_file()‎ من سلامة تنفيذ العمليَّة عبر السماح للملفات المرفوعة بوساطة PHP فقط بالانتقال إلى الموقع المعطى.

تحذير: إن كان الملف موجودًا في الموقع المراد نقله إليه مسبقًا، فسيُستبدل حينئذِ.

انظر أيضًا

  • الدالة is_uploaded_file()‎: تتأكد من عمليَّة رفع الملف باستعمال HTTP POST.
  • الدالة rename()‎: تعيد تسمية ملف أو مجلَّد ما.
  • التحكم برفع الملفات للاطلاع على المزيد من الأمثلة البسيطة شائعة الاستعمال.

مصادر