Kuinka määrittää PHP-skripti Crontabissa useiden WordPress- (tietokanta) puhdistamiseksi samalla palvelimella?
Jos isännöit useita wordpress-blogeja samalla palvelimella, voit tehdä tämän helposti seuraavalla PHP-skriptillä. Olen isännöinyt 6 verkkosivustoa yhdellä VPS :llä, joten sen sijaan, että käynnistäisin puhdistusohjelman yksitellen, voin vain laittaa sen crontabiin, jotta se on minulle helpompaa.
Ensin tarvitsisit jotain tällaista (käteviä toimintoja).
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) on vain varotoimenpide siltä varalta, että se jumittuu (jotta voit turvallisesti laittaa sen crontabiin ). Muista vaihtaa mysql-käyttöoikeustiedot. Funktio run_query() tulostaa kyselyn ja suorittaa sen. Jos jokin menee pieleen, koko komentosarja päättyy.
Nyt tämä on paras osa, voit koota joitain hyvin tunnettuja ja käytettyjä SQL-kyselyjä, jotta voit suorittaa kaikki kerralla.
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!!! ---";
}
Funktio clean_wp ottaa 3 parametria. Ensimmäinen on taulukon nimi (joten voit välittää eri taulukoita eri wordpress-blogeille). Toinen parametri määrittää wp-taulukon etuliitettä ja oletusarvon tulee olla wp_. Kolmas parametri määrittää, onko tässä taulukossa WordPress-blogi, joten voit jättää huomioimatta wordpressiin liittyvät puhdistuskyselyt ja suorittaa vain yleiset.
SQL-kyselyt puhdistavat roskakorin kommentit, hyväksymättömät kommentit (ole varovainen sen kanssa), versiot. Yleisiin kysymyksiin kuuluu optimointi ja korjaus. Joten sinun pitäisi pystyä laittamaan se helposti crontabiin.