کلید غیررایگان
برای مشاهده تمامی محتوای کلید، می توانید آن را از لینک زیر خریداری نمایید :
خرید کلید (1000 تومان)
ساخت آپلودر (uploader) فایل برای آپلود فایل بر روی یک هاست دیگر (مثلا هاست دانلود)
همان طور که می دانید، اکثر سایت ها، یک هاست (host) معمولی دارند و یک هاست دانلود. در هاست معمولی، قالب سایت قرار داده می شود و پایگاه داده سایت و اطلاعات اصلی سایت در آن ذخیره هستند. اما در هاست دانلود، فایل های با حجم بالا، مثل عکس، فیلم، فایل های zip و ... ذخیره خواهند شد.
ما قبلا در کلید شماره 458 و کلید شماره 478 ، چگونگی آپلود (upload) فایل بر روی هاست را شرح دادیم، اما چنانچه بخواهیم فایل بر روی یک هاست دیگر (مثلا هاست دانلود) آپلود شود، قضیه کمی پیچیده تر خواهد بود.
در این حالت، کاربر باید در هاست معمولی، به وسیله یک فرم (form)، فایل را در کامپیوتر خود انتخاب کند و بعد از فشار دادن دکمه submit فرم، فایل به جای آن هاست معمولی، در هاست دانلود، آپلود شود.
در این مبحث قصد داریم که چگونگی ایجاد امکان آپلود بر روی یک هاست دیگر را شرح بدهیم. ساختار کدها را به ساده ترین شکل ممکن می نویسیم و توسعه آن را به عهده خود شما می گذاریم.
ساختار کلی به این صورت خواهد بود که در هاست معمولی، یک فایل با نام upload.php می سازیم که شامل یک فرم html است که توسط آن، کاربر، فایل مورد نظر خود برای آپلود را انتخاب کرده و سپس دکمه ای را فشار می دهد تا فایل آپلود شود. در همین صفحه، کدهایی وجود دارد که به یک صفحه php در هاست دانلود (همان هاست دیگر) ارجاع می دهد. آن صفحه را upload-to-host.php نامگذاری کرده ایم. صفحه upload-to-host.php ، فایل را دریافت کرده و بروی هاست دانلود بارگذاری می کند (آپلود می کند). بنابراین هاست معمولی، تنها نقش یک واسطه را خواهد داشت و عملا فایلی بر روی آن قرار نمی گیرد.
در کدها از کتابخانه curl برای PHP استفاده می شود. معمولا در هاست های واقعی، PHP دارای این کتابخانه است، اما چنانچه از یک شبیه ساز (مثل wamp server) بر روی کامپیوتر شخصی خود استفاده می کنید، باید استفاده از کتابخانه curl در آن را فعال کنید.
فایل upload.php در هاست معمولی :
کدهای فایل upload.php را به صورت زیر می نویسیم :
اکنون کدها را شرح می دهیم.
با کد HTML زیر، یک فرم ساخته ایم که در آن، کاربر، فایل مورد نظر خود برای آپلود را انتخاب می کند :
پس از آن، کدهای PHP پردازش فرم را داریم، یعنی تنها زمانی اجرا می شوند که کاربر بر روی دکمه ((آپلود فایل)) کلیک کرده باشد :
در خط زیر، باید آدرس فایل upload-to-host.php را تعیین کنیم (آدرس فایل در هاست دانلود، بنابراین آن را مطابق آدرس فایل بر روی هاست دانلود خود، تغییر بدهید) :
وقتی کاربر، فایل مورد نظر خود را انتخاب می کند، یک کپی موقت از آن در آدرسی از کامپیوتر وی ذخیره می شود. این آدرس در متغیر زیر ذخیره می شود :
پس بر اساس این آدرس، می توانیم به کپی موقت فایل دسترسی داشته و اطلاعات مورد نظرمان را از آن استخراج کنیم (جدا از آپلود فایل). به عنوان مثال، ما کدهایی را ذکر کرده ایم که در صورتی که فایل، یک عکس با پسوندهای رایج باشد، طول و عرض آن را به دست آوریم :
بنابراین شما می توانید برای انواع دیگر فایل ها (ویدئو و ...)، کدهای مورد نظر خود را بنویسید تا قبل از آپلود فایل، اطلاعات مورد نظرتان در مورد فایل را به دست آورید (تا مجبور نباشیم اطلاعات را از صفحه موجود در هاست دانلود دریافت کنیم، بلکه در همین مرحله اول، اطلاعات فایل را به دست می آوریم).
با کدهای زیر، اندازه فایل و نوع فایل (پسوند فایل) را به دست آورده ایم :
در یک آرایه (array)، اطلاعاتی که باید به صفحه موجود در هاست دانلود (صفحه upload-to-host.php) ارسال شوند را ذخیره می کنیم (تنها اطلاعات ضروری برای ذخیره فایل و سایر اطلاعات به دست آمده از فایل، می تواند در پایگاه داده ای در همین هاست معمولی ذخیره شود و نیازی به ارسال آنها به صفحه موجود در هاست دانلود نیست) :
original_file_name همان نام اصلی فایل است (تا اگر تمایل داشتید، انتخاب کنید که فایل با همان نام اصلی خود ذخیره شود، نه با نامی که برای آن انتخاب کرده ایم). asset_file_name ، نامی است که برای ذخیره فایل در هاست دانلود انتخاب کرده ایم (فایل با آن نام ذخیره خواهد شد).
با کدهای زیر، فایل و اطلاعات موجود در آرایه، به صفحه upload-to-host.php در هاست دانلود ارسال می شوند (آپلود فایل) :
صفحه upload-to-host.php در هاست دانلود را به گونه ای طراحی کرده ایم که اگر فایل به درستی آپلود شد (همیشه باید خطاهای احتمالی را در نظر گرفت)، عدد 1 را در خروجی چاپ کند (دقت کنید که بدون چارچوب HTML رایج برای صفحه ها). پس بر اساس آن می توانیم تشخیص بدهیم که فایل با موفقیت آپلود شده است یا خیر :
فایل upload-to-host.php در هاست دیگر (هاست دانلود) :
کدهای فایل upload-to-host.php را به صورت زیر می نویسیم :
مشاهده می کنید که تنها کد PHP است و چارچوب HTML را ذکر نکرده ایم تا در پاسخ خروجی، تداخلی ایجاد نکند (در صورت موفقیت در آپلود، تنها عدد 1 را در خروجی داشته باشیم).
با کد زیر، مسیر ذخیره فایل ها را برابر همان پوشه ای در نظر گرفته ایم که فایل upload-to-host.php در آن قرار گرفته :
اکنون چنانچه بخواهیم در پوشه ای با نام upload ، فایل های آپلود شده، ذخیره شوند، آن خط از کدها را به صورت زیر تغییر می دهیم :
یکی از موارد امنیتی که هنگام ساخت صفحه آپلود (upload) باید در نظر گرفته شود، فایل های مجاز برای آپلود می باشد (از نظر پسوند فایل). یعنی مثلا کاربر نباید بتواند یک فایل php را در سایت آپلود کند، زیرا در غیر این صورت، یک هکر می تواند فایل php حاوی کدهای مخرب را آپلود کرده و سپس آدرس آن فایل را در مرورگر اینترنت خود اجرا نماید. بنابراین می توانید شرط های مورد نظر خود برای پسوندهای مجاز برای فایل ها را اعمال نمایید.
سلام
ممنون از کد خوبتون
امکانش هست روش محدود کردن فایل های مجاز برای آپلود رو هم بهش اضافه کنید؟ ممنون میشم
سلام.
در کدها، پسوند فایل را به دست آورده ایم که در متغیری با نام file_extension ذخیره شده است.
بنابراین اکنون نام پسوندهای مجاز برای فایل را در یک آرایه ذخیره می کنیم (آرایه ای با نام allowed_extensions) و سپس بخش مربوط به آپلود شدن فایل در کدها را باید بر اساس مجاز یا غیرمجاز بودن پسوند فایل، به شکل کلی زیر بازنویسی کنیم :
تابع in_array برای چک کردن وجود یک مقدار در یک آرایه به کار می رود، بنابراین شرط if در کد بالا، چک می کند که آیا پسوند فایل (file_extension) در آرایه allowed_extensions وجود دارد یا نه. اگر وجود دارد، بخشی از کد که مربوط به آپلود فایل است را اجرا می کنیم و اگر وجود ندارد، یک پیام را به کاربر نمایش می دهیم و تذکر می دهیم که پسوند فایل، غیرمجاز بوده است.
شما باید پسوندهای مورد نظر خود را که مجاز می دانید، در آرایه مورد نظر بنویسید.