✅ Notizie, temi, plugin WEB e WordPress. Qui condividiamo suggerimenti e le migliori soluzioni per siti web.

Come impostare uno script PHP in Crontab per pulire più WordPress (database) sullo stesso server?

24

Se ospiti molti blog wordpress sullo stesso server, puoi farlo facilmente con il seguente script PHP. Ho ospitato 6 siti Web su un VPS, quindi invece di avviare uno script di pulizia uno per uno, posso semplicemente inserirlo nel crontab, quindi è più facile per me.

Innanzitutto, avresti bisogno di qualcosa del genere (funzioni utili).

  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";
  }                                     

Il set_time_limit(600) è solo una precauzione nel caso si blocchi (in modo da poterlo mettere in sicurezza crontab ). Assicurati di sostituire i dettagli di accesso a MySQL. La funzione run_query() stamperà la query e la eseguirà, se qualcosa va storto, lo script generale terminerà.

Ora, questa è la parte migliore, puoi mettere insieme alcune query SQL ben note e utilizzate in modo da poterle eseguire tutte in una volta.

  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!!! ---";
  }

La funzione clean_wp accetta 3 parametri. Il primo è il nome della tabella (quindi puoi passare tabelle diverse per diversi blog wordpress). Il secondo parametro specifica il prefisso della tabella wp e il valore predefinito dovrebbe essere wp_. Il terzo parametro specifica se in questa tabella è presente un blog wordpress, quindi puoi ignorare le query di pulizia relative a wordpress ed eseguire solo quelle generali.

Le query SQL servono a pulire i commenti nel cestino, i commenti non approvati (attenzione a questo), le revisioni. Le domande generali includono l’ottimizzazione e la riparazione. Quindi dovresti essere in grado di metterlo facilmente nel crontab.

Fonte di registrazione: helloacm.com

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More