بارگیری فایل ها به سرور با استفاده از PHP. مثال دانلود فایل ها به سرور (آپلود) در پی اچ پی چگونه فایل پی اچ پی را دانلود کنید

مطمئنا شما اغلب فایل های مختلف را در سایت ها دانلود کنید. مثلا، آواتار های آپلود شده در انجمن، عکس ها در شبکه های اجتماعی، فیلم های مختلف بر روی میزبان های ویدئویی، فقط فایل ها در اشتراک گذاری فایل. و اینجا در این مقاله شما یاد خواهید گرفت نحوه آپلود فایل ها به سرور در PHP. از طریق پی اچ پی در اغلب موارد، این اجرا شده است.

اول از همه، چه چیزی یاد بگیریم که خودش است فرم HTMLکه در آن فایل جایگزین باید کاملا طبیعی باشد، در اینجا یک مثال است کد HTML چنین فرم:





نقطه کلیدی در اینجا یک ویژگی است " انسداد"با معنی" multipart / فرم داده"بدون آن کار نخواهد کرد.

"در آن ما هنوز فایل را دانلود نمی کنیم، و ما کمی در نقاط مختلف مختلفی که باید در نظر گرفته شود، گذشت، در غیر این صورت امنیت ممکن است تاثیر بگذارد:

print_r ($ _ فایل ها)؛
?>

در نتیجه، محتویات را خواهید دید. آرایه دو بعدی جهانی $ _files:

  • نام. - نام فایل دانلود شده.
  • نوع - نوع MIME فایل قابل دانلود این شاید مهمترین پارامتر برای امنیت باشد. و همیشه هنگام دریافت فایل ها باید بررسی شود نوع MIMEدر غیر این صورت هیچ مشکلی وجود ندارد در مقاله بعدی ما در مورد آن در جزئیات بیشتر صحبت خواهیم کرد.
  • tmp_name - مسیر فیزیکی به فایل موقت. این در این مکان است که فایل قرار داده شده است، و تنها پس از آن ما آن را به جای دیگری حمل می کنیم. در حقیقت، فایل قبلا بارگذاری شده است، و ما فقط باید آن را به پوشه دلخواه در سرور منتقل کنیم.
  • خطا - کد خطا. اگر یک 0 ، هیچ خطایی وجود ندارد.
  • اندازه - اندازه فایل دانلود شده. این نیز یک گزینه اغلب استفاده شده است، و همچنین باید بررسی شود اندازه فایل های دانلود شده را محدود کنید. البته، این اندازه خود محدود است، با این حال، برای هر عکس، این اندازه به وضوح بیش از حد بیش از حد (به عنوان یک قانون، او 10 مگابایت).

و تمام این پارامترها برای هر فایل قابل دانلود وجود دارد (هر کدام یک آرایه در یک آرایه دو بعدی است. $ _FILES.).

حالا بیایید به پایان برسیم دانلود فایل ها به سرور در PHPو برای این ما چنین کد را بنویسیم (""):

$ uploadfile \u003d "images /".$_ فایل ها [" somename "] [" name "]؛
move_uploaded_file ($ _ فایل ها ["somename"] ["tmp_name"]، $ uploadfile)؛
?>

این است که در ابتدا مسیر را به فایل قابل دانلود در سرور مشخص می کنیم. در اینجا ما می خواهیم فایل را در دایرکتوری قرار دهیم " تصاویر"با همان نامی که قبل از فایل بود. و عملکرد move_uploaded_file () ما فایل را به دایرکتوری دایرکتوری انتخاب شده خود از ذخیره سازی موقت منتقل می کنیم.

با این حال، توجه، بسیار مهم است! بنابراین از کد در هیچ مورد استفاده کنید، در غیر این صورت سایت شما یک خطر جدی را تهدید خواهد کرد! در حقیقت، در حال حاضر آن را می توان به طور کامل هر چیزی را دانلود کرد: هر فایل اجرایی، اسکریپت، پانل HTML و دیگر چیزهای بسیار خطرناک. بنابراین، لازم است فایل های قابل دانلود را به سرور بررسی کنید. و بنابراین ما در مقاله بعدی مقابله خواهیم کرد. از آنجا که موضوع بسیار مهم است، پس من به شما توصیه می کنم به اشتراک گذاری به روز رسانی، به طوری که از دست دادن این مقاله نیست.

شما جاوا اسکریپت را در مرورگر خود مسدود کرده اید. اجازه دهید جاوا اسکریپت برای کار سایت!

بارگیری فایل ها به سرور

کوتاه در آپلود

فایل های آپلود شده یا چرا کار نمی کند
کپی ("C: \\ images \\ sample.jpg"، "http://mysite.ru/uploads/sample.jpg")

حتی اگر شما تنها یک کامپیوتر در اختیار دارید، که در آن سرور و ایستگاه کاری هماهنگ شده اند، فراموش نکنید که پی اچ پی از تکنولوژی مشتری / سرور استفاده می کند. فایل که ما می خواهیم آپلود کنیم معمولا در ماشین مشتری قرار دارد، به عنوان مثال کاربر، بازدید کننده معمولی سایت. مقصد سرور است به منظور ایجاد فرایند انتقال فایل، ما به فرم زیر نیاز داریم:

ارسال این فایل:

در این مورد، URL اسکریپت پی اچ پی شما باید در فیلد عمل مشخص شود، که همچنان به پردازش فایل های دانلود شده ادامه خواهد داد. Field Max_File_size پنهان باید پیش از انتخاب فایل فایل باشد و حداکثر اندازه فایل مجاز را در بایت ها داشته باشد. انتصاب آن این است که اندازه فایل را بررسی کنید حتی تا زمانی که فایل به سرور ارسال شود. این باید کاربر را از یک دانلود طولانی و ناموفق فایل به سرور و تشکیل ترافیک بیش از حد ذخیره کند، اما نباید به ویژه بر این محدودیت تکیه کند، زیرا آسان است که در اطراف آن آسان باشد.

چه اتفاقی می افتد زمانی که کاربر یک فایل را روی دیسک خود انتخاب کرد و دکمه "ارسال فایل" را فشار داد؟ مرورگر فایل را به سرور ارسال می کند که در آن مترجم پی اچ پی آن را در دایرکتوری موقت خود قرار می دهد و آن را یک نام تصادفی اختصاص داده و اسکریپت مشخص شده در فیلد عمل را اجرا می کند.

چگونه باید upload.php شبیه باشد؟

$ uploaddir \u003d "/ var / www / آپلود /"؛ اگر (move_uploaded_file ($ _ فایل ها ["userfile"] ["tmp_name"]، $ uploaddir. $ _Files ["userfile"] ["name"])) (چاپ "فایل معتبر است و با موفقیت آپلود شده است." دیگر (چاپ "وجود دارد برخی از خطاها!"؛)

هنگام نوشتن یک اسکریپت، یک سوال طبیعی مطرح می شود: نحوه دریافت اطلاعات در مورد فایل دانلود شده و رسیدن به فایل خود. اگر از نسخه PHP نسخه 4.1.0 و قدیمی تر استفاده می کنید، بهتر است به آرایه جهانی $ _files مراجعه کنید. برای هر فایل دانلود شده، شامل یک آرایه هش است، با داده های زیر:

  • $ _FILES ["userfile"] ["نام"] - نام فایل اصلی، مانند کاربر آن را مشاهده کرد، انتخاب فایل؛
  • $ _FILES ["userfile"] ["نوع"] - فایل MIME / TYPE، به عنوان مثال، می تواند تصویر / GIF باشد؛ این فیلد مفید است اگر شما می خواهید یک رابط برای دانلود فایل های دانلود شده را فراهم کنید.
  • $ _files ["userfile"] ["اندازه"] - اندازه فایل دانلود شده؛
  • $ _files ["userfile"] ["tmp_name"] - مسیر کامل به فایل موقت بر روی دیسک؛
  • $ _FILES ["userfile"] ["خطا"] - شروع با نسخه 4.2.0، حاوی یک کد خطا است که 0 اگر عملیات با موفقیت انجام شود.

برای نسخه PHP زیر 4.1.0، این آرایه به نام $ http_post_files نامیده می شود. فراموش نکنید که، بر خلاف $ _files، این آرایه فوق العاده نیست و هنگام دسترسی به آن، به عنوان مثال، از یک تابع، لازم است به صراحت مشخص شود $ http_post_files $ $؛

اگر متغیرهای اضافی از $ userfile_name $ userfile_type، $ userfile_size، $ userfile_size، $ userfile_type، $ userfile_size، در تنظیمات ثبت نام شما_globals \u003d در، ... با توجه به این که، شروع با نسخه 4.2.0، تنظیمات پیش فرض register_globals \u003d خاموش استفاده از این متغیرها توصیه نمی شود، حتی اگر آنها تعریف کنند. بهترین راه برای دریافت اطلاعات در مورد فایل های دانلود شده، استفاده از یک آرایه $ _Files است.

برای کار با فایل های دانلود شده، بهتر است از توابع ساخته شده در IS_UPLOADED_FILE استفاده کنید شما می توانید اطلاعات دقیق تر در صفحات دستی پیدا کنید. لازم نیست یک دوچرخه را اختراع کنید و با فایل های موقت خود کار کنید، آنها را کپی کنید، حذف کنید. این کار قبلا برای شما و برای شما انجام شده است.

تنظیم سرور

من همه چیز را درست انجام دادم، اما چیزی برای من کار نمی کند. شاید من سرور نادرست را پیکربندی کنم؟

اگر شما "همه چیز را درست کرد"، اما کد شما کار نمی کند، یا آن را به اشتباه کار نمی کند، عجله به ناامیدی نیست. شاید مشکل در دست شما نیست، بلکه در تنظیمات سرور اشتباه است. در اینجا لیستی از دستورالعمل هایی است که مربوط به دانلود فایل ها هستند:

در فایل php.ini:

  • اگر می خواهید بدانید کجا php.ini شما واقع شده است، انجام دهید
  • file_uploads - امکان ممنوعیت یا اجازه دانلود فایل ها به عنوان یک کل. به طور پیش فرض
  • upload_max_filesize - حداکثر اندازه فایل که می تواند دانلود شود. اگر شما نیاز به کار با فایل های بزرگ، این تنظیم را تغییر دهید. به طور پیش فرض، 2 متر فراموش نکنید که post_max_size را تغییر دهید.
  • post_max_size - یک حد کلی در بالای داده های ارسال شده در درخواست پست. اگر شما نیاز به کار با فایل های بزرگ دارید یا چندین فایل را در همان زمان ارسال کنید، این تنظیم را تغییر دهید. مقدار پیش فرض 8 متر است.
  • upload_tmp_dir. - دایرکتوری موقت بر روی سرور که تمام فایل های قابل دانلود قرار می گیرد. بررسی کنید که کدام حقوق بر روی آن تعیین می شود (اگر در این مرحله مشکلی دارید، توضیح را در پایان مقاله ببینید). چنین دایرکتوری نیز باید یک کاربر داشته باشد که تحت آن آپاچی انجام می شود، باید حق بنویسید که به این دایرکتوری بنویسید. اگر شما با محدودیت Open_Basedir فعال هستید، سپس دایرکتوری موقت باید داخل باشد. شما نیازی به مراقبت از تمیز کردن او یا نام های منحصر به فرد ندارید، PHP این مشکل را برای شما حل می کند.

در پرونده httpd.conf.:

  • اول از همه، اطمینان حاصل کنید که از آپاچی 1.3 وب سرور (آخرین نسخه در زمان نوشتن مقاله - 1.3.27) استفاده کنید. اگر از Apache 2.0 استفاده می کنید، باید گزیده ای زیر را از مستندات بخوانید:

    از آپاچی 2.0 و پی اچ پی در یک محیط تولید استفاده نکنید نه بر روی یونیکس و نه در ویندوز.

  • اگر پیام "Post Method را لغو نکنید"، به این معنی است که شما باید چیزی شبیه به دستورالعمل های زیر را جستجو کنید و از کلمه کلیدی اجازه استفاده کنید: سفارش اجازه می دهد، انکار اجازه از همه
  • مشکلات دانلود فایل های باینری - سوال کلاسیک "چرا فایل ها در حال مبارزه با آپلود هستند". در اینجا راه حل این تصمیم پیشنهاد شده توسط Dima Borodin (http://php.spb.ru) است: در دایرکتوری که اسکریپت دروغ می گوید، فایل .htaccess را وارد کنید، که در آن ما نوشتیم: CharsetDisable به فایل httpd.conf. ردیف ها را اضافه کنید: charsetrecodemultipartforms خاموش است

توضیحات کوچک، به این دستور العمل: مشکل بالا زمانی که بایگانی بارگذاری شده به سرور بدون پرداخت هزینه نیست و تصاویر نمایش داده نمی شود، ممکن است به دلیل این واقعیت که وب سرور آپاچی روسی استفاده می شود، رخ می دهد. دستورالعمل CharsetDisable ماژول ماژول پردازش Charset را غیرفعال می کند، I.E. هیچ ترانزیتینگ هنگام دانلود فایل های موجود در این پوشه رخ نمی دهد. دستورالعمل Charsetrecodemultforms از انتقال داده های انتقال داده شده توسط روش پست با نوع محتوا: Multipart / Form-data Header منتقل می شود. کسانی که. داده های باینری که با چنین تنظیمی منتقل می شود، به صورت اصلی باقی می ماند و تمام بقیه پر کردن سایت با توجه به تنظیمات سرور فعلی باز می شود.

اما در عین حال، عوارض ممکن است بوجود آید: برای این واقعیت آماده باشید که در برخی موارد بخش های متن درخواست شما باید خود را مجددا از دست بدهید. این چیزی است که مستندات در مورد این گفته می شود:

از دستورالعمل Charsetrecodemultforms استفاده کنید، که در PL23 ظاهر شد، اما شما هنوز هم باید قطعات بخش دستی را به صورت دستی تنظیم کنید. برای انجام این کار، می توانید از API Apache روسیه موجود در سایر ماژول ها یا API Apache Perl روسیه موجود از MOD_PERL استفاده کنید.

یکی از نمونه هایی از تعریف کدگذاری را می توان در اینجا یافت: http://tony2001.phpclub.net/detect_charset/detect.phps

آخرین مستندات در مورد آپاچی روسی در وب سایت رسمی خود است: http://apache.lexa.ru/.

فراموش نکنید که پس از هر تغییر پیکربندی، شما باید سرور وب خود را دوباره راه اندازی کنید.

شما همچنین می توانید پارامترهای Apach را با استفاده از .htaccess پیکربندی کنید:

php_value upload_max_filesize 50m php_value post_max_size 50m

ویژگی های اضافی

بارگیری چندین فایل در همان زمان

مثال از فرم دانلود چندین فایل:

ارسال این فایل ها:


و فراموش نکنید که افزایش دهید post_max_sizeاگر بسیاری از فایل ها قرار است

فایل های خودکار دانلود به سرور

شما نباید فراموش نکنید که فایل ها بر روی دیسک کاربر اطلاعات محرمانه ای هستند که نه جاوا اسکریپت و نه خیلی بیشتر PHP دارای رابطه کم است. تا زمانی که کاربر فایل را با کمک انتخاب کند مهم نیست که چه کاری با او کار می کند و سخنرانی می کند. و فراموش نکنید که این فیلد ورودی فیلد، ویژگی ارزش از ضبط محافظت می شود.

ذخیره سازی فایل ها در پایگاه داده MySQL

اگر شما برای ذخیره فایل های قابل دانلود در پایگاه داده جمع آوری می شود، باید نکات زیر را به یاد داشته باشید:

  • شما باید از فیلد حباب استفاده کنید
  • قبل از قرار دادن به پایگاه داده، فراموش نکنید که به رشته mysql_escape_string () اعمال کنید
  • هنگام نمایش فایل، باید هدر محتوا / نوع را مشخص کنید

به یاد داشته باشید که اسکریپت نمایش HTML شما را به هیچ وجه به اسکریپت متصل نیست که تصویر باید خروجی باشد. این باید دو برنامه مختلف باشد.

ذخیره سازی تصاویر در پایگاه داده یک سبک خوب نیست. این بسیار راحت تر است که در پایگاه داده فقط به فایل های تصویری ذخیره شود.

دریافت خواص تصویر

اگر یک کار برای بررسی نوع یا اندازه تصویر قبل از دانلود فایل به سرور دارید، به عملکرد GetImagesize () نیاز دارید. به عنوان یک استدلال، نام فایل را بر روی دیسک پذیرفته و آرایه را باز می گرداند، دو عنصر اول که عرض و ارتفاع است، سوم نوع تصویر است. اگر غیرممکن است که تصویر صحیح را از فایل مشخص شده بخوانید، این تابع دروغ می گوید.

بارگذاری فایل های دارای نام زبان روسی

هنگام دانلود به فایل سرور، شما باید نام اصلی خود را برای حضور شخصیت های غیر استاندارد (به عنوان مثال، نامه های روسی) بررسی کنید. در صورت حضور آنها، لازم است جایگزین شود. نام فایل اصلی را می توان در $ _files ["userfile"] متغیر یافت. نحوه شارژ رشته روسی روسی به translit شما را می توان در نمونه های پی اچ پی پیدا کرد.

نمایش وضعیت نمایش (نوار پیشرفت)

باید در ذهن داشته باشید که تا زمانی که فایل به طور کامل دانلود شود، پی اچ پی نمی تواند عمل کند و یا اندازه فایل یا درصد بارگذاری آن. فقط زمانی که فایل در حال حاضر در سرور پی اچ پی است، قادر به دسترسی به اطلاعات خواهد بود. اگر هنوز نیاز به پیاده سازی چنین فرصتی دارید، از اپلت جاوا استفاده کنید.

حقوق به فایل ها

مشکلات حقوق در سرور (upload_tmp_dir)

در سیستم عامل های یونیکس مانند هر پوشه، فایل، لینک مطابق با مجوزها تنظیم می شود. آنها ممکن است مانند RWX-RW-R یا به عنوان شماره 754 شبیه باشند.

در دسترس بودن یک فایل یا دایرکتوری بستگی به شناسه کاربر و شناسه گروهی دارد که در آن وارد می شود. حالت به طور کلی از لحاظ سه توالی شرح داده شده است، سه حرف هر کدام:

صاحب گروه دیگر (U) (G) (O) RWX RWX RWX

در اینجا صاحب، اعضای گروه و سایر کاربران حقوق برای خواندن فایل، به آن و اعدام آن را بنویسید. حقوق - هر ترکیبی معنی دار از نامه های زیر:

r حق خواندن (چهار)
وین حق ثبت (2)
X حق اعدام (جستجو در کاتالوگ). (یکی)

  • مالک دایرکتوری کاربر را نصب کنید، با جاذبه های آن توسط آپاچی انجام می شود. این را می توان از فایل httpd.conf پیدا کرد یا لیست فرآیندهای سرور را مشاهده کرد. حقوق دایرکتوری باید 700 باشد (RWX ------).
  • صرف نظر از اینکه صاحب کاتالوگ، حقوق 777 را تعیین می کند (RWXRWXRWX).

    یک مثال از اجرای دانلود تصاویر به سرور.

    $ max_image_width \u003d 380؛ $ max_image_height \u003d 600؛ $ max_image_size \u003d 64 * 1024؛ $ valid_types \u003d آرایه ("GIF"، "jpg"، "png"، "jpeg")؛ اگر (isset ($ _ فایل ها ["userfile"]) (iS_UPLOADED_FILE ($ _ فایل ها ["userfile"] ["tmp_name"])) ($ filename \u003d $ _files ["userfile"] ["tmp_name"] ؛ $ ext \u003d substr ($ _ فایل ها ["userfile"] ["نام"]، 1 + strpos ($ _ فایل ها ["userfile"] ["نام"]، "."))؛ اگر (scileize ($ filename) )\u003e $ max_image_size) (ECHO "ERROR: اندازه فایل\u003e 64K."؛) elseif (! in_array ($ ext، $ valid_types)) (echo "Error: نوع فایل نامعتبر است."؛) else ($ size \u003d getimagesize ($ نام فایل)؛ اگر (($ اندازه) && ($ اندازه< $max_image_width) && ($size < $max_image_height)) { if (@move_uploaded_file($filename, "/www/htdocs/upload/")) { echo "File successful uploaded."; } else { echo "Error: moving fie failed."; } } else { echo "Error: invalid image properties."; } } } else { echo "Error: empty file."; } } else { echo "
    ارسال این فایل:
    "; }
  • در مقاله ما، ما نمونه ای از ایجاد یک اسکریپت دانلود فایل پی اچ پی به سرور را در نظر می گیریم. مثال دانلود فایل ساده ما 2 فایل دارد: فرم (form.html)، اسکریپت دانلود فایل PHP (uploader.php).

    حالا ما همه چیز را به طور دقیق تجزیه و تحلیل خواهیم کرد. اول، فرم فرم .html را تجزیه و تحلیل کنید:


    همانطور که می توانید این کد HTML ساده را مشاهده کنید، در اینجا هیچ چیز پیچیده ای وجود ندارد، تنها اگر فرم فایل را به سرور بارگذاری کند، ویژگی باید ثبت شود encype \u003d "چند بخشفرم-داده ها ".

    فرم ما به نظر می رسد:

    مثالپی اچ پی فایل پی اچ پی

    حالا ما آن را با فایل پی اچ پی که فایل ها را به سرور دانلود می کنیم، شکل دهیم. در زیر کد منبع آن است:

    // که در آن فایل به $ target_path \u003d 'uploaded_files / "اضافه می شود؛ / * نام فایل اصلی را به مسیر هدف ما اضافه کنید. نتیجه" uploaded_files / filename.extension "* / $ target_path \u003d $ target_path است. basename ($ _ _ فایل ["فایل"] ["نام"])؛ اگر (move_uploaded_file ($ _ فایل ها ["فایل"] ["tmp_name"]، $ target_path)) (echo "فایل". baseName ($ _ فایل ها ["فایل "] [" نام "])" آپلود شده است "؛ دیگر (Echo" یک خطا آپلود فایل وجود داشت، لطفا دوباره امتحان کنید! "؛)

    اسکریپت فایل پی اچ پی چگونه؟

    uploader.php یک اسکریپت دانلود فایل PHP ساده به یک سرور است که فایل های ما را به یک دایرکتوری سایت خاص که توسط $ target_path \u003d "uploaded_files /" مشخص شده است دانلود کنید.

    خوب، به خودی خود، ما خروجی ابتدایی پیام ها را با استفاده از اگر / else، روشن شد، فایل ما بارگذاری شده یا نه.

    هک کردن هک کردن حفاظت در هنگام دانلود یک فایل

    ما نه تنها از لحاظ هک کردن هکرها حفاظت را در نظر خواهیم گرفت، بلکه همچنین مشکلات دیگر ناخواسته ای را که در هنگام دانلود فایل ها به سرور ایجاد می شود، در نظر می گیریم.

    PHP فایل پوسته

    این اولین مشکل مربوط به دانلود فایل ها به سرور است. هنگامی که فایل دانلود دارای یک پوسته PHP است، این بدان معنا نیست که فرمت آن PHP باشد. این ممکن است تصویری داشته باشد. jpg (.gif، .png ...). اما در داخل به نظر می رسد:

    برخی از صنایع دستی همچنین می توانند دستورات سرور را با استفاده از URL گشت و گذار اجرا کنند:

    $ curl http: //server/uploads/shell.php؟ command \u003d any_unix_command

    روش حفاظت:

    برای محافظت، شما می توانید بررسی فایل MIME را اجرا کنید. در زیر مثال را ببینید:

    اگر ($ _ فایل ها ["فایل"] ["type"]! \u003d "image / gif") (echo "با عرض پوزش، ما فقط همه تصاویر GIF را آپلود می کنیم"؛ خروج؛)

    این قطعه کد پی اچ پی چک می کند که آیا فایل GIF قابل دانلود فایل است. این کد را قبل از دانلود پرونده PHP وارد کنید. به طور طبیعی، شما می توانید چک بر روی JPG، PNGI دیگر فایل های مورد نیاز خود را تغییر دهید.

    حقیقت این است که می گویند، و اگر شما یک هدر هدر را با دستورالعمل های MIME ارسال کنید، این روش حفاظت را می توان از بین برد. برای انجام این کار، لازم است که در دسترس بودن آن لازم باشد برچسب ها در فایل قابل دانلود

    محدود کردن اندازه فایل دانلود شده

    همچنین ممکن است با اندازه های بزرگ فایل هایی که فضای دیسک شما را اشغال می کنند، وجود داشته باشد. برای انجام این کار، یک محدودیت را در اندازه فایل دانلود کنید.

    شما می توانید این کار را با استفاده از فرم انجام دهید، زیرا این باید خط زیر را به زمینه فرم HTML اضافه کنید:

    این فیلد ورودی پنهان، اندازه فایل قابل دانلود را محدود می کند. یا شما می توانید اندازه فایل ابزار PHP را بررسی کنید.

    نوشتن O.پی اچ پی فایل پی اچ پی می تواند طولانی باشد، اما ما قبلا اصل اساسی دانلود فایل ها را به سرور تقسیم کردیم. بنابراین، اگر کسی سوالات بیشتری داشته باشد، از آنها در نظرات بپرسید.

    امروزه سرویس دانلود فایل به سرور (میزبانی) در تمام سایت های شبکه های اجتماعی، تابلوهای بولتن، سایت های دوستیابی، و غیره یافت می شود. ماهیت آن این است که بازدید کننده را به منابع وب فعال کنید تا فایل های خود را منتشر کنید (عکس ها، اسناد) در اینترنت.

    هنگام ارائه این سرویس، یک منهای قابل توجهی وجود دارد. واقعیت این است که با اجازه دادن به شما این امکان را می دهد که فایل را به سرور خود دانلود کنید، ما، همانطور که بود، درب را که پشت آن کنترل ثابت لازم است نصب کنید. از آنجایی که در پرونده بازدید کننده ممکن است نه تنها اطلاعات مفید باشد، بلکه یک کد ویروسی است که بعدا می تواند مهاجمان را قادر به گرفتن سرور شما کند. با توجه به این منهای، قبل از دانلود به سرور باید فایل ها را دقیقا بررسی کنید.

    اما من شما را ارعاب نخواهم کرد، اما من ترجیح می دهم توجه شما را در حال حاضر آماده سازی عملکرد (PHP Script) برای بررسی و دانلود فایل ها به سرور. تابع 100٪ کار است. من خودم آن را در سایت هایم استفاده می کنم. این ویژگی برای دانلود فایل های تصویر (عکس) در format.jpg، .gif، .png نوشته شده است. اما اگر می خواهید، می توانید تغییرات را برای تطبیق اسکریپت پی اچ پی به نیازهای خود انجام دهید.

    دو چک در اسکریپت پی اچ پی اجرا می شود:

    1. از آنجا که Hoster محدود کردن اندازه فایل دریافت شده (در زمان نوشتن این مواد، من یک محدودیت 8 مگابایتی در میزبانی من دارم)، سپس چک کردن حداکثر اندازه ضروری است؛
    2. چک کردن فرمت فایل اجازه می دهد تا قبل از دانلود فایل های غیر ضروری را قطع کنید.

    امیدوارم کد تابع به اندازه کافی برای مقابله با فایل دانلود به سرور توضیح داده شود. اما اگر سوالی دارید، خوشحال خواهم شد که در نظرات پاسخ دهم.

    در حال حاضر در مورد چگونگی اجرای آن عملا

    ما تابع کد پی اچ پی را در یک فایل جداگانه قرار می دهیم: function.php و قرار دادن آن بر روی سرور در دایرکتوری ریشه.

    و ایجاد یک فایل HTML که در آن برای ارسال یک عکس دانلود فرم: index.html

    upload.php - File Pandler
    نام \u003d "دکمه" - نام دکمه، هنگامی که شما کلیک کنید بر روی کدام تابع دانلود فایل به سرور شروع می شود

    بارگیری چندین فایل

    در حال حاضر ما مورد را تجزیه و تحلیل می کنیم زمانی که شما نیاز به دانلود چندین فایل به سرور.
    برای انجام این کار، ما در function.php فایل ها نیاز داریم update.php و index.html برخی از تغییرات را ایجاد کنید.





    شاید این همه چیزی است که شما باید خدمات را برای دانلود یک فایل کاربر به سرور (میزبانی وب) اجرا کنید.

    یکی دیگر از ویژگی های نزدیک به نزدیک به دانلود فایل های گرافیکی (عکس) یک تابع برای تغییر اندازه تصاویر است:

    فرم های چندگانه

    • Web Ierfaces از خدمات پستی که به شما این امکان را می دهد که یک برنامه را به نامه اضافه کنید (ضمیمه)، و برای این که ابتدا باید فایل را به سرور دانلود کنید، و تنها پس از آن می توان آن را به نامه اضافه کرد؛
    • گالری عکس های تعاملی و آلبوم های عکس که نمی توانند بدون مکانیسم دانلود فایل به سرور وجود داشته باشند؛
    • پورتال نرم افزار رایگان که برای مبادله فایل های برنامه های مختلف و غیره استفاده می شود

    دانلود یک فایل به یک سرور با استفاده از یکپارچه سازی چندگانه انجام می شود، که در آن یک فیلد بارگیری فایل وجود دارد. پارامتر Entocootpe نشان دهنده چندپارچه / فرم داده است:



    این به نظر می رسد مانند یک فرم چندگانه داده شده است که به نظر می رسد (شما می توانید سعی کنید به مشاهده نتیجه از فرم های چند مرحله ای، دانلود برخی از فایل های کوچک به سرور):

    فرم های چندگانه معمولا از روش انتقال پست استفاده می کنند. همانطور که از مثال قبلی دیده می شود، این فرم دارای دو فیلد است:

    • فیلد انتخاب فایل برای دانلود ;
    • زمینه مشخص کردن نام فایل که باید در سرور باشد .

    پردازش فرم چندگانه

    قبل از ادامه دادن به نوشتن یک اسکریپت پردازش چندگانه فرم، شما باید فایل پیکربندی را ویرایش کنید php.ini اجازه دانلود فایل ها را به سرور.

    فایل پیکربندی PHP php.ini دارای سه پارامتر مرتبط با دانلود فایل ها به سرور است:

    • file_uploads \u003d on - به شما اجازه می دهد فایل ها را به سرور از طریق پروتکل HTTP دانلود کنید.
    • upload_tmp_dir \u003d / tmp - دایرکتوری را به طور موقت ذخیره فایل های دانلود شده تنظیم می کند.
    • upload_max_filesize \u003d 2M - حداکثر مقدار فایل های دانلود شده را تنظیم می کند.

    اگر سرور وب شما اجرای سیستم عامل لینوکس را اجرا کند، باید سرویس را دوباره راه اندازی کنید:

    سرویس httpd restart

    چگونه PHP چند پاکت را دسته بندی می کند؟ پس از دریافت فایل، آن را در دایرکتوری موقت upload_tmp_dir ذخیره می کند، نام فایل به صورت تصادفی انتخاب شده است. سپس چهار متغیر یک آرایه Superglobal $ _FILES را ایجاد می کند. این آرایه حاوی اطلاعاتی در مورد فایل دانلود شده است.

    متغیرهایی که برای فایل های دانلود شده تعریف شده بستگی به نسخه PHP و پیکربندی فعلی دارد. آرایه Superglobal $ _Files از PHP 4.1.0 در دسترس است. در صورتی که دستورالعمل پیکربندی Register_Globals توسط ارزش تعیین می شود بر.علاوه بر این، متغیرهای نامیده می شود با نام های مناسب. شروع از نسخه 4.2.0، مقدار پیش فرض برای گزینه Register_Globals است خاموش کردن.

    محتویات آرایه $ _Files برای مثال ما در زیر آمده است. لطفا توجه داشته باشید که فرض شده است که از نام آپلودفایل برای فیلد انتخاب فایل استفاده کنید، مطابق با فرم چندگانه فوق. البته، نام این زمینه می تواند باشد.

    • $ _files ["uploadfile"] ["name"] - نام فایل قبل از ارسال آن به سرور، به عنوان مثال، pict.gif؛
    • $ _files ["uploadfile"] ["size"] - اندازه فایل دریافت شده در بایت؛
    • $ _FILES ["uploadfile"] ["نوع"] - نوع MIME فایل دریافت شده (اگر مرورگر قادر به تعیین آن بود)، به عنوان مثال: تصویر / GIF، تصویر / PNG، تصویر / JPEG، متن / HTML؛
    • (بنابراین ما فیلد دانلود فایل را نام بردیم) - شامل نام فایل در دایرکتوری موقت، به عنوان مثال: / TMP / PHPV3B3QY؛
    • $ _files ["uploadfile"] ["خطا"] -یک کد خطا که ممکن است زمانی رخ دهد که فایل بارگیری شود. کلید ["خطا"] این به PHP 4.2.0 اضافه شد. با کدهای خطا مناسب، می توانید خودتان را آشنا کنید

    پس از اتمام اسکریپت، فایل موقت حذف خواهد شد. این به این معنی است که ما باید آن را به مکان دیگری کپی کنیم تا زمانی که اسکریپت تکمیل شود. به عبارت دیگر، الگوریتم برای سناریوی کار دانلود فایل به سرور عبارت است از:

    اگر دکمه "Submit" فشار داده شود، فایل قبلا به سرور دانلود می شود و نام آن در $ _files ["uploadfile"] ["uploadfile"] متغیر است. در این مورد، اسکریپت باید بلافاصله فایل را به نام کپی کند $ _files ["uploadfile"] ["tmp_name"] به برخی کاتالوگ (شما باید به این دایرکتوری بنویسید).

    کپی کردن فایل توسط تابع انجام می شود کپی 🀄 () :

    فقط از کپی () کپی () کپی () استفاده نکنید، زیرا:

    • فایل موقت به صورت خودکار حذف خواهد شد
    • اگر یک دایرکتوری موقت در رسانه های دیگر باشد، یک پیام خطا نمایش داده خواهد شد.

    فرض کنید ما نیاز به دانلود فایل به دایرکتوری آپلود، که در دایرکتوری ریشه سرور وب (در دایرکتوری DocumentRoot) واقع شده است.

    // فقط در مورد، یک دایرکتوری ایجاد کنید. اگر او قبلا ایجاد شده است،
    // پیام خطا ما نمی بینیم، زیرا ما از اپراتور @ استفاده خواهیم کرد:

    mkdir ("آپلود"، 0777)؛

    // کپی فایل از / tmp در آپلود
    // نام فایل همانند ارسال به سرور خواهد بود:

    کپی ($ _ فایل ها ["uploadfile"] ["tmp_name"]، "آپلود /". baseName ($ _ فایل ها ["uploadfile"] ["نام"]))؛

    در لینوکس، همه چیز بسیار پیچیده تر است - ما باید حقوق دسترسی به کاتالوگ آپلود را در نظر بگیریم. به احتمال زیاد، در این مورد، عملکرد mkdir () این کار نخواهد کرد، زیرا ما حق نداریم به دایرکتوری DocumentSoot (معمولا / var / www / html یا / httam / httm / html / html) را نداشته باشیم. ثبت نام به عنوان یک سیستم ریشه، یک دایرکتوری آپلود ایجاد کنید و مالک آن را تغییر دهید و حقوق دسترسی به آن را به شرح زیر تغییر دهید:

    // ایجاد کاتالوگ آپلود

    // نام صاحب آپاچی و گروه آن را نصب کنید - همچنین آپاچی:

    apache chench: آپلود آپاچی

    // رزولوشن نوشتن برای همه (777) + نصب بیت ثابت (1):

    chmod 1777 آپلود

    اندازه فایل را می توان محدود، اگر شما می خواهید، شما می توانید فایل .htaccess را ویرایش کرده و دسترسی به دایرکتوری آپلود را محدود کنید - مشخص کنید یا کاربران خاصی که می توانند به دایرکتوری دسترسی داشته باشند یا آدرس های IP را به دست آورند.

    حالا شما می توانید فایل ها را به سرور آپلود کنید.

    ما PHP Script را دانلود فایل ها به سرور می نویسیم


    // کاتالوگ که ما فایل را دریافت خواهیم کرد:
    $ uploaddir \u003d "./files/"؛
    $ uploadfile \u003d $ uploaddir. BaseName ($ _Files ["uploadfile"] ["نام"])؛

    // فایل را از دایرکتوری برای ذخیره سازی فایل موقت کپی کنید:
    اگر (کپی ($ _files ["uploadfile"] ["tmp_name"]، $ uploadfile))
    {
    اکو "

    این فایل با موفقیت به سرور دانلود می شود.

    " ;
    }
    دیگر (echo "

    خطا فایل را به سرور دانلود نکردید!

    "
    ؛ خروج؛ )

    // نمایش اطلاعات در مورد فایل دانلود شده:
    اکو "

    اطلاعات در مورد فایل بارگذاری شده بر روی سرور:

    "
    ;
    اکو "

    نام اصلی فایل دانلود شده: ". $ _FILES ["uploadfile"] ["نام"]. "

    " ;
    اکو "

    نوع MIME فایل دانلود شده: ". $ _FILES ["uploadfile"] ["نوع"]. "

    " ;
    اکو "

    اندازه فایل بارگذاری شده در بایت: ". $ _files ["اندازه"] ["اندازه"]. "

    " ;
    اکو "

    نام پرونده موقت: ". $ _files ["uploadfile"] ["tmp_name"]. "

    " ;

    ?>

    بارگیری چندین فایل را می توان با استفاده از، به عنوان مثال، مقادیر نام های مختلف برای برچسب ورودی اجرا کرد.

    این همچنین فراهم می کند که توانایی به طور خودکار اطلاعات به دست آوردن اطلاعات سازمان یافته به مجموعه ای از چندین فایل قابل دانلود به طور همزمان. برای پیاده سازی چنین فرصتی، از نحو داده های مشابه آرایه از فرم HTML به عنوان چندین فیلدهای انتخاب شده و کادر انتخاب استفاده کنید:


    ارسال این فایل ها:






    در صورتی که چنین فرم ارسال شده است، Arrays $ _FILES ["userfile"]، $ _files ["userfile"] ["name"]، و $ _FILES ["userfile"] ["size"] اولیه (در همان شیوه مانند $ http_post_files برای PHP 4.1.0 و نسخه های قبلی). اگر دستورالعمل پیکربندی Register_Globals توسط مقدار بر پایه تنظیم شود، متغیرهای مرتبط با آن نیز مقداردهی خواهند شد. هر یک از این متغیرها یک آرایه عددی شاخصی از مقادیر مربوطه برای فایل های دریافت شده خواهد بود.

    فرض کنید که فایل های /home/test/some.html و /home/test/file.bin دانلود شد. در این مورد، $ _files ["userfile"] ["userfile"] ["name"] value some.html و $ _files ["userfile"] متغیر ["name"] file.bin است. به طور مشابه، متغیر $ _files ["userfile"] ["size"] حاوی اندازه فایل some.html و غیره است.

    متغیرهای $ _files ["userfile"] ["نام"]، $ _files ["userfile"] ["tmp_name"]، $ _files ["userfile"] ["size"] و $ _Files ["userfile"] ["نوع"] نیز مقداردهی اولیه خواهد شد.

    نتیجه:

    همانطور که می بینید، سازماندهی فایل های دانلود را به سرور بسیار دشوار نیست. برای ارائه سطح لازم امنیتی، سخت تر است، زیرا بارگیری فایل ها به سرور می تواند توسط مهاجمان به سرور استفاده شود. نحوه ارائه سطح لازم امنیتی، کار با آپلود، مراجعه کنید.



    <<< Назад محتوا جلو \u003e\u003e\u003e
    هنوز سوالاتی وجود دارد یا چیزی غیر قابل درک است - به ما خوش آمدید