✅ WEB і WordPress новини, теми, плагіни. Тут ми ділимося порадами і кращими рішеннями для сайтів.

Як налаштувати сценарій PHP у Crontab для очищення кількох WordPress (баз даних) на одному сервері?

15

Якщо ви розміщуєте багато блогів WordPress на одному сервері, ви можете легко зробити це за допомогою наступного сценарію PHP. Я розмістив 6 веб-сайтів на одному VPS, тому замість того, щоб запускати сценарій очищення один за одним, я можу просто помістити його в crontab, щоб мені було легше.

По-перше, вам знадобиться щось подібне (зручні функції).

  set_time_limit(600);
  mysql_connect("localhost", "user", "password") or die(mysql_error());
                              
  function run_query($query) {
    echo $query;
    mysql_query($query) or die(mysql_error());
    echo " ***OK!*** n";
  }                                     

Set_time_limit (600) є лише запобіжним заходом на випадок, якщо він зависає (щоб ви могли безпечно помістити це в crontab ). Обов’язково замініть дані доступу до mysql. Функція run_query() надрукує запит і виконає його, якщо щось піде не так, загальний сценарій завершиться.

Тепер це найкраща частина, ви можете об’єднати кілька добре відомих і використовуваних SQL-запитів, щоб можна було виконати всі одночасно.

  function clean_wp($db_name, $table_prefix, $skipwp = false) {
    mysql_select_db($db_name);
 
    echo "Optimising $db_name... n";
    
    if (!$skipwp) {
      $query = "
        DELETE `a`, `b`, `c` FROM `{$table_prefix}terms` AS `a` 
        LEFT JOIN `{$table_prefix}term_taxonomy` AS `c` ON `a`.`term_id` = `c`.`term_id` 
        LEFT JOIN `{$table_prefix}term_relationships` AS `b` ON `b`.`term_taxonomy_id` = `c`.`term_taxonomy_id` 
        WHERE `c`.`taxonomy` = 'post_tag' AND `c`.`count` = 0";
  
      run_query($query);
      
      $query = "
        DELETE `a`, `b`, `c`
        FROM `{$table_prefix}posts` as `a`
        LEFT JOIN `{$table_prefix}term_relationships` as `b` ON (`a`. `ID` = `b`. `object_id`)        LEFT JOIN `{$table_prefix}postmeta` as `c` ON (`a`. `ID` = `c`. `post_id`)        WHERE `a`. `post_type` = 'revision' 
      ";
  
      run_query($query);
        
      $query = "
        DELETE FROM `{$table_prefix}commentmeta`
        WHERE `comment_id` NOT IN (         SELECT `comment_id`
          FROM `{$table_prefix}comments` 
        )
      ";
        
      run_query($query);
  
      $query = "
        DELETE FROM `{$table_prefix}commentmeta` 
        WHERE `meta_key` LIKE "%akismet%"
      ";
        
      run_query($query);  
  
      $query = "
        DELETE FROM `{$table_prefix}comments` 
        WHERE `comment_approved` <> 1
      ";
      
      run_query($query);
      
      $query = "
        DELETE FROM `{$table_prefix}posts` 
        WHERE `post_type` = "revision"
      ";
  
      run_query($query);
    }
 
    $alletabellen = mysql_query("SHOW TABLES");
 
    while($tabel = mysql_fetch_assoc($alletabellen))
    {
        foreach ($tabel as $db => $tabelnaam) 
        {
            $query = "REPAIR TABLE `$tabelnaam`";
            run_query($query);
            
            $query = "OPTIMIZE TABLE `$tabelnaam`";
            run_query($query);
        }
    }
    
    echo " --- Done!!! ---";
  }

Функція clean_wp приймає 3 параметри. Перше — це ім’я таблиці (тобто ви можете передати різні таблиці для різних блогів WordPress). Другий параметр визначає префікс таблиці wp, а за замовчуванням має бути wp_. Третій параметр визначає, чи є в цій таблиці блог wordpress, тож ви можете ігнорувати запити на очищення, пов’язані з wordpress, і виконувати лише загальні.

Запити SQL призначені для очищення кошика коментарів, незатверджених коментарів (будьте обережні з цим), версій. Загальні запити включають оптимізацію та ремонт. Тож ви зможете легко помістити це в crontab.

Джерело запису: helloacm.com

Цей веб -сайт використовує файли cookie, щоб покращити ваш досвід. Ми припустимо, що з цим все гаразд, але ви можете відмовитися, якщо захочете. Прийняти Читати далі