Un nostro lettore, ci ha segnalato che in alcuni hosting non è possibile lanciare script sh, quindi abbiamo deciso di pubblicare uno script php, che può essere lanciato anche visitandone il path.
Nel test che abbiamo fatto il file si chiamava set_wordpress_permissions.php e pertanto abbiamo avuto la possibilità, accedendo alla pagina nomesito.com/set_wordpress_permissions.php, di settare i permessi giusti a tutta l’alberatura di file e cartelle di wordpress e in un pochi attimi.
Lo script php
<?php
// Configurazione della directory root di WordPress
$wp_root = "/percorso/al/tuo/sito"; // Cambia con il percorso della tua installazione di WordPress
// Configurazione dell'utente e gruppo (facoltativo, solo su server Linux/Unix con funzione `chown`)
$user = "www-data"; // Utente del web server (es: www-data, apache, nginx)
$group = "www-data"; // Gruppo del web server
/**
* Funzione per impostare i permessi sui file e directory.
*
* @param string $path Percorso della directory o file
* @param int $filePerm Permessi da impostare sui file (es: 0644)
* @param int $dirPerm Permessi da impostare sulle directory (es: 0755)
*/
function set_permissions($path, $filePerm = 0644, $dirPerm = 0755) {
// Controlla se il percorso è valido
if (!file_exists($path)) {
echo "Percorso non trovato: $path\n";
return;
}
// Scansiona ricorsivamente file e directory
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::SKIP_DOTS),
RecursiveIteratorIterator::SELF_FIRST
);
foreach ($iterator as $item) {
if ($item->isDir()) {
chmod($item->getPathname(), $dirPerm); // Imposta permessi sulle directory
} else {
chmod($item->getPathname(), $filePerm); // Imposta permessi sui file
}
}
// Imposta i permessi sulla directory principale
chmod($path, $dirPerm);
echo "Permessi impostati su $path\n";
}
/**
* Funzione per impostare proprietario e gruppo (facoltativo).
*
* @param string $path Percorso della directory o file
* @param string $user Nome utente
* @param string $group Nome gruppo
*/
function set_owner($path, $user, $group) {
if (!function_exists('chown') || !function_exists('chgrp')) {
echo "Funzioni chown/chgrp non disponibili su questo sistema.\n";
return;
}
// Scansiona ricorsivamente file e directory
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::SKIP_DOTS),
RecursiveIteratorIterator::SELF_FIRST
);
foreach ($iterator as $item) {
chown($item->getPathname(), $user);
chgrp($item->getPathname(), $group);
}
// Imposta proprietario e gruppo sulla directory principale
chown($path, $user);
chgrp($path, $group);
echo "Proprietario impostato su $path a $user:$group\n";
}
// Imposta i permessi di base per il sito WordPress
set_permissions($wp_root, 0644, 0755);
// Imposta permessi sicuri per wp-config.php
$wp_config = $wp_root . "/wp-config.php";
if (file_exists($wp_config)) {
chmod($wp_config, 0600);
echo "Permessi sicuri impostati per wp-config.php\n";
}
// Imposta permessi speciali per wp-content/uploads
$uploads_dir = $wp_root . "/wp-content/uploads";
if (is_dir($uploads_dir)) {
set_permissions($uploads_dir, 0664, 0775); // Scrivibile da utente e gruppo
}
// Imposta proprietario e gruppo (facoltativo)
set_owner($wp_root, $user, $group);
echo "Permessi configurati con successo per WordPress.\n";