اتصال هاست دانلود به رسانه های وردپرس و امنیت فایل در ووکامرس و EDD

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

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

خرید افزونه اتصال رسانه وردپرس به هاست دانلود

سرفصل های محتوا

     

    رسانه های وردپرس در پایگاه داده

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

    نمایش شناسه رسانه وردپرس در مرورگر

    در حالت عادی رسانه های وردپرس در شاخه ی wp-content/uploads قرار دارد، برای دستیابی به آدرس پایه ریشه رسانه های وردپرس می توانیم از تابع wp_get_upload_dir استفاده کنیم:

    $wp_uploads = wp_get_upload_dir();
    echo $wp_uploads['baseurl'];

    با فرض اینکه آدرس سایت وردپرسی شما realwp.net باشد ، خروجی تابع بالا آدرس شاخه ی اصلی رسانه های وردپرس https://realwp.net/wp-content/uploads می باشد.

    پارامتر های اصلی رسانه های وردپرس

    هر رسانه در وردپرس دارای سه پارامتر اصلی می باشد که این پارامتر ها مبنای اصلی اتصال هاست دانلود به وردپرس می باشد. بعد از اینکه یک رسانه را در وردپرس آپلود می کنید دو پست متا (Post Meta) در جدول wp_postmeta پدیدار می شود:

    آدرس نسبی (Relative Path) رسانه وردپرس

    پست متا _wp_attached_file که آدرس فایل را در پوشه رسانه های وردپرس مشخص می کند.همان طور که می دانید در حالت عادی وردپرس پرونده رسانه ها را بصورت سالانه  و ماهانه در فولدر های جداگانه قرار میدهد. حال اگر شما یک فایل به نام mehrshad.jpg را در سال 2022 و در ماه پنجم آپلود کنید. مقدار پست متا برای این فایل برابر می شود با:

    2022/05/mehrshad.jpg

    جزئیات فایل (Meta Data) رسانه های وردپرس

    در یک تقسیم بندی ساده ، در هسته ی وردپرس رسانه ها به 4 نوع فایل تقسیم بندی شده اند:

    1. ویدیو (Video)
    2. صوت (Audio)
    3. تصویر (Image)
    4. فایل های دیگر که لیست پسوند های مجاز برای آپلود در وردپرس را در تابعی به نام wp_get_mime_types لیست شده اند. در این تابع یک فیلتر به نام upload_mimes وجود دارد که شما میتوانید آپلود یک سری فایل ها با پسوند خاص را ممنوع کنید و یا حتی Mime Type های جدید به آن اضافه کنید. که در استارتاپ ها خیلی میتونه امنیت رو بالا ببره.

    پست متا _wp_attachment_metadata شامل جزئیاتی در مورد فایل مورد نظر با توجه به تقسیم بندی که در بالا به آن اشاره شده هست. برای فایل های ویدیو اطلاعاتی شامل width یا height ویدیو مورد نظر قرار دارد ، برای فایل صوتی اطلاعاتی همچون مدت زمان فایل صوتی یا نام Artist و .. قرار دارد که تماما این اطلاعات توسط کلاس PHP به نام getID3 خروجی داده می شود که یکی از پکیج های معتبر بین برنامه نویس ها هست.

    همان طور که می دانید بعد از آپلود یک فایل تصویر در وردپرس ، بصورت اتوماتیک وردپرس با توجه به Image Size هایی که در آن تعریف شده است آن عکس را برش (Crop) می کند و فایل های آن را ایجاد می کند، برای فایل های تصویر در پست متا _wp_attachment_metadata  لیست تمامی Image Size ها به شکل آرایه قرار دارد تا شما بتوانید بفهمید برای هر فایل تصویر چند فایل دیگر ایجاد شده است در پوشه رسانه های وردپرس.

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

    با داشتن شناسه ی یک رسانه در وردپرس به راحتی میتوان نوع فایل و اینکه در چه محتوایی از وردپرس بارگزاری شده است را توسط پارامتر های جدول posts متوجه شد ، فرض کنید که یک تصویر در وردپرس داریم با شناسه 1200 حال توسط تابع get_post براحتی نوع mime type فایل را در جدول بدست میاوریم:

    $attachment = get_post(1200);
    echo $attachment->post_mime_type;
    echo $attachment->post_parent;

    در خط دوم نوع فایل (Mime Type) رسانه ی وردپرس و در خط سوم شناسه مطلبی که این فایل در آن بارگزاری شده است خروجی داده می شود.

    بازنشانی لینک رسانه ها برای اتصال هاست دانلود به وردپرس

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

    دریافت لینک رسانه وردپرس با داشتن شناسه فایل

    تابع wp_get_attachment_url به شما این امکان را می دهد که با قرار دادن ID یک رسانه ، آدرس لینک دانلود فایل را در اختیار شما قرار می دهد ، با توجه به مثال بالای ما اگر فایل mehrshad.jpg شناسه آن 1200 باشد خواهیم داشت:

    $attachment_url = wp_get_attachment_url(1200);
    echo $attachment_url;

    خروجی دستور بالا آدرس کامل رسانه وردپرس می باشد:

    http://example.com/wp-content/uploads/2022/05/mehrshad.jpg

    دریافت لینک تصاویر وردپرس در یک سایز خاص

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

    $attachment = wp_get_attachment_image_src( 1200, 'thumbnail' );
    echo $attachment[0];

    در کد بالا ما سایز thumbnail را برای عکس با شناسه 1200 درخواست کردیم که خروجی آن لینک زیر میشود:

    http://example.com/wp-content/uploads/2022/05/mehrshad-150x150.jpg

    فیلتر تغییر آدرس هاست دانلود در رسانه های وردپرس

    یک هوک وردپرس (WordPress Hook) در تابع دریافت آدرس رسانه های وردپرس وجود دارد که ما می توانیم این تغییر آدرس هاست دانلود را در رسانه های وردپرس براحتی انجام دهیم:

    فیلتر تغییر آدرس رسانه های وردپرس به هاست دانلود

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

    در این هوک هم آدرس تصویر در وردپرس ارائه می شود و هم شناسه رسانه وردپرس که می توانیم با داشتن پارامتر های اصلی این رسانه، تغییر آدرس را براحتی انجام دهیم:

    add_filter( 'wp_get_attachment_url', 'change_url_wordpress_attachment', 10, 2 );
    function change_url_wordpress_attachment($url, $post_id) {
    	$wordpress_url = get_site_url(null);
    	$vitualHost_url = 'http://dl.example.com';
    	return str_ireplace($wordpress_url, $vitualHost_url, $url);
    }

    در فیلتر بالا ما بجای آدرس اصلی سایت وردپرس خود که example.com هست عبارت dl.example.com که همان آدرس هاست دانلود می باشد را جایگزین کرده ایم و این تغییرات بر روی همه ی رسانه ها اعمال می شود.
    با توجه به اینکه در فیلتر بالا ما به شناسه رسانه دسترسی داریم ، پس می توانیم هر گونه شرطی را بر روی آن اعمال کنیم مثلا اگر میخواهیم تنها ویدیو های سایت وردپرسی از هاست دانلود فرخوانی شود خواهیم داشت:

    add_filter( 'wp_get_attachment_url', 'change_url_wordpress_attachment', 10, 2 );
    function change_url_wordpress_attachment($url, $post_id) {
    	$attachment = get_post($post_id);
    	$mimeType = $attachment->post_mime_type;
    	if(!in_array($mimeType, array('video/mpeg', 'video/mp4'))) {
    		return $url;
    	}
    	
    	$wordpress_url = get_site_url(null);
    	$vitualHost_url = 'http://dl.example.com';
    	return str_ireplace($wordpress_url, $vitualHost_url, $url);
    }

    عملیات اجرایی روی رسانه های وردپرس در هاست دانلود

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

    بطور کلی دو راه حل جامع برای این کار وجود دارد:

    1. استفاده از بستر FTP برای ارتباط هاست دانلود با وردپرس که افزونه هایی همچون hacklog-remote-attachment یا upload to FTP از این روش استفاده می کنند.استفاده از این روش کاملا غیر استاندارد می باشد زیرا بستر FTP قابلیت های کافی به توابع PHP نمی دهد که بتواند هم سرعت و امنیت که دو پارامتر اصلی هستند را برقرار کنند.
    2. برنامه نویسی یک REST API برای پل ارتباطی بین هاست دانلود و هسته ی وردپرس بدین صورت که یک فایل به نام wordpress.php در هاست دانلود قرار میگیرد و هسته ی وردپرس عملیات را سمت این فایل ارسال می کند و این فایل بعد از اجرای آن عملیات نتیجه را به وردپرس بر میگرداند. این روش کاملا استاندارد می باشد.

    با توجه به سیاست هاست های دانلود امکان ایجاد دیتابیس در این هاست وجود ندارد به همین دلیل همیشه میبایست نقطه ی مشترک برای انتخاب فایل وردپرس در اجرای عملیات را مسیر داخلی رسانه در شاخه ی uploads در نظر بگیرید.

    حتما بخوانید : چگونه در REST API وردپرس ، دسترسی Token برای گسترش استارتاپ ایجاد کنیم ؟

    حذف رسانه ی وردپرس در هاست دانلود

    در زمان حذف یک رسانه در وردپرس تابع wp_delete_attachment اجرا می شود ، این تابع شناسه ی رسانه ی وردپرس را دریافت می کند ، سپس آن فایل را کاملا حذف می کند.از آن جایی که فایل ما در هاست دانلود قرار دارد ما می توانیم توسط هوک وردپرس در زمان حذف رسانه وردپرس ، دستور آن را سمت هاست دانلود توسط HTTP API های وردپرس ارسال کنیم.

    هوک وردپرس در زمان حذف یک رسانه وردپرس

    با توجه به اینکه شناسه ی رسانه ی وردپرس را در این هوک داریم ، ابتدا آدرس داخلی فایل را در پوشه uploads وردپرس بدست میاوریم:

    add_action('delete_attachment', 'remove_attachment_in_virtualhost', 10, 2);
    function remove_attachment_in_virtualhost($attachment_id, $post)
    {
        $file_path = get_post_meta($attachment_id, '_wp_attached_file', true);
        $token = 'xxxxx';
        $virtualHost_url = 'http://dl.example.com';
    
        // Send Request
        $request = wp_remote_get(
            $virtualHost_url . '/wordpress.php',
            array(
                'headers' => array('Content-Type' => 'application/json; charset=utf-8'),
                'timeout' => 120,
                'body' => array(
                    'method' => 'delete_attachment', 
                    'path' => $file_path
                ),
                'method' => 'GET',
                'headers' => array(
                    'Authorization' => $token,
                )
            ));
    
        // Check Connect Error
        if (is_wp_error($request)) {
            return false;
        }
    
        // Get Body Of Request
        $body = wp_remote_retrieve_body($request);
        $array = json_decode($body, true);
    }

    توجه کنید برای امنیت درخواست ها بین هاست دانلود و وردپرس ما یک توکن مخفیانه ایجاد می کنیم.در هوک بالا ابتدا آدرس فایل دریافت می شود، سپس آدرس آن توسط تابع wp_remote_get به هاست دانلود درخواست داده می شود و عملیات انجام می شود.مشابه همین رویکرد را میتوانید برای آپلود فایل در هاست دانلود و … انجام دهید.

    هاست دانلود برای ووکامرس

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

    تغییر حق دسترسی فایل ها در هاست دانلود

    بعد از انتقال فایل های ووکامرس به هاست دانلود، این فایل از طریق آدرس (Mirror Link) کاملا قابل دسترس هستند و اگر شخصی به این آدرس ها دست پیدا کند به رایگان می تواند تمامی آن فایل ها را دانلود کند. برای جلوگیری از این کار شما می بایست بعد از انتقال فایل ها به هاست دانلود حق دسترسی یا Permission فایل ها را برای عموم ببندید تا نتوانند از طریق لینک مستقیم فایل ها را دانلود کنند این کار را می توانید با توجه به نوع کنترل پنل هاست خود انجام دهید.

    تعییر حق دسترسی فایل ها در Cpanel

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

    ایجاد لینک دانلود امن ووکامرس در هاست دانلود

    ما می توانیم برای فایل های ووکامرس یک آدرس اختصاصی سمت هاست دانلود ایجاد کنیم ، از آن جایی که لینک مستقیم فایل دیگر در دسترس نیست. میتوانیم وظیفه استریم Stream کردن فایل ها را به فایل wordpress.php از طریق REST API بسپاریم. اما دقت کنید که حتما می بایست توکن اختصاصی بین وردپرس و هاست دانلود ایجاد شود تا امنیت حفظ شود.

    در هسته ی ووکامرس یک فیلتر به نام woocommerce_download_product_filepath در کلاس WC_Download_Handler وجود دارد که میتوانیم آدرس نهایی دانلود شدن فایل را برای ووکامرس تعیین کنیم. ما توسط این هوک ابتدا بررسی میکنیم اگر آدرس فایل سمت هاست دانلود بود برای ما یک آدرس اختصاصی ایجاد کند و کاربر را به آن هدایت کند.

    add_filter('woocommerce_download_product_filepath', 'change_download_link_woocommerce', 10, 5);
    function change_download_link_woocommerce($url, $email_address, $order, $product, $download){
        $virtualUrl = 'http://dl.example.com';
        
        // Check Link is From virtual Host
        if (stristr($url, $virtualUrl) != false) {
            // Get Path
            $path = trim(str_ireplace($virtualUrl, "", $url), "/");
            // Generate Token
            $token = 'xxxx';
            // Generate Download Link
            $_download_link = $virtualUrl.'/wordpress.php?method=download_file&token='.$token.'&path='.$path;
            // Return Download Link
            return $_download_link;
        }
        
        // Return Variable
        return $url;
    }

    هاست دانلود برای افزونه فروش فایل Easy Digital Downloads

    افزونه EDD یکی دیگر از افزونه های فروش فایل محبوب در سیستم مدیریت محتوای وردپرس هست. برای این که بتوانیم هاست دانلود را به افزونه EDD متصل کنیم مشابه افزونه ووکامرس ابتدا حق دسترسی فایل ها را برای دسترسی عموم کاملا می بندیم.سپس توسط هوک وردپرس edd_process_verified_download  که دقیقا قبل از شروع عملیات دانلود یک فایل توسط کاربر هست میتوانیم تغییر لینک در هاست دانلود را برای کاربر انجام دهیم.
    دقت کنید زمانی که این هوک اجرا می شود عملیات اعتبار سازی کاملا توسط افزونه EDD بررسی شده است و کاربر عادی نمیتواند به فایل ها دسترسی داشته باشد.

    add_action('edd_process_verified_download', array($this, 'edd_process_verified_download'), 9, 4);
    function change_download_link_edd($download_id, $email, $payment_id, $args){
        $virtualUrl = 'http://dl.example.com';
        
        // Get File Path
        $download_files = edd_get_download_files($args['download']);
        $requested_file = isset($download_files[$args['file_key']]['file']) ? $download_files[$args['file_key']]['file'] : '';
    
        // Check Empty File
        if (empty($requested_file)) {
            return null;
        }
    
        // Check Link is From virtual Host
        if (stristr($requested_file, $virtualUrl) != false) {
            $path = trim(str_ireplace($virtualUrl, "", $requested_file), "/");
            $token = 'xxxx';
            $_download_link = $virtualUrl.'/wordpress.php?method=download_file&token='.$token.'&path='.$path;
    
            // Redirect Download Link
            header('Location: ' . $_download_link);
            exit;
        }
    }

    برای اتصال استارتاپ وردپرس خود به هاست دانلود می توانید با تیم پشتیبانی وردپرس واقعی تماس بگیرید.

    مطلب رو به اشتراک بگذارید
    دیدگاه خود را بنویسید
    در بحث‌‌ پیرامون این مقاله شرکت کنید!
      سرویس ها و خدمات وردپرس

      اتصال استاندارد رسانه های وردپرس ، فایل های ووکامرس و EDD به هاست دانلود

      افزایش هشتاد درصدی سرعت وب سایت های وردپرس با اتصال تصاویر ، ویدیو ، صوت و فایل های فروشگاه ووکامرس و Easy Digital Downloads به هاست دانلود با قابلیت تغییر لینک اتوماتیک رسانه ها در محتوا و محافظ از سرقت فایل فروشی
      ۸۰۰,۰۰۰ ۴۹۳,۰۰۰ تومان

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

      اتصال دو طرفه بخش انبارداری یا محصولات ، مشتریان و فاکتور های نرم افزار حسابداری هلو با افزونه فروشگاه ساز ووکامرس ، همراه با قابلیت بروزرسانی هماهنگ موجودی ها و قیمت های محصول ، ایجاد فاکتور های اتوماتیک به نام مشتریان وردپرس در نرم افزار حسابداری
      ۱,۰۰۰,۰۰۰ ۶۹۷,۰۰۰ تومان