آپلود فایل بر روی گوگل درایو به وسیله ی PHP

این اموزش رو به خاطر درخواست یکی از دوستان عزیز بازدید کننده میزاریم , در اینجا میخوایم نحوه ی اپلود فایل ها بر روی گوگل درایو با استفاده از PHP رو براتون شرح بدیم. میتونید پیش نمایش چیزی که در انتها میزاریم رو از اینجا(کلیک کنید) ببینید همچنین میتونید کدها رو از انتهای همین اموزش دانلود کنید و استفاده کنید. ببخشید سرم انقدر این روزا شلوغ هست که وقت نشد گرافیک خوشکلی براش طراحی کنم 😐

اگه درون گوگل حساب کاربری دارید میتونید از امکانات گوگل استفاده کنید 😀 یکی از این امکانات گوگل درایو است. گوگل درایو یک فضا بر روی اینترنت است که گوگل در اختیار شما قرار میده تا بتونید فایل های خودتون رو توش اپلود کنید. فرستادن فایل بر روی گوگل درایو یا همون اپلود کردن فایل رو میشه با PHP نیز انجام داد. فایده ی این کار چیه؟

شما میتونید یک اسکریپت یا برنامه به زبان PHP بنویسید که روزانه از فایل های شما بکاپ بگیره و روی گوگل درایو قرار بده! یا اینکه اگه سایت دارید و فضای سرور شما کم هست میتونید از گوگل درایو کمک بگیرید و فایل های خودتون رو روی گوگل درایو قرار بدید , این کار بیشتر برای سایت هایی که فایل های مالتی مدیا مثل موزیک یا فیلم دارن مفید است. خب دیگه از توضیح پرهیز میکنیم و میریم که نحوه ی کار با گوگل درایو به همراه PHP رو توضیح بدیم , مراحل کار به صورت زیر خواهد بود:(دقت کنید گوگل ایران رو تحریم کرده و اگر صفحاتی گه میگیم براتون باز نشد باید از نرم افزارهایی برای رد کردن تحریم استفاده کنید تا بتوانید وارد صفحاتی که میگیم بشید.)

  • در ابتدا از این قسمت(کلیک کنید) یک پروژه ایجاد کنید یا یکی از پروژه های خودتون رو انتخاب کنید سپس بر روی دکمه ی continue کلیک کنید و به قسمت credentials برید. در صورتی که یک پروژه ایجاد میکنید مراحل زیر رو انجام بدید در غیر این صورت با انتخاب یکی از پروژه های موجود نیاز به مراحل زیر نیست :
  1. منو را بر روی create project قرار دهید(به صورت پیش فرض تنظیم شده است)
  2. اگر صفحه ای با عنوان Add credentials to your project برای شما باز شد بر روی cancel کلیک کنید.
  3. در اخر به قسمت credentials برید.

عمل هایی که در بالا برای ایجاد پروژه انجام دادید به صورت تصاویر زیر هستند:

بعد از ایجاد یا انتخاب پروژه صفحه ای جدید برای شما لود میشود که چیزی شبیه صفحه ی زیر خواهد بود:

  • در بالای صفحه بر روی تب OAuth consent screen کلیک کنید و اگر ادرس ایمیل و نام محصول (product name) برابر با چیزی که مورد نظر شما است نبود ان را تغییر داده و سپس دکمه ی save را بزنید تا ذخیره شود. چیزی شبیه تصویر زیر :

  • به تب Credentials و بر روی دکمه ی Create credentials کلیک کنید و OAuth client ID رو انتخاب کنید.

  • در صفحه ای که باز شد قسمت web application رو انتخاب کنید , با انتخاب شدن آن چند input برای شما ایجاد میشود که یکی مربوط به نام اپلیکیشن شماست و میتونید تغییرش بدید و نام دلخواه خودتون رو بنویسید. چند input دیگه وجود دارند که مربوط به لینک redirect است , فعلا به این قسمت ها دست نزنید و دکمه ی create رو بزنید تا یک OAuth client ID برای شما ایجاد بشه. سپس اگر دیالوگ باکس شبیه شکل زیر براتون باز شد دکمه ی ok اون رو بزنید.

  • حالا به قسمت dashboard برید و بر روی Enable API کلیک کنید و سپس از قسمت google aps API قسمت drive API را انتخاب کنید و در اخر دکمه ی enable را بزنید تا api گوگل درایو در پروژه ی شما فعالسازی شود , عملیاتی که گفته شد طبق تصاویر زیر هستند:

  • حالا دوباره به تب credentials برید و از لیستی که مربوط به OAuth client IDs Name است با توجه به نامی که در مرحله ی قبل انتخاب کرده بودید بر روی علامت دانلود کلیک کنید تا یک فایل به صورت json به شما داده بشه. این فایل رو دانلود کنید و سپس یک فولدر با نام دلخواه ایجاد کنید و این فایل رو به نام client_secret.json تغییر بدید و درون فولدری که ایجاد کردید قرار بدید.

  • حالا نیاز به کتابخونه ی google داریم تا بتونیم از امکاناتش استفاده کنیم. میتونید اخرین ورژن از اون اینجا(کلیک کنید) پیدا کنید و دانلود کنید. بعد از اینکه دانلودش کردید فایل های اون رو درون پوشه (فولدر) که در مرحله ی قبل ایجاد کردید از حالت زیپ خارج کنید. محتوای فایل چیزی شبیه تصویر زیر خواهد بود:

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

خب حالا میریم سراغ برنامه نویسی و استفاده از فایل هایی که تا الان دانلود کردیم 😀

از الان به بعد از دستوری که بنویسیم درون فایل upload_large_files.php قرار میگیره , این دستورات عمل اپلود کردن روی گوگل درایو رو انجام میدن , برای اپلود فایل بر روی گوگل درایو نیاز داریم به صورت مراحل زیر عمل کنیم:

۱- افزودن فایل های کتابخونه ی google به برنامه : شما برای اینکه بتونید از سرویس های گوگل استفاده کنید باید فایل autoload که در پوشه ی vendor قرار داره رو از کتابخونه ی google-api-php-client که دانلودش کردیم به صفحه خودتون اظافه کنید , چیزی شبیه کد زیر :

۲- ایجاد کردن کلاینت : کلاینت به عنوان کاربری شناخته میشه که میخواد از سرویس های گوگل استفاده کنه. برای ایجاد کلاینت خطوط زیر رو به کدمون اظافه میکنیم:

در دستورات بالا درون متغیر oauth_credentials ادرس فایل secret_client.json رو که از گوگل دانلود کردیم قرار میدیم. همچنین متغیر redirect_uri حاوی ادرسی خواهد بود که کاربران بعد از لاگین کردن در گوگل به اون صفحه برگردانده میشن. من در اینجا از php استفاده کردم تا ادرس همین صفحه ای که داریم توش کدنویسی میکنیم رو بدست بیارم و اون رو درون متغیر redirect_uri قرار بدم. شما اگه میدونید ادرس فایلتون توی سرور کجا هست میتونید ادرس دقیقش رو قرار بدید و دیگه از php استفاده نکنید (پردازش الکی انجام ندید). ادرس فایلی که میخواید بعد از لاگین کردن کاربران به اونجا ریدایرکت بشه (در اینجا فایلی که میخوایم بهش ریدایرکت بشه همون upload_large_files.php است) رو کپی کنید سپس طبق تصویر زیر در قسمت OAuth client IDs بر روی دکمه ی edit (شبیه یک مداد است و در کنار دکمه ای که برای دانلود فایل json استفاده کردید قرار دارد) کلیک کنید و ادرسی که کپی کردید رو در قسمت Authorized redirect URIs وارد کنید و save بزنید.

نکته : دقت کنید اگه فعلا روی localhost کار میکنید ادرسی که روی localhost هست رو در Authorized redirect URIs وارد کنید اما بعدا که فایل ها رو روی سرور قرار میدید ادرس رو با توجه به سرور باید دوباره تغییر بدید و ذخیره کنید.

۳- ایجاد کردن سرویس گوگل درایو : بعد از اینکه یک کلاینت ایجاد کردید با استفاده از این کلاینت میتونید از سرویس هایی که گوگل ارائه میده استفاده کنید. یکی از این سرویس ها گوگل درایو هست! برای استفاده از سرویس گوگل درایو باید ابتدا یک سرویس از نوع google drive ایجاد کنیم , کدهای ما به صورت زیر خواهند شد:

۴- ایجاد لینک لاگین برای کاربر و بررسی لاگین بودن در گوگل: حالا نیاز داریم تا client که در مرحله های قبل ایجاد کردیم رو درون گوگل لاگین کنیم. توسط متد createAuthUrl میتونیم یک لینک برای لاگین کردن یوزر ایجاد کنیم , بعد از اینکه کاربر بر روی لینک کلیک کنه و لاگین کنه دوباره به صفحه ای که الان توش هستیم برمیگرده و یک token توسط گوگل برای ما ارسال میشه که به وسیله ی اون میتونیم کارهای خودمون رو انجام بدیم. این token رو میگیرم و درون session قرار میدیم و سپس یه دستور redirect مینویسیم تا ادرس url درون مرورگر به ادرس پروژه ی ما تغییر کنه و token از درون نوار ادرس مرورگر نا پدید بشه.

۵- در مرحله ی اخر نیز کدهای مربوط به اپلود فایل رو مینویسیم: برای اپلود فایل باید از سرویس Google_Service_Drive_DriveFile برای ایجاد فایل و از Google_Http_MediaFileUpload برای اپلود فایل استفاده کنیم. به کدهای زیر دقت کنید:

در دستورات بالا من یک دکمه قرار دادم که وقتی روی اون کلیک کنید اپلود انجام میشه. این دکمه چون درون form قرار داره متد post رو ارسال میکنه و منم از if استفاده کردم تا وقتی که دکمه فشرده میشه عمل اپلود انجام بشه. شما میتونید از دکمه استفاده نکنید و یکراست اپلود رو انجام بدید. دقت کنید فایلی که قراره  اپلود بشه ادرسش درون متغیر testFile قرار میگیره , من در اینجا یک عکس با نام a.jpg رو اپلود میکنم اما شما میتونید هرچیزی که میخواید رو اپلود کنید.

بعد از اپلود شدن ادرس فایل که اپلود میشه به شما داده میشه میتونید روی اون کلیک کنید و فایل رو درون گوگل درایو ببینید 😀

مشکلات احتمالی و روش رفع ان:

مشکل فعال نبودن finfo و یافت نشدن تابع mime_content_type : دوستان عزیز دقت کنید من در اینجا برای مشخص کردن mime type فایل ها از تابع mime_content_type استفاده کردم , برای استفاده از این تابع باید finfo روی سرور شما فعال باشه. به صورت پیش فرض روی لوکال هاست finfo فعال نیست و شما نیاز دارید تا فایل php.ini رو باز کنید و extension=php_fileinfo.dll رو پیدا کنید و سمی کالن یا نقطه ویرگول اول اون رو حذف کرده و دوباره ذخیره کنید سپس وب سرور خودتون رو دوباره راه اندازی کنید تا مشکل رفع بشه, اگه نمیخواید از این تابع استفاده کنید میتونید نوع mime type رو به صورت دستی وارد کنید مثلا برای تصویری که jpg است به صورت image/jpeg خواهد بود.

مشکل خطای curl : ممکنه با خطایی به صورت زیر مواجه بشید

اگه با این خطا مواجه شدید برای رفع اون باید از اینجا(کلیک کنید) یا از انتهای همین پست فایل cacert.pem رو دانلود کنید از حالت فشرده خارج کنید سپس فایل cacert.pem را با توجه به محل نصب شدن وب سرور درون مسیری شبیه C:\xampp\php\extras\ssl\cacert.pem قرار بدید سپس به فایل php.ini برید و خط زیر را درون ان اظافه کنید , میتونید به انتهای فایل php.ini برید و اون رو در انتهای این فایل قرار بدید و ذخیره کنید و وب سرور رو دوباره راه اندازی کنید.

همچنین میتونید از روش بالا استفاده نکنید و با تغییر دادن کدهای خودتون مشکل رو رفع کنید:

کدها رو باید به صورت بالا در قسمت ایجاد کردن client درون فایل upload_large_files تغییر بدید.

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

منابعی که استفاده کردم به صورت لیست زیر هستند:

  1. صفحه رسمی گوگل برای استفاده از گوگل درایو
  2. لیست اخرین api گوگل برای دانلود
  3. نحوه فعالسازی fileinfo در xampp

دوستانی که مشکل یا سوال دارند از انتهای همین پست مطرح کنند تا بهشون پاسخ داده بشه. همچنین اگه ایده ای دارید میتونید اون رو پیاده سازی کنید و برای من ارسال کنید تا توی سایت با نام خودتون انتشار داده بشه. فقط دقت کنید ایده ها باید بزرگتر از چیزی باشن که به سادگی توی نت پیدا بشه 😀 چیزهای ناب بسازید!!!! موفق باشید.

برای دانلود سورس کد این اموزش به همراه کتابخونه ی google بر روی دکمه ی زیر کلیک کنید.

دانلود سورس کد این اموزش حجم حدود ۶٫۵ مگابایت است , حجم بالای فایل به خاطر کتابخونه ی google است.

فایل cacert برای رفع خطای ssl مربوط به curl
132.2 KiB
8 Downloads
اطلاعات بیشتر
به اشتراک بگذارید:Email this to someoneShare on FacebookTweet about this on TwitterShare on Google+Digg thisShare on LinkedInPin on PinterestShare on StumbleUponFlattr the authorShare on RedditBuffer this pageShare on TumblrPrint this pageShare on YummlyShare on VK
  1. مهران

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

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

    با سپاس از سایت و محتوای عالی سایت

  2. محمد

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

    • باید با PHP ابتدا فایل ها رو روی سایت خودتون انتقال بدید و سپس اپلود کنید. میتونید از لیچر استفاده کنید یا اینکه با استفاده از curl یه لیچر برای خودتون ایجاد کنید.

  3. سلام
    جالب بود
    مهندس میشه یک فایل رو از طریق لینک انتقال داد یعنی لینک رو بدیم مثلا بکاپ سایت رو انتقال بده سیستمم وردپرس نیست که بتونم از افزونه های اماده استفاده کرد از لاراول استفاده کردم

    • سلام بعله میشه فایل ها رو به صورت پارت به پارت ارسال کرد که حتی قابلیت resume هم داشته باشه.

        • باید فایل رو به تیکه های کوچیک تبدیل کرد بعد از طریق http یا url ارسال کرد. دریافت کننده نیز باید تیکه های دریافت شده رو به هم بچسبونه و ذخیره کنه. باید یکم با هدر های http کار کنید.

می‌خواهید دیدگاهتان را بیان کنید؟