Skip to content

Instantly share code, notes, and snippets.

@luismisanchez
Last active August 20, 2016 07:50
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save luismisanchez/d384eac93c5362914a2b to your computer and use it in GitHub Desktop.
Save luismisanchez/d384eac93c5362914a2b to your computer and use it in GitHub Desktop.
<?php
header('Content-type: text/plain; charset=utf-8');
error_reporting(E_ALL);
ini_set('display_errors', 1);
$script = basename(__FILE__);
$link = $_SERVER['HTTP_HOST'];
// Si venimos desde el botón INSTALAR WORDPRESS
// borramos este archivo y redirigimos al script de instalación de WordPress
if(isset($_POST['delete'])) {
//intentamos borrar el archivo
unlink($script);
//Si no ha sido posible, advertimos al usuario
if (file_exists($script)) {
header('Content-Type: text/html; charset=utf-8');
echo "<p>El fichero <strong>".$script."</strong> no ha podido ser eliminado. Accede por FTP y eliminalo manualmente.";
echo "</p><p>Una vez eliminado puedes volver a pulsar el botón para continuar con la instalación.</p>";
echo '<form method="post">';
echo '<input name="submit" type="submit" value="INSTALAR WORDPRESS"/>';
echo '<input name="delete" type="hidden" value="delete"/>';
echo '</form>';
} else {
// Si se ha borrado correctament, redirigimos a instalación de WordPress
header('Location: http://'.$link);
}
} else {
header('Content-Type: text/html; charset=utf-8');
// Definimos algunas variables y descargamos última versión de WordPress
// Copia en la variable $url el enlace de la versión que quieres descargar
// desde http://es.wordpress.org/releases/
$url = 'https://wordpress.org/latest.zip';
echo "<p>Descargando archivo: ".$url."</p>";
flush();
sleep(1);
$md5 = file_get_contents($url.".md5");
$file = "wordpress.zip";
$src = fopen($url, 'r');
$dest = fopen($file, 'w');
echo stream_copy_to_stream($src, $dest) . " bytes descargados. Descarga correcta.\n";
echo "<p>Comprobando hashes MD5 del archivo...</p>";
flush();
sleep(1);
// Comprobamos por seguridad si el hash md5 del archivo descargado
// es el mismo que el publicado en la web de WordPress
echo '<p>Hash MD5 del archivo descargado ' . $file . ': <strong>' .md5_file($file)."</strong></p>";
echo '<p>Hash MD5 de WordPress.org ' . $url . ': <strong>' . $md5."</strong></p>";
if ($md5 === md5_file($file)) {
echo "<p>Los hash MD5 coinciden. Buena señal.</p>";
echo "<p>Descomprimiendo archivo...</p>";
flush();
sleep(1);
$ruta = __DIR__;
$zip = new ZipArchive;
if ($zip->open($file) === TRUE) {
$zip->extractTo($ruta);
$zip->close();
echo '<p>Archivo descomprimido correctamente.</p>';
echo '<p>Moviendo archivos a la raiz y asignando permisos...</p>';
flush();
sleep(1);
} else {
exit("<p>El archivo de WordPress no ha podido ser descomprimido. Habrá que subirlo manualmente por FTP :(</p>");
}
// Metemos los nombres de los archivos y directorios en un array
$dir = "wordpress";
$files = scandir($dir);
// Identificamos los directorios
$source = "/wordpress/";
// Movemos los archivos y directorios a la ruta desde la que estamos
// ejecutando el script
foreach ($files as $file) {
if (in_array($file, array(".",".."))) continue;
rename ($ruta.$source.$file, $ruta."/".$file);
}
// Eliminamos el directorio wordpress creado al descomprimir el archivo
// y el propio archivo wordpress.zip
rmdir("wordpress");
unlink("wordpress.zip");
// Asignamos permisos correctos a archivos y directorios
exec ("find ".$ruta." -type f -exec chmod 0644 {} +");
exec ("find ".$ruta." -type d -exec chmod 0755 {} +");
// Mostramos un botón que elimine el archivo de instalación
// y nos lleve al instalador de WordPress
echo "<p>Todo ha ido bien. Para hacer limpieza y comenzar la instalación de WordPress pulsa el siguiente botón:</p>";
echo '<form method="post">';
echo '<input name="submit" type="submit" value="INSTALAR WORDPRESS"/>';
echo '<input name="delete" type="hidden" value="delete"/>';
echo '</form>';
echo 'Al pulsar el botón se eliminará este archivo <strong>('.$script.')</strong>. De todos modos y por seguridad, es <strong>MUY IMPORTANTE</strong> que compruebes mediante FTP que el archivo ha sido eliminado correctamente.';
} else {
// Si los HASH no coinciden algo ha ido realmente mal
exit("<p>OJO! Los hash MD5 no coinciden!</p>");
}
}
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment