مشكلة: كود PHP واحد يشغل 8 كور في CPU و 30 جيغا في الرام

السلام عليكم

لدي VPS بالمواصفات التالية

CPU 8 vCPU Cores
RAM 30 GB RAM
STORAGE 200 GB NVMe or 800 GB SSD

ركبت عليه موقع وردبريس ، انشأت كود يقوم بانشاء مقالات برمجيا باستخدام دالة wp_insert_post

المشكلة عندما اشغل الكود بشكل متكرر يتم اشغال جميع ال CPU و الرام ، ويسقط الموقع لثوان

الكود


حاول ألا تقوم بتنفيذ الكود بشكل متكرر بدون تحديد جيد للوقت الزمني بين التنفيذات، أيضًا حاول تحسين الكود لاستخدام الاستدعاءات البعيدة بشكل أكثر فعالية بحيث لا تؤدي إلى استهلاك موارد كبير، ففي الكود الحالي، يتم استدعاؤها في كل مرة تتم فيها المشاركة، حاول استدعائها مرة واحدة في بداية الكود.

بالإضافة إلى أنه يتم استدعاء قاعدة البيانات عدة مرات في الكود، عليك تقليل عدد الاستدعاءات بتخزين البيانات المطلوبة في متغيرات محلية واستخدامها.

وإن كان لديك تحميل ملفات كبيرة بشكل متكرر، تستطيع تحسين عمليات التخزين لتقليل الضغط على الخادم، مع استخدم أدوات مراقبة الأداء لفهم كيفية استهلاك الموارد والبحث عن النقاط التي تحتاج إلى تحسين.

حاول استخدام الكود التالي وانظر إذا ما تم حل المشكلة:

<?php
  /* Template Name: posts receive Template */


ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
error_reporting(E_ALL);


header("Access-Control-Allow-Origin: https://domain.net");
header("Access-Control-Allow-Methods: GET, POST");
header("Access-Control-Allow-Headers: Content-Type");


// التأكد من أن هذا طلب POST
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // قم بتضمين ملف wp-config.php بدلاً من wp-load.php و wp-blog-header.php لتحسين الأداء
    require_once('/www/wwwroot/test.domain.net/wp-config.php');


    // قم بتضمين مكتبات WordPress
    require_once(ABSPATH . 'wp-includes/functions.php');
    require_once(ABSPATH . 'wp-includes/load.php');
    require_once(ABSPATH . 'wp-includes/post.php');
    require_once(ABSPATH . 'wp-includes/category.php');
    require_once(ABSPATH . 'wp-includes/media.php');


    // تجميع البيانات من الطلب POST مباشرة بدلاً من استخدام متغيرات متوسطة
    $fileLink = sanitize_text_field($_POST['file_link']);
    $post_title = sanitize_text_field($_POST['post_title']);
    $post_content = wp_kses_post($_POST['post_content']);
    $post_category = sanitize_text_field($_POST['post_category']);
    $folderName = sanitize_text_field($_POST['post_folderName']);


    if (!empty($post_title) && !empty($post_content)) {
        // قم بالتحقق من وجود عنوان المشاركة باستخدام WP_Query بدلاً من قاعدة البيانات المخصصة
        $post_exists = new WP_Query(array(
            'post_type' => 'post',
            'post_title' => $post_title,
        ));


        if ($post_exists->have_posts()) {
            // المشاركة موجودة بالفعل
            $response = array(
                'status' => 'already exists',
                'message' => 'A post with the same title already exists.',
            );
        } else {
            // استخدم wp_insert_post لإنشاء المشاركة
            $post_data = array(
                'post_title' => $post_title,
                'post_content' => $post_content,
                'post_status' => 'pending',
            );


            $post_id = wp_insert_post($post_data);


            // قم بإنشاء المرفق وتعيينه كصورة مميزة
            if ($post_id) {
                set_featured_image_from_external_url($fileLink, $post_id);


                // حدث الـ SEO مثل rank_math_focus_keyword إذا كنت بحاجة
                update_post_meta($post_id, 'rank_math_focus_keyword', strtolower(get_the_title($post_id)));


                $response = array(
                    'status' => 'success',
                    'message' => 'Draft post created successfully. Post ID: ' . $post_id,
                );
            } else {
                $response = array(
                    'status' => 'error',
                    'message' => 'Error creating draft post.',
                );
            }
        }
    } else {
        $response = array(
            'status' => 'error',
            'message' => 'Missing or empty fields in the POST request.',
        );
    }


    header('Content-Type: application/json');
    echo json_encode($response);
}


// تحسين دالة تعيين الصورة المميزة
function set_featured_image_from_external_url($url, $post_id) {
    $image_data = file_get_contents($url);
    $file = wp_upload_bits(basename($url), null, $image_data);
    
    if ($file['error'] === false) {
        $file_path = $file['file'];
        $file_name = basename($file_path);
        $attachment = array(
            'post_mime_type' => wp_check_filetype($file_name)['type'],
            'post_title' => sanitize_file_name($file_name),
            'post_content' => '',
            'post_status' => 'inherit',
        );
        $attach_id = wp_insert_attachment($attachment, $file_path, $post_id);
        require_once(ABSPATH . 'wp-admin/includes/image.php');
        $attach_data = wp_generate_attachment_metadata($attach_id, $file_path);
        wp_update_attachment_metadata($attach_id, $attach_data);
        set_post_thumbnail($post_id, $attach_id);
        
        return $attach_id;
    } else {
        return 0; // يمكنك تعديل هذا الجزء وفقًا لاحتياجاتك
    }
}

شكرا على ردك، جربت الكود ووجدت به بعض العيوب

$post_exists في تعديلك لا تعطي نتيجة صحيحة ، هي تقول أن العنوان موجود، لكن عندما اتحقق اجد انها حددث مقالا بعنوان اخر

ثم

set_featured_image_from_external_url تقوم بحفظ صورة فارغة وليس الصورة التي ارسل رابطها

@Mustafa_Suleiman وجدت ان المشكلة تحدث فقط عند ارسال كود html يحتوي على attribute مثل  style="text-align: center;" ، اما في لحالات الأخرى فهو يعمل عندي بشكل جيد