El disco externo empieza a llenarse y he decidido instalar un RAID 5 para tener algo más de espacio y de paso proteger los datos. Ahora toca estudiar el RAID, buscar discos bien ventilados y buscar una nueva ubicación para todo el equipamiento.
De momento: http://davidiesclaradelrey.blogspot.com.es/2012/10/primer-post.html
Y este otro: http://www.makeinstall.es/2011/04/reconstruir-raid5-tras-fallo-en-disco.html
martes, 21 de octubre de 2014
miércoles, 2 de julio de 2014
script php para navegar por los directorios con vista previa de las imagenes
Va a ser una mezcla de varios scripts.
Ahora utilizo uno que recrea la estructura de cada directorio haciendo las vistas previas.
Tambien tengo uno que visualiza la estructura del arbol.
Y otro que muestra el contenido de las carpetas y permite salir a la estructura superior (si se le permite), este fué diseñado para comprobar la seguridad.
En cuanto tenga un rato comienzo el nuevo script.
//gallery titles
//$galleryTitle = "Mi galería de imagenes";
//$galleryTitle = getcwd()." ".date("l dS of F Y h:i:s A");
//contar el numero de caracteres que hay hasta la tercera barra y eliminar todo ese texto
//porque está ecribiendo toda la ruta desde el servidor: /web/htdocs/www.
$galleryTitle = basename(getcwd())." (".date("l dS of F Y h:i:s A").")";
$gallerySubTitle = "Mira mis fotos";
$thumbsPerPage = 8;
switch ($_GET['action'])
{
case "view" :
viewImage();
break;
default :
displayThumbs();
break;
}
function displayThumbs()
{
outHead();
global $galleryTitle;
global $gallerySubTitle;
global $thumbsPerPage;
echo ' <body class="listBody">'."\n";
echo ' <table align="center" cellpadding="10" style="border: 3px solid #FF8888">'."\n";
echo ' <tr style="background-color:#8888FF">'."\n";
echo ' <td colspan="4">'."\n";
echo ' <span class="head1">' . $galleryTitle . '</span><br>'."\n";
echo ' <span class="head2">' . $gallerySubTitle . '</span>'."\n";
echo ' </td>'."\n";
echo ' </tr>'."\n";
$dirpath = getcwd() . "/";
$dir = opendir($dirpath);
$files = array();
if (!file_exists($dirpath . "/thumbs"))
{
echo "creating directory"."\n";
mkdir($dirpath . "/thumbs");
}
if (!file_exists($dirpath . "/browser"))
{
echo "creating browser directory"."\n";
mkdir($dirpath . "/browser");
}
//inicializo $key porque estoy utilizando un nuevo tipo de orden
$key=0;
while ($file = readdir($dir))
{
$localpath = $dirpath.$file;
if (is_file($localpath) && ((substr(strtolower($file), -3, 3) == "jpg")))
{
//$key = filemtime($localpath);
//antes ordenaba por fechas y yo lo voy a ordenar por nombre
$files[$key] = $file;
//esto es mío
$key+=1;
}
}
//aquí ya no necesito ordenar
//ksort($files);
sort($files);
//esto lo voy a cambiar porque lo que quiero es redondear hacía arriba
//$pages = intval(count($files) / $thumbsPerPage)+1;
$aux = intval(count($files) / $thumbsPerPage);
if ($aux*$thumbsPerPage == count($files))
{
$pages = $aux;
}
else
{
$pages = $aux+1;
}
if (!empty($_GET['page']))
{
$currentPage = $_GET['page'];
} else {
$currentPage = 1;
}
$navString = "";
$navString .= ' <tr>'."\n\t\t".'<td colspan="4" align="center">'."\n\t\t\t".'<a href="..">Subir un directorio</a> '."\n";
if ($currentPage != 1)
{
$navString .= '<a href="' . $_SERVER["PHP_SELF"] . '?page=' . ($currentPage-1) . '"><<</a> '."\n";
}
$temp = "";
for ($p=1; $p<=$pages; $p++)
{
if ($p == $currentPage)
{
$temp .= $p . " | ";
}
else
{
$temp .= '<a href="' . $_SERVER["PHP_SELF"] . '?page=' . $p . '">' . $p . "</a> | "."\n";
}
}
$navString .= substr($temp, 0, -13);
if ($currentPage != $pages)
{
$navString .= ' <a href="' . $_SERVER["PHP_SELF"] . '?page=' . ($currentPage+1) . '">>></a>'."\n";
}
$navString .= '</td></tr>'."\n";
echo $navString;
echo "<tr>"."\n";
reset ($files);
while ($currentItem < (($currentPage -1) * $thumbsPerPage))
{
next ($files);
$currentItem++;
}
$count = 0;
for ($a=0; $a<$thumbsPerPage; $a++)
{
if (substr(strtolower(current($files)), -3, 3) == "jpg")
{
if (!file_exists($dirpath . "thumbs/" . current($files)))
{
$original = ImageCreateFromJPEG($dirpath . current($files));
$x = ImageSX($original);
$y = ImageSY($original);
$newX = 600;
$ratio = $newX / $x;
$newY = $y * $ratio;
$thumbnail = ImageCreateTrueColor($newX,$newY);
ImageCopyResized($thumbnail, $original, 0, 0, 0, 0, $newX, $newY, $x, $y);
ImageJPEG($thumbnail, $dirpath . "/browser/" . current($files), 100);
ImageDestroy($thumbnail);
ImageDestroy($original);
}
if (!file_exists($dirpath . "thumbs/" . current($files)))
{
$original = ImageCreateFromJPEG($dirpath . current($files));
$x = ImageSX($original);
$y = ImageSY($original);
$newX = 120;
$ratio = $newX / $x;
$newY = $y * $ratio;
$thumbnail = ImageCreateTrueColor($newX,$newY);
ImageCopyResized($thumbnail, $original, 0, 0, 0, 0, $newX, $newY, $x, $y);
ImageJPEG($thumbnail, $dirpath . "/thumbs/" . current($files), 100);
ImageDestroy($thumbnail);
ImageDestroy($original);
}
echo '<td width="140" align="center" valign="top">'."\n";
echo '<table border="0" width="135"><tr><td colspan="2" style="padding-top:3px">'."\n";
echo '<a href="' . $_SERVER["PHP_SELF"] . '?action=view&filename=' . current($files) . '&page=' . $currentPage . '" class="imglink"><img src="thumbs/' . current($files) . '" border="0"></a>'."\n";
echo '</td></tr>'."\n";
echo '<tr><td width="100">'."\n";
echo '<span class="listCaption">' . str_replace("_", " ", substr(current($files), 0, -4)) . '</span>'."\n";
echo '</td><td width="35">'."\n";
echo '<a href="' . $_SERVER["PHP_SELF"] . '?action=view&filename=' . current($files) . '&page=' . $currentPage . '" class="print"><img src="'."$SERVER_HOST".'/static/view.gif" height="16" width="16" alt="View" border="0"></a>'."\n";
echo '<a href="' . current($files) . '" class="print"><img src="'."$SERVER_HOST".'/static/print.gif" height="16" width="16" alt="Print" border="0"></a>'."\n";
echo '</td></tr></table>'."\n";
echo '</td>'."\n";
$count++;
if ($count % 4 == 0)
{
echo '</tr><tr>'."\n";
}
}
next ($files);
}
echo "</tr>"."\n";
echo $navString;
echo "</table>"."\n";
}
function viewImage()
{
outHead();
echo ' <body class="viewBody">'."\n";
echo ' <table align="center">'."\n";
echo ' <tr><td colspan="2">'."\n";
echo ' <img src="browser/' . $_GET['filename'] . '" alt="Gallery Image"> '."\n";
echo ' </td></tr>'."\n";
echo ' <tr valign="bottom">'."\n";
echo ' <td class="viewCaption">'."\n";
echo str_replace("_", " ", substr($_GET['filename'], 0, -4));
echo ' </td><td align="right">'."\n";
echo '<a href="' . $_GET['filename'] . '" class="print"><img src="'."$SERVER_HOST".'/static/print.gif" height="16" width="16" alt="Print" border="0"></a>'."\n";
echo ' <a href="' . $_SERVER["PHP_SELF"] . '?action=list&page=' . $_GET['page'] . '" >Back</a>'."\n";
echo ' </td></tr></table>'."\n";
}
function outHead()
{
global $galleryTitle;
echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">'."\n";
echo '<html>'."\n";
echo '<head>'."\n";
/*
echo date( "M d Y H:i:s",mktime(0,0,0,1,1,1998) )."\n";
echo gmdate( "M d Y H:i:s",mktime(0,0,0,1,1,1998) )."\n";
echo date("l dS of F Y h:i:s A")."\n";
*/
echo ' <title>' . $galleryTitle . '</title>'."\n";
echo ' <style type="text/css">'."\n";
echo ' .listBody'."\n";
echo ' {'."\n";
echo ' font-family:arial; '."\n";
echo ' font-size:12px; '."\n";
echo ' background:#44bbbb;'."\n";
echo ' }'."\n";
echo ' .small'."\n";
echo ' {'."\n";
echo ' font-size:10px; '."\n";
echo ' font-weight:normal'."\n";
echo ' }'."\n";
echo ' .listCaption'."\n";
echo ' {'."\n";
echo ' font-family:arial; '."\n";
echo ' font-size:11px; '."\n";
echo ' font-weight:bold'."\n";
echo ' }'."\n";
echo ' .head1 '."\n";
echo ' {'."\n";
echo ' font-family:arial;'."\n";
echo ' font-size:24px;'."\n";
echo ' color:#ffff88;'."\n";
echo ' font-weight:bold'."\n";
echo ' }'."\n";
echo ' .head2'."\n";
echo ' {'."\n";
echo ' font-family:arial; '."\n";
echo ' font-size:16px; '."\n";
echo ' color:#88ffff'."\n";
echo ' }'."\n";
echo ' td'."\n";
echo ' {'."\n";
echo ' font-family:arial;'."\n";
echo ' font-size:13px;'."\n";
echo ' font-weight:bold;'."\n";
echo ' }'."\n";
echo ' a:link,'."\n";
echo ' a:visited,'."\n";
echo ' a:active { color: #224466; }'."\n";
echo ' a:hover { color: #ffff00; }'."\n";
echo ' a.imglink:link,'."\n";
echo ' a.imglink:visited,'."\n";
echo ' a.imglink:active'."\n";
echo ' {'."\n";
echo ' display:block; '."\n";
echo ' border-top: 3px solid #888888; '."\n";
echo ' border-left: 4px solid #888888;'."\n";
echo ' border-bottom: 3px solid #888888;'."\n";
echo ' background-color:#888888'."\n";
echo ' }'."\n";
echo ' a.imglink:hover'."\n";
echo ' {'."\n";
echo ' display:block; '."\n";
echo ' border-top: 3px solid #88ff88; '."\n";
echo ' border-left: 4px solid #88ff88;'."\n";
echo ' border-bottom: 3px solid #88ff88;'."\n";
echo ' background-color:#88ff88'."\n";
echo ' }'."\n";
echo ' .viewBody'."\n";
echo ' {'."\n";
echo ' margin:20px 20px 20px 20px;'."\n";
echo ' background:#44bbbb; '."\n";
echo ' font-family:arial;'."\n";
echo ' font-size:10pt;'."\n";
echo ' font-weight:bold; '."\n";
echo ' }'."\n";
echo ' .viewCaption'."\n";
echo ' {'."\n";
echo ' font-family:arial;'."\n";
echo ' font-size:14pt;'."\n";
echo ' font-weight:bold; '."\n";
echo ' }'."\n";
echo ' </style>'."\n";
echo '</head>'."\n";
return;
}
?>
Tiene unos iconos asociados de una lupa y de una impresora. El de la lupa ve la imagen a 600 y el de la impresora ve la imagen original.
Es de: http://www.metalhead.ws/phpbin/ y tiene modificaciones hechas por mi. Tampoco recuerdo que cosas le hice ni cuando. Creo que los comentarios que comienzan con javi los hice yo, pero no recuerdo que modifiqué ni por qué. Esposible que en metalhead todavía tengan el original. En este encuentro demasiados símbolos extraños.
/*javi: inicializacie la variable z*/
/*global $zz;*/
$zz=0;
$galleryTitle = basename(getcwd())." (".date("l dS of F Y h:i:s A").")";
/* Sitemap version 2.0 (C) copyright Metalhead 2003
* P⨩na web: http://www.metalhead.ws/phpbin/
* Este script se distribuye bajo los t곭inos de la
* Licencia Pca General GNU (GNU GPL)
* Una copia de la GPL ha sido inclu con el script. */
/* Seccie Configuraci/
$showsize = 1; /* Mostrar el tamae los archivos? 1 = s�0 = no */
/* Array de tipos de archivos visualizados y sus respectivos iconos.
* Sintaxis: $display[filetype] = "picture"; */
$display[php] = "$SERVER_HOST/listado/php.gif";
$display[html] = "$SERVER_HOST/listado/html.gif";
$display[htm] = "$SERVER_HOST/listado/html.gif";
$display[shtml] = "$SERVER_HOST/listado/html.gif";
/* Array de directorios que no deben ser visualizados.
* Sintaxis: $excludedir[] = "directory"; */
$excludedir[] = "temp";
$excludedir[] = "tmp";
$excludedir[] = "browser";
$excludedir[] = "static";
$excludedir[] = "thumbs";
$excludedir[] = "test";
$excludedir[] = "cgi-bin";
$excludedir[] = "privado";
/* Array de archivos que no ser⮠visualizados. */
$excludefile[] = "index.php";
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<!-- <title>Mapa del sitio web</title> -->
<?
echo ' <title>' . $galleryTitle . '</title>'."\n";
?>
</head>
<body>
<b>Mapa del sitio web</b><p>
<?
$stime = gettimeofday();
/* prueba inicial... */
$root = getcwd();
/*echo "root=$root";
$largo=strlen($root);
echo " longitud root=$largo";*/
$pre = explode("/", $REQUEST_URI);
array_pop($pre);
$prefix = join("/", $pre);
/* Si el script se encuentra en un subdirectorio, descomenta las
* siguientes dos lineas para generar el Ⳣol de todos los
* archivos y directorios del servidor web */
/*NO QUIERO MOSTRAR EL ARBOL DE DIRECTORIOS POR ENCIMA DEL ACTUAL*/
/*POR ESO VOY A PONER COMO COMENCTARIO ESE CODIGO*/
//$root = str_replace($prefix, "", $root);
//$prefix = "";
//$root .= "/";
/* Visualiza el nombre del servidor y el directorio */
echo "<table cellspacing=0 cellpadding=0 border=0>\n";
echo "<tr><td><img align=absmiddle src=$SERVER_HOST/listado/server.gif> http://$SERVER_NAME";
echo "$prefix/";
echo "</td></tr><tr><td><img align=absmiddle src=$SERVER_HOST/listado/vertical.gif></td></tr>\n";
function get_extension($name)
{
$array = explode(".", $name);
$retval = strtolower(array_pop($array));
return $retval;
}
/* Rekurencja... */
function list_dir($chdir)
{
/*javi: el nivel de la recurrencia es:*/
/*global $zz;
global $zdir, $zdir1, $zcount;
/*echo " zz=$zz";*/
/*if ($zz == 0)
{
$zdir = getcwd();
$zdir1 = str_replace($root, "", $dir."/");
$zcount = substr_count($dir1, "/") + substr_count($dir1, "\\");
}
global $root;
global $largo;
echo "root=$root";
echo "largo=$largo"; */
/* algunas variables globales y un poco de orden */
global $root, $prefix, $PHP_SELF, $SERVER_NAME, $showsize, $display, $excludedir, $excludefile;
unset($sdirs);
unset($sfiles);
chdir($chdir);
$self = basename($PHP_SELF);
/* abrimos el directorio actual */
$handle = opendir('.');
/* leemos el directorio. Si el objeto
* es un directorio lo introducimos a
* $sdirs, si se trata de un archivo
* que nos interesa (exceptuando el
* que contiene este script), lo colocamos
* en $sfiles */
$dir = getcwd();
$dir1 = str_replace($root, "", $dir."/");
$count = substr_count($dir1, "/") + substr_count($dir1, "\\");
/*javi: voy a almacenar los nos de barras para restarlos despu곪/
/*echo " dir=$dir dir1=$dir1 count=$count";
echo " zdir=$zdir zdir1=$zdir1 zcount=$zcount";*/
/*echo " chdir=$chdir";*/
while ($file = readdir($handle))
{
if(is_dir($file) && $file !=
"." && $file != ".."
&& !in_array($file,
$excludedir))
{ $sdirs[] = $file; }
elseif(is_file($file)
&& $file != "$self"
&& array_key_exists(
get_extension($file),
$display)
&& !in_array($file,
$excludefile))
{ $sfiles[] = $file; }
}
/* contamos las barras para saber la profundidad a la que estamos
* o en la estructura de directorios y cu⯴os segmentos debemos
* usar de la rama en la que estamos */
$dir = getcwd();
$dir1 = str_replace($root, "", $dir."/");
$count = substr_count($dir1, "/") + substr_count($dir1, "\\");
/*javi: voy a almacenar los nos de barras para restarlos despu곪/
/*echo " dir=$dir dir1=$dir1 count=$count";*/
/*echo "dir= $dir dir1= $dir1 count=$count";*/
/* mostramos por pantalla los nombres y obtenemos la lista recursiva de los
* directorios */
if(is_array($sdirs)) {
sort($sdirs);
reset($sdirs);
for($y=0; $y<sizeof($sdirs); $y++) {
echo "<tr><td>";
for($z=1; $z<=$count; $z++)
{ echo "<img align=absmiddle src=$SERVER_HOST/listado/vertical.gif> "; }
if(is_array($sfiles))
{ echo "<img align=absmiddle src=$SERVER_HOST/listado/verhor.gif>"; }
else
{ echo "<img align=absmiddle src=$SERVER_HOST/listado/verhor1.gif>"; }
echo "<img align=absmiddle src=$SERVER_HOST/listado/folder.gif>
<a href=\"http://$SERVER_NAME$prefix$dir1$sdirs[$y]\">$sdirs[$y]</a>";
//echo " SERVER_NAME=$SERVER_NAME , prefix=$prefix , dir1=$dir1 , sfiles[$y]=$sfiles[$y]";
/*javi: voy a controlar la profundidad de la recurrencia*/
++$zz;
list_dir($dir."/".$sdirs[$y]);
}
}
chdir($chdir);
/* visitamos cada uno de los elementos del array de archivos
* y los imprimimos */
if(is_array($sfiles)) {
sort($sfiles);
reset($sfiles);
$sizeof = sizeof($sfiles);
/* ࠱u顴ipos de ficheros deben ser visualizados? */
for($y=0; $y<$sizeof; $y++) {
echo "<tr><td>";
for($z=1; $z<=$count; $z++)
{ echo "<img align=absmiddle src=$SERVER_HOST/listado/vertical.gif> "; }
if($y == ($sizeof -1))
{ echo "<img align=absmiddle src=$SERVER_HOST/listado/verhor1.gif>"; }
else
{ echo "<img align=absmiddle src=$SERVER_HOST/listado/verhor.gif>"; }
echo "<img align=absmiddle src=\"";
echo $display[get_extension($sfiles[$y])];
echo "\"> ";
//echo "<a href=\"http://$SERVER_NAME$prefix/$dir1$sfiles[$y]\">$sfiles[$y]</a>";
echo "<a href=\"http://$SERVER_NAME$prefix$dir1$sfiles[$y]\">$sfiles[$y]</a>";
//echo " SERVER_NAME=$SERVER_NAME , prefix=$prefix , dir1=$dir1 , sfiles[$y]=$sfiles[$y]";
if($showsize) {
$fsize = @filesize($sfiles[$y])/1024;
printf(" (%.2f kB)", $fsize);
}
echo "</td></tr>";
echo "<tr><td>";
}
echo "<tr><td>";
for($z=1; $z<=$count; $z++)
{ echo "<img align=absmiddle src=$SERVER_HOST/listado/vertical.gif> "; }
echo "</td></tr>\n";
}
}
list_dir($root);
echo "</table>\n";
/* ࠃu⯴o tiempo nos llev/
$ftime = gettimeofday();
$time = round(($ftime[sec] + $ftime[usec] / 1000000) - ($stime[sec] + $stime[usec] / 1000000), 5);
echo "<center>Tiempo de generacie la p⨩na: $time segundos</center>\n";
echo "<A HREF=http://$HTTP_HOST>http://$HTTP_HOST</A>\n";
?>
</body></html>
Es muy interesante porque está centrado en la seguridad.
/* EXPLORADOR DE CARPETAS Y ARCHIVOS CON PHP
* Documento explora.php
* Explorador de carpetas y archivos usando el sistema de ficheros de PHP.
* Autor: Andrés de la Paz © 2010
* Contacto: www.wextensible.com
*/
//Por defecto la primera vez que abrimos este explorador toma
//como carpeta la del php actual. La constante __FILE__ es la
//ruta del archivo PHP actual. Con dirname obtenemos la carpeta.
$ruta = dirname(__FILE__)."/";
//Para abrir archivos necesitaremos poner la codificación
//adecuada con estos valores
$array_codif = Array(
"UTF-8",
"ISO-8859-1",
"ISO-8859-15"
);
//Por defecto usamos esta para htmlentities (ver más abajo)
$codificacion = "ISO-8859-1";
//Vemos si hay algo en el GET
if (isset($_GET)){
foreach($_GET as $campo=>$valor){
switch ($campo) {
//Obtenemos una ruta, carpeta o archivo
case "una-ruta":
$ruta = htmlspecialchars($valor, ENT_QUOTES);
if (get_magic_quotes_gpc() == 1) $ruta = stripslashes($ruta);
break;
//Vemos la codificación
case "una-codificacion":
$codificacion = htmlspecialchars($valor, ENT_QUOTES);
if (get_magic_quotes_gpc() == 1) $codificacion = stripslashes($codificacion);
break;
}
}
}
//Si la ruta es vacía, pone la del presente script
if ($ruta == "") $ruta = dirname(__FILE__)."/";
//Esta variable contendrá la lista de nodos (carpetas y archivos)
$presenta_nodos = "";
//Esta variable es para el contenido del archivo
$presenta_archivo = "";
//Si la ruta es una carpeta, la exploramos. Si es un archivo
//sacamos también el contenido del archivo.
if (is_dir($ruta)){//ES UNA CARPETA
//Con realpath convertimos los /../ y /./ en la ruta real
$ruta = realpath($ruta)."/";
//exploramos los nodos de la carpeta
$presenta_nodos = explora_ruta($ruta);
} else {//ES UN ARCHIVO
$ruta = realpath($ruta);
//Sacamos también los nodos de la carpeta
$presenta_nodos = explora_ruta(dirname($ruta)."/");
//Y sacamos el contenido del archivo
$presenta_archivo = "<br />CONTENIDO DEL ARCHIVO: ".
$ruta."<pre>".
explora_archivo($ruta, $codificacion).
"</pre>";
}
//Función para explorar los nodos de una carpeta
//El signo @ hace que no se muestren los errores de restricción cuando
//por ejemplo open_basedir restringue el acceso a algún sitio
function explora_ruta($ruta){
//En esta cadena haremos una lista de nodos
$cadena = "";
//Para agregar una barra al final si es una carpeta
$barra = "";
//Este es el manejador del explorador
$manejador = @dir($ruta);
while ($recurso = $manejador->read()){
//El recurso sera un archivo o una carpeta
$nombre = "$ruta$recurso";
if (@is_dir($nombre)) {//ES UNA CARPETA
//Agregamos la barra al final
$barra = "/";
$cadena .= "CARPETA: ";
} else {//ES UN ARCHIVO
//No agregamos barra
$barra = "";
$cadena .= "ARCHIVO: ";
}
//Vemos si el recurso existe y se puede leer
if (@is_readable($nombre)){
$cadena .= "<a href=\"".$_SERVER["PHP_SELF"].
"?una-ruta=$nombre$barra\">$recurso$barra</a>";
} else {
$cadena .= "$recurso$barra";
}
$cadena .= "<br />";
}
$manejador->close();
return $cadena;
}
//Función para extraer el contenido de un archivo
function explora_archivo($ruta, $codif){
//abrimos un buffer para leer el archivo
ob_start();
readfile($ruta);
//volcamos el buffer en una variable
$contenido = ob_get_contents();
//limpiamos el buffer
ob_clean();
//retornamos el contenido después de limpiarlo
//aplicando la codificación seleccionada
return htmlentities($contenido, ENT_QUOTES, $codif);
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="es">
<head>
<title>Explora carpetas</title>
<meta http-equiv="X-UA-Compatible" content="IE=8" />
...
</head>
<body>
...
<h3>Opciones de configuración PHP (restringen explorador)</h3>
<ul>
<?php
$opciones = "<li><a href=\"http://docs.php.net/manual/es/ini.sect.safe-mode.php#ini.safe-mode\">".
"<code>safe_mode</code></a> ";
if (ini_get("safe_mode")){
$opciones .= ": activado";
} else {
$opciones .= ": desactivado";
}
$opciones .= "</li>".
"<li><a href=\"http://docs.php.net/manual/es/ini.core.php#ini.open-basedir\">".
"<code>open_basedir</code></a>: ".ini_get("open_basedir")."</li>".
"<li><a href=\"http://docs.php.net/manual/es/function.getmyuid.php\">".
"<code>getmyuid()</code></a>: ".getmyuid()."</li>".
"<li><a href=\"http://docs.php.net/manual/es/function.getmygid.php\">".
"<code>getmygid()</code></a>: ".getmygid()."</li>";
echo $opciones;
?>
</ul>
<h3>Exploración</h3>
<form action="<?php echo $_SERVER["PHP_SELF"] ?>" method="get">
Ruta <small>(En Windows pueden usarse ambas barras "/" y "\")</small>
<br /><textarea rows="5" cols="50" name="una-ruta"
><?php echo $ruta; ?></textarea><br />
Codificación para ver archivos:
<select name="una-codificacion">
<?php
foreach ($array_codif as $i=>$val){
echo "<option value=\"$val\"";
if ($codificacion == $val) echo " selected=\"selected\"";
echo ">$val</option>";
}
?>
</select><br />
<input type="submit" value="enviar" />
</form>
<?php
echo "<br />$presenta_nodos";
echo "<br />$presenta_archivo";
?>
</body>
</html>
<head>
<title>Videos de Miki</title>
</head>
<body>
<?php
$dirpath = getcwd() . "/";
$dir = opendir($dirpath);
$files = array();
$i=0;
while ($file = readdir($dir))
{
$files[$i] = $file;
$i+=1;
}
sort($files);
$i=0;
while ($files[$i])
{
if (is_dir($files[$i]))
{
echo '<a href=./'.$files[$i].'>'.$files[$i];
echo '<br>';
}
$i+=1;
}
?>
</body>
</html>
Fuente: http://www.syntaxerror.es/proyectos/minigallery
Plugin Name: WP-MiniGallery
Tiene 809 líneas y ocupa 25 K. Excesivo para ponerlo aquí.
La idea es crear una carpeta con un nombre que no se vaya a indexar y que sirva como base_de_datos/tabla_de_localización_de_ficheros (será la que vaya explorando el script en vez de la "real") y que cuando se visita una carpeta:
Tenía una duda sobre si debería utilizar md5 o sha y después de buscar mucho he encontrado algo (todo el mundo hace las comparativas refiriendose a la seguridad de contraseñas y yo deseo comparar un listado de ficheros): http://www.monografias.com/trabajos76/funciones-hash-criptografia/funciones-hash-criptografia2.shtml
En el apartado Pasos y tasas de cifra en MD5 y SHA-1.
El código fuente-chapuza de lo que llevo hasta ahora es:
/////////////////////////////////////////////////////////////////////////////////////////////
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="es">
<head>
<title>Explora carpetas</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<?php
$ruta = dirname(__FILE__)."/";
echo "La ruta es: ".$ruta."<br />";
$privado=$ruta."privado";
//en su momento habrá que crear una opción para que cree o actualice todo el arbol
if(!file_exists($privado)){
echo 'No existe '.$privado.'<br />';
echo 'Se va a crear un directorio ...<br />';
mkdir ($privado,0777);//habría que comprobar si se ha creado por si no se tiene permiso de escritura
if(!file_exists($privado)){
echo 'Ha sido imposible crear el directorio privado. Se abandona la ejecución<br />';
return;
}else{
echo 'Se ha creado el directorio y no ha habido problemas<br />';
}
}else{
echo 'Existe el fichero o el directorio. Falta hacer esa comprobación<br />';
if(is_dir($privado)){
echo 'Ya existe el directorio. Todo va bien...<br />';
}else{
echo 'Hay un problema. Existe un fichero de nombre "privado". Imposible resolverlo desde aquí<br />';
return;
}
}
//Si ha llegado aquí es que todo ha ido bien. Se supone que se ha comprobado si se creó en caso de que se haya tenido que crear.
//Debería comprobar si hay un fichero index.html. En caso de que exista cargarlo y comprobar si ha habido cambios. En caso de que no exista, generarlo a partir del contenido.
//explorar el directorio y crear el fichero index.html
if(!file_exists($privado.index.html)){
//hay que generarlo para poder visualizarlo
echo 'No existe index.html<br />';
$index=$privado.'/index.html';
echo 'el fichero index.html se va a crear en: '.$index.'<br />';
$fp=fopen($index,"w");//'w' Para solo escritura. Se pone el puntero al principio, y si existe, BORRA todo su contenido. Si no existe el fichero, LO CREA.
//ya se tiene un puntero a fichero llamado fp que apunta al comienzo de un fichero vacío.
//algo va mal en este bloque
//está localizado. al crearlo no le da permiso de escritura.
//Ya pertenecía al usuario/grupo www-data
//dando permisos 777 funciona una vez y se los quita
echo 'los permisos son: '.base_convert(fileperms($privado),10,8).'<br />';
//llamar a la función que escribe el fichero html
//a su vez esta función llama a otra que escribe las cabeceras
fwrite($fp, '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">'."\n");
fwrite($fp, '<html xmlns="http://www.w3.org/1999/xhtml" lang="es">'."\n");
fwrite($fp, '<head>'."\n");
fwrite($fp, '<title>Probando...</title>'."\n");
fwrite($fp, '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">'."\n");
fwrite($fp, '</head>'."\n");
fwrite($fp, '<body>'."\n");
fwrite($fp, '<h1>Titulo</h1>'."\n");
fwrite($fp, '1');
fwrite($fp, '23');
fwrite($fp, '45<br />'."\n\n\n\n\n");
fwrite($fp, '<h1>hache 1</h1>');
fwrite($fp, '</body>'."\n");
fwrite($fp, '</html>'."\n");
echo 'los permisos son: '.base_convert(fileperms($privado),10,8).'<br />';
fclose($fp);
}else{
echo 'Ya esixte index.html. Se procede a cargarlo<br />';
//hay que cargar el existente y comprobarlo en segundo plano
//la comprobación debe ser sencilla, contar el número de ficheros y compararlo con un número alamacenado
//y si son iguales hacer una comprobación tipo md5 con el listado de ficheros
//string md5 ( string $str [, bool $raw_output = false ] )
//str es una cadena
}
?>
</body>
</html>
/////////////////////////////////////////////////////////////////////////////////
Ahora utilizo uno que recrea la estructura de cada directorio haciendo las vistas previas.
Tambien tengo uno que visualiza la estructura del arbol.
Y otro que muestra el contenido de las carpetas y permite salir a la estructura superior (si se le permite), este fué diseñado para comprobar la seguridad.
En cuanto tenga un rato comienzo el nuevo script.
- Tiene que recrear toda la estructura desde la raiz (y no navegar hacia arriba)
- Esa recreación debe hacerla al ir entrando en los sucesivos directorios (para no cargar demasiado en la primera visita)
- ...
Primer script.
No recuerdo de donde saqué el original, fué hace muchos años y desde entonces ha sufrido varias modificaciones. Hay que ponerlo en la carpeta que se desea indexar y crea las miniaturas en dos tamaños.Código fuente:
<?//gallery titles
//$galleryTitle = "Mi galería de imagenes";
//$galleryTitle = getcwd()." ".date("l dS of F Y h:i:s A");
//contar el numero de caracteres que hay hasta la tercera barra y eliminar todo ese texto
//porque está ecribiendo toda la ruta desde el servidor: /web/htdocs/www.
$galleryTitle = basename(getcwd())." (".date("l dS of F Y h:i:s A").")";
$gallerySubTitle = "Mira mis fotos";
$thumbsPerPage = 8;
switch ($_GET['action'])
{
case "view" :
viewImage();
break;
default :
displayThumbs();
break;
}
function displayThumbs()
{
outHead();
global $galleryTitle;
global $gallerySubTitle;
global $thumbsPerPage;
echo ' <body class="listBody">'."\n";
echo ' <table align="center" cellpadding="10" style="border: 3px solid #FF8888">'."\n";
echo ' <tr style="background-color:#8888FF">'."\n";
echo ' <td colspan="4">'."\n";
echo ' <span class="head1">' . $galleryTitle . '</span><br>'."\n";
echo ' <span class="head2">' . $gallerySubTitle . '</span>'."\n";
echo ' </td>'."\n";
echo ' </tr>'."\n";
$dirpath = getcwd() . "/";
$dir = opendir($dirpath);
$files = array();
if (!file_exists($dirpath . "/thumbs"))
{
echo "creating directory"."\n";
mkdir($dirpath . "/thumbs");
}
if (!file_exists($dirpath . "/browser"))
{
echo "creating browser directory"."\n";
mkdir($dirpath . "/browser");
}
//inicializo $key porque estoy utilizando un nuevo tipo de orden
$key=0;
while ($file = readdir($dir))
{
$localpath = $dirpath.$file;
if (is_file($localpath) && ((substr(strtolower($file), -3, 3) == "jpg")))
{
//$key = filemtime($localpath);
//antes ordenaba por fechas y yo lo voy a ordenar por nombre
$files[$key] = $file;
//esto es mío
$key+=1;
}
}
//aquí ya no necesito ordenar
//ksort($files);
sort($files);
//esto lo voy a cambiar porque lo que quiero es redondear hacía arriba
//$pages = intval(count($files) / $thumbsPerPage)+1;
$aux = intval(count($files) / $thumbsPerPage);
if ($aux*$thumbsPerPage == count($files))
{
$pages = $aux;
}
else
{
$pages = $aux+1;
}
if (!empty($_GET['page']))
{
$currentPage = $_GET['page'];
} else {
$currentPage = 1;
}
$navString = "";
$navString .= ' <tr>'."\n\t\t".'<td colspan="4" align="center">'."\n\t\t\t".'<a href="..">Subir un directorio</a> '."\n";
if ($currentPage != 1)
{
$navString .= '<a href="' . $_SERVER["PHP_SELF"] . '?page=' . ($currentPage-1) . '"><<</a> '."\n";
}
$temp = "";
for ($p=1; $p<=$pages; $p++)
{
if ($p == $currentPage)
{
$temp .= $p . " | ";
}
else
{
$temp .= '<a href="' . $_SERVER["PHP_SELF"] . '?page=' . $p . '">' . $p . "</a> | "."\n";
}
}
$navString .= substr($temp, 0, -13);
if ($currentPage != $pages)
{
$navString .= ' <a href="' . $_SERVER["PHP_SELF"] . '?page=' . ($currentPage+1) . '">>></a>'."\n";
}
$navString .= '</td></tr>'."\n";
echo $navString;
echo "<tr>"."\n";
reset ($files);
while ($currentItem < (($currentPage -1) * $thumbsPerPage))
{
next ($files);
$currentItem++;
}
$count = 0;
for ($a=0; $a<$thumbsPerPage; $a++)
{
if (substr(strtolower(current($files)), -3, 3) == "jpg")
{
if (!file_exists($dirpath . "thumbs/" . current($files)))
{
$original = ImageCreateFromJPEG($dirpath . current($files));
$x = ImageSX($original);
$y = ImageSY($original);
$newX = 600;
$ratio = $newX / $x;
$newY = $y * $ratio;
$thumbnail = ImageCreateTrueColor($newX,$newY);
ImageCopyResized($thumbnail, $original, 0, 0, 0, 0, $newX, $newY, $x, $y);
ImageJPEG($thumbnail, $dirpath . "/browser/" . current($files), 100);
ImageDestroy($thumbnail);
ImageDestroy($original);
}
if (!file_exists($dirpath . "thumbs/" . current($files)))
{
$original = ImageCreateFromJPEG($dirpath . current($files));
$x = ImageSX($original);
$y = ImageSY($original);
$newX = 120;
$ratio = $newX / $x;
$newY = $y * $ratio;
$thumbnail = ImageCreateTrueColor($newX,$newY);
ImageCopyResized($thumbnail, $original, 0, 0, 0, 0, $newX, $newY, $x, $y);
ImageJPEG($thumbnail, $dirpath . "/thumbs/" . current($files), 100);
ImageDestroy($thumbnail);
ImageDestroy($original);
}
echo '<td width="140" align="center" valign="top">'."\n";
echo '<table border="0" width="135"><tr><td colspan="2" style="padding-top:3px">'."\n";
echo '<a href="' . $_SERVER["PHP_SELF"] . '?action=view&filename=' . current($files) . '&page=' . $currentPage . '" class="imglink"><img src="thumbs/' . current($files) . '" border="0"></a>'."\n";
echo '</td></tr>'."\n";
echo '<tr><td width="100">'."\n";
echo '<span class="listCaption">' . str_replace("_", " ", substr(current($files), 0, -4)) . '</span>'."\n";
echo '</td><td width="35">'."\n";
echo '<a href="' . $_SERVER["PHP_SELF"] . '?action=view&filename=' . current($files) . '&page=' . $currentPage . '" class="print"><img src="'."$SERVER_HOST".'/static/view.gif" height="16" width="16" alt="View" border="0"></a>'."\n";
echo '<a href="' . current($files) . '" class="print"><img src="'."$SERVER_HOST".'/static/print.gif" height="16" width="16" alt="Print" border="0"></a>'."\n";
echo '</td></tr></table>'."\n";
echo '</td>'."\n";
$count++;
if ($count % 4 == 0)
{
echo '</tr><tr>'."\n";
}
}
next ($files);
}
echo "</tr>"."\n";
echo $navString;
echo "</table>"."\n";
}
function viewImage()
{
outHead();
echo ' <body class="viewBody">'."\n";
echo ' <table align="center">'."\n";
echo ' <tr><td colspan="2">'."\n";
echo ' <img src="browser/' . $_GET['filename'] . '" alt="Gallery Image"> '."\n";
echo ' </td></tr>'."\n";
echo ' <tr valign="bottom">'."\n";
echo ' <td class="viewCaption">'."\n";
echo str_replace("_", " ", substr($_GET['filename'], 0, -4));
echo ' </td><td align="right">'."\n";
echo '<a href="' . $_GET['filename'] . '" class="print"><img src="'."$SERVER_HOST".'/static/print.gif" height="16" width="16" alt="Print" border="0"></a>'."\n";
echo ' <a href="' . $_SERVER["PHP_SELF"] . '?action=list&page=' . $_GET['page'] . '" >Back</a>'."\n";
echo ' </td></tr></table>'."\n";
}
function outHead()
{
global $galleryTitle;
echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">'."\n";
echo '<html>'."\n";
echo '<head>'."\n";
/*
echo date( "M d Y H:i:s",mktime(0,0,0,1,1,1998) )."\n";
echo gmdate( "M d Y H:i:s",mktime(0,0,0,1,1,1998) )."\n";
echo date("l dS of F Y h:i:s A")."\n";
*/
echo ' <title>' . $galleryTitle . '</title>'."\n";
echo ' <style type="text/css">'."\n";
echo ' .listBody'."\n";
echo ' {'."\n";
echo ' font-family:arial; '."\n";
echo ' font-size:12px; '."\n";
echo ' background:#44bbbb;'."\n";
echo ' }'."\n";
echo ' .small'."\n";
echo ' {'."\n";
echo ' font-size:10px; '."\n";
echo ' font-weight:normal'."\n";
echo ' }'."\n";
echo ' .listCaption'."\n";
echo ' {'."\n";
echo ' font-family:arial; '."\n";
echo ' font-size:11px; '."\n";
echo ' font-weight:bold'."\n";
echo ' }'."\n";
echo ' .head1 '."\n";
echo ' {'."\n";
echo ' font-family:arial;'."\n";
echo ' font-size:24px;'."\n";
echo ' color:#ffff88;'."\n";
echo ' font-weight:bold'."\n";
echo ' }'."\n";
echo ' .head2'."\n";
echo ' {'."\n";
echo ' font-family:arial; '."\n";
echo ' font-size:16px; '."\n";
echo ' color:#88ffff'."\n";
echo ' }'."\n";
echo ' td'."\n";
echo ' {'."\n";
echo ' font-family:arial;'."\n";
echo ' font-size:13px;'."\n";
echo ' font-weight:bold;'."\n";
echo ' }'."\n";
echo ' a:link,'."\n";
echo ' a:visited,'."\n";
echo ' a:active { color: #224466; }'."\n";
echo ' a:hover { color: #ffff00; }'."\n";
echo ' a.imglink:link,'."\n";
echo ' a.imglink:visited,'."\n";
echo ' a.imglink:active'."\n";
echo ' {'."\n";
echo ' display:block; '."\n";
echo ' border-top: 3px solid #888888; '."\n";
echo ' border-left: 4px solid #888888;'."\n";
echo ' border-bottom: 3px solid #888888;'."\n";
echo ' background-color:#888888'."\n";
echo ' }'."\n";
echo ' a.imglink:hover'."\n";
echo ' {'."\n";
echo ' display:block; '."\n";
echo ' border-top: 3px solid #88ff88; '."\n";
echo ' border-left: 4px solid #88ff88;'."\n";
echo ' border-bottom: 3px solid #88ff88;'."\n";
echo ' background-color:#88ff88'."\n";
echo ' }'."\n";
echo ' .viewBody'."\n";
echo ' {'."\n";
echo ' margin:20px 20px 20px 20px;'."\n";
echo ' background:#44bbbb; '."\n";
echo ' font-family:arial;'."\n";
echo ' font-size:10pt;'."\n";
echo ' font-weight:bold; '."\n";
echo ' }'."\n";
echo ' .viewCaption'."\n";
echo ' {'."\n";
echo ' font-family:arial;'."\n";
echo ' font-size:14pt;'."\n";
echo ' font-weight:bold; '."\n";
echo ' }'."\n";
echo ' </style>'."\n";
echo '</head>'."\n";
return;
}
?>
Tiene unos iconos asociados de una lupa y de una impresora. El de la lupa ve la imagen a 600 y el de la impresora ve la imagen original.
Segundo script
También tiene asociados iconos. Este script muestra la estructura de directorios en forma de arbol.Es de: http://www.metalhead.ws/phpbin/ y tiene modificaciones hechas por mi. Tampoco recuerdo que cosas le hice ni cuando. Creo que los comentarios que comienzan con javi los hice yo, pero no recuerdo que modifiqué ni por qué. Esposible que en metalhead todavía tengan el original. En este encuentro demasiados símbolos extraños.
Código fuente:
<?/*javi: inicializacie la variable z*/
/*global $zz;*/
$zz=0;
$galleryTitle = basename(getcwd())." (".date("l dS of F Y h:i:s A").")";
/* Sitemap version 2.0 (C) copyright Metalhead 2003
* P⨩na web: http://www.metalhead.ws/phpbin/
* Este script se distribuye bajo los t곭inos de la
* Licencia Pca General GNU (GNU GPL)
* Una copia de la GPL ha sido inclu con el script. */
/* Seccie Configuraci/
$showsize = 1; /* Mostrar el tamae los archivos? 1 = s�0 = no */
/* Array de tipos de archivos visualizados y sus respectivos iconos.
* Sintaxis: $display[filetype] = "picture"; */
$display[php] = "$SERVER_HOST/listado/php.gif";
$display[html] = "$SERVER_HOST/listado/html.gif";
$display[htm] = "$SERVER_HOST/listado/html.gif";
$display[shtml] = "$SERVER_HOST/listado/html.gif";
/* Array de directorios que no deben ser visualizados.
* Sintaxis: $excludedir[] = "directory"; */
$excludedir[] = "temp";
$excludedir[] = "tmp";
$excludedir[] = "browser";
$excludedir[] = "static";
$excludedir[] = "thumbs";
$excludedir[] = "test";
$excludedir[] = "cgi-bin";
$excludedir[] = "privado";
/* Array de archivos que no ser⮠visualizados. */
$excludefile[] = "index.php";
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<!-- <title>Mapa del sitio web</title> -->
<?
echo ' <title>' . $galleryTitle . '</title>'."\n";
?>
</head>
<body>
<b>Mapa del sitio web</b><p>
<?
$stime = gettimeofday();
/* prueba inicial... */
$root = getcwd();
/*echo "root=$root";
$largo=strlen($root);
echo " longitud root=$largo";*/
$pre = explode("/", $REQUEST_URI);
array_pop($pre);
$prefix = join("/", $pre);
/* Si el script se encuentra en un subdirectorio, descomenta las
* siguientes dos lineas para generar el Ⳣol de todos los
* archivos y directorios del servidor web */
/*NO QUIERO MOSTRAR EL ARBOL DE DIRECTORIOS POR ENCIMA DEL ACTUAL*/
/*POR ESO VOY A PONER COMO COMENCTARIO ESE CODIGO*/
//$root = str_replace($prefix, "", $root);
//$prefix = "";
//$root .= "/";
/* Visualiza el nombre del servidor y el directorio */
echo "<table cellspacing=0 cellpadding=0 border=0>\n";
echo "<tr><td><img align=absmiddle src=$SERVER_HOST/listado/server.gif> http://$SERVER_NAME";
echo "$prefix/";
echo "</td></tr><tr><td><img align=absmiddle src=$SERVER_HOST/listado/vertical.gif></td></tr>\n";
function get_extension($name)
{
$array = explode(".", $name);
$retval = strtolower(array_pop($array));
return $retval;
}
/* Rekurencja... */
function list_dir($chdir)
{
/*javi: el nivel de la recurrencia es:*/
/*global $zz;
global $zdir, $zdir1, $zcount;
/*echo " zz=$zz";*/
/*if ($zz == 0)
{
$zdir = getcwd();
$zdir1 = str_replace($root, "", $dir."/");
$zcount = substr_count($dir1, "/") + substr_count($dir1, "\\");
}
global $root;
global $largo;
echo "root=$root";
echo "largo=$largo"; */
/* algunas variables globales y un poco de orden */
global $root, $prefix, $PHP_SELF, $SERVER_NAME, $showsize, $display, $excludedir, $excludefile;
unset($sdirs);
unset($sfiles);
chdir($chdir);
$self = basename($PHP_SELF);
/* abrimos el directorio actual */
$handle = opendir('.');
/* leemos el directorio. Si el objeto
* es un directorio lo introducimos a
* $sdirs, si se trata de un archivo
* que nos interesa (exceptuando el
* que contiene este script), lo colocamos
* en $sfiles */
$dir = getcwd();
$dir1 = str_replace($root, "", $dir."/");
$count = substr_count($dir1, "/") + substr_count($dir1, "\\");
/*javi: voy a almacenar los nos de barras para restarlos despu곪/
/*echo " dir=$dir dir1=$dir1 count=$count";
echo " zdir=$zdir zdir1=$zdir1 zcount=$zcount";*/
/*echo " chdir=$chdir";*/
while ($file = readdir($handle))
{
if(is_dir($file) && $file !=
"." && $file != ".."
&& !in_array($file,
$excludedir))
{ $sdirs[] = $file; }
elseif(is_file($file)
&& $file != "$self"
&& array_key_exists(
get_extension($file),
$display)
&& !in_array($file,
$excludefile))
{ $sfiles[] = $file; }
}
/* contamos las barras para saber la profundidad a la que estamos
* o en la estructura de directorios y cu⯴os segmentos debemos
* usar de la rama en la que estamos */
$dir = getcwd();
$dir1 = str_replace($root, "", $dir."/");
$count = substr_count($dir1, "/") + substr_count($dir1, "\\");
/*javi: voy a almacenar los nos de barras para restarlos despu곪/
/*echo " dir=$dir dir1=$dir1 count=$count";*/
/*echo "dir= $dir dir1= $dir1 count=$count";*/
/* mostramos por pantalla los nombres y obtenemos la lista recursiva de los
* directorios */
if(is_array($sdirs)) {
sort($sdirs);
reset($sdirs);
for($y=0; $y<sizeof($sdirs); $y++) {
echo "<tr><td>";
for($z=1; $z<=$count; $z++)
{ echo "<img align=absmiddle src=$SERVER_HOST/listado/vertical.gif> "; }
if(is_array($sfiles))
{ echo "<img align=absmiddle src=$SERVER_HOST/listado/verhor.gif>"; }
else
{ echo "<img align=absmiddle src=$SERVER_HOST/listado/verhor1.gif>"; }
echo "<img align=absmiddle src=$SERVER_HOST/listado/folder.gif>
<a href=\"http://$SERVER_NAME$prefix$dir1$sdirs[$y]\">$sdirs[$y]</a>";
//echo " SERVER_NAME=$SERVER_NAME , prefix=$prefix , dir1=$dir1 , sfiles[$y]=$sfiles[$y]";
/*javi: voy a controlar la profundidad de la recurrencia*/
++$zz;
list_dir($dir."/".$sdirs[$y]);
}
}
chdir($chdir);
/* visitamos cada uno de los elementos del array de archivos
* y los imprimimos */
if(is_array($sfiles)) {
sort($sfiles);
reset($sfiles);
$sizeof = sizeof($sfiles);
/* ࠱u顴ipos de ficheros deben ser visualizados? */
for($y=0; $y<$sizeof; $y++) {
echo "<tr><td>";
for($z=1; $z<=$count; $z++)
{ echo "<img align=absmiddle src=$SERVER_HOST/listado/vertical.gif> "; }
if($y == ($sizeof -1))
{ echo "<img align=absmiddle src=$SERVER_HOST/listado/verhor1.gif>"; }
else
{ echo "<img align=absmiddle src=$SERVER_HOST/listado/verhor.gif>"; }
echo "<img align=absmiddle src=\"";
echo $display[get_extension($sfiles[$y])];
echo "\"> ";
//echo "<a href=\"http://$SERVER_NAME$prefix/$dir1$sfiles[$y]\">$sfiles[$y]</a>";
echo "<a href=\"http://$SERVER_NAME$prefix$dir1$sfiles[$y]\">$sfiles[$y]</a>";
//echo " SERVER_NAME=$SERVER_NAME , prefix=$prefix , dir1=$dir1 , sfiles[$y]=$sfiles[$y]";
if($showsize) {
$fsize = @filesize($sfiles[$y])/1024;
printf(" (%.2f kB)", $fsize);
}
echo "</td></tr>";
echo "<tr><td>";
}
echo "<tr><td>";
for($z=1; $z<=$count; $z++)
{ echo "<img align=absmiddle src=$SERVER_HOST/listado/vertical.gif> "; }
echo "</td></tr>\n";
}
}
list_dir($root);
echo "</table>\n";
/* ࠃu⯴o tiempo nos llev/
$ftime = gettimeofday();
$time = round(($ftime[sec] + $ftime[usec] / 1000000) - ($stime[sec] + $stime[usec] / 1000000), 5);
echo "<center>Tiempo de generacie la p⨩na: $time segundos</center>\n";
echo "<A HREF=http://$HTTP_HOST>http://$HTTP_HOST</A>\n";
?>
</body></html>
Tercer script
Lo he sacado de: http://www.wextensible.com/herramientas/explorador-php/Es muy interesante porque está centrado en la seguridad.
Código fuente:
<?php/* EXPLORADOR DE CARPETAS Y ARCHIVOS CON PHP
* Documento explora.php
* Explorador de carpetas y archivos usando el sistema de ficheros de PHP.
* Autor: Andrés de la Paz © 2010
* Contacto: www.wextensible.com
*/
//Por defecto la primera vez que abrimos este explorador toma
//como carpeta la del php actual. La constante __FILE__ es la
//ruta del archivo PHP actual. Con dirname obtenemos la carpeta.
$ruta = dirname(__FILE__)."/";
//Para abrir archivos necesitaremos poner la codificación
//adecuada con estos valores
$array_codif = Array(
"UTF-8",
"ISO-8859-1",
"ISO-8859-15"
);
//Por defecto usamos esta para htmlentities (ver más abajo)
$codificacion = "ISO-8859-1";
//Vemos si hay algo en el GET
if (isset($_GET)){
foreach($_GET as $campo=>$valor){
switch ($campo) {
//Obtenemos una ruta, carpeta o archivo
case "una-ruta":
$ruta = htmlspecialchars($valor, ENT_QUOTES);
if (get_magic_quotes_gpc() == 1) $ruta = stripslashes($ruta);
break;
//Vemos la codificación
case "una-codificacion":
$codificacion = htmlspecialchars($valor, ENT_QUOTES);
if (get_magic_quotes_gpc() == 1) $codificacion = stripslashes($codificacion);
break;
}
}
}
//Si la ruta es vacía, pone la del presente script
if ($ruta == "") $ruta = dirname(__FILE__)."/";
//Esta variable contendrá la lista de nodos (carpetas y archivos)
$presenta_nodos = "";
//Esta variable es para el contenido del archivo
$presenta_archivo = "";
//Si la ruta es una carpeta, la exploramos. Si es un archivo
//sacamos también el contenido del archivo.
if (is_dir($ruta)){//ES UNA CARPETA
//Con realpath convertimos los /../ y /./ en la ruta real
$ruta = realpath($ruta)."/";
//exploramos los nodos de la carpeta
$presenta_nodos = explora_ruta($ruta);
} else {//ES UN ARCHIVO
$ruta = realpath($ruta);
//Sacamos también los nodos de la carpeta
$presenta_nodos = explora_ruta(dirname($ruta)."/");
//Y sacamos el contenido del archivo
$presenta_archivo = "<br />CONTENIDO DEL ARCHIVO: ".
$ruta."<pre>".
explora_archivo($ruta, $codificacion).
"</pre>";
}
//Función para explorar los nodos de una carpeta
//El signo @ hace que no se muestren los errores de restricción cuando
//por ejemplo open_basedir restringue el acceso a algún sitio
function explora_ruta($ruta){
//En esta cadena haremos una lista de nodos
$cadena = "";
//Para agregar una barra al final si es una carpeta
$barra = "";
//Este es el manejador del explorador
$manejador = @dir($ruta);
while ($recurso = $manejador->read()){
//El recurso sera un archivo o una carpeta
$nombre = "$ruta$recurso";
if (@is_dir($nombre)) {//ES UNA CARPETA
//Agregamos la barra al final
$barra = "/";
$cadena .= "CARPETA: ";
} else {//ES UN ARCHIVO
//No agregamos barra
$barra = "";
$cadena .= "ARCHIVO: ";
}
//Vemos si el recurso existe y se puede leer
if (@is_readable($nombre)){
$cadena .= "<a href=\"".$_SERVER["PHP_SELF"].
"?una-ruta=$nombre$barra\">$recurso$barra</a>";
} else {
$cadena .= "$recurso$barra";
}
$cadena .= "<br />";
}
$manejador->close();
return $cadena;
}
//Función para extraer el contenido de un archivo
function explora_archivo($ruta, $codif){
//abrimos un buffer para leer el archivo
ob_start();
readfile($ruta);
//volcamos el buffer en una variable
$contenido = ob_get_contents();
//limpiamos el buffer
ob_clean();
//retornamos el contenido después de limpiarlo
//aplicando la codificación seleccionada
return htmlentities($contenido, ENT_QUOTES, $codif);
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="es">
<head>
<title>Explora carpetas</title>
<meta http-equiv="X-UA-Compatible" content="IE=8" />
...
</head>
<body>
...
<h3>Opciones de configuración PHP (restringen explorador)</h3>
<ul>
<?php
$opciones = "<li><a href=\"http://docs.php.net/manual/es/ini.sect.safe-mode.php#ini.safe-mode\">".
"<code>safe_mode</code></a> ";
if (ini_get("safe_mode")){
$opciones .= ": activado";
} else {
$opciones .= ": desactivado";
}
$opciones .= "</li>".
"<li><a href=\"http://docs.php.net/manual/es/ini.core.php#ini.open-basedir\">".
"<code>open_basedir</code></a>: ".ini_get("open_basedir")."</li>".
"<li><a href=\"http://docs.php.net/manual/es/function.getmyuid.php\">".
"<code>getmyuid()</code></a>: ".getmyuid()."</li>".
"<li><a href=\"http://docs.php.net/manual/es/function.getmygid.php\">".
"<code>getmygid()</code></a>: ".getmygid()."</li>";
echo $opciones;
?>
</ul>
<h3>Exploración</h3>
<form action="<?php echo $_SERVER["PHP_SELF"] ?>" method="get">
Ruta <small>(En Windows pueden usarse ambas barras "/" y "\")</small>
<br /><textarea rows="5" cols="50" name="una-ruta"
><?php echo $ruta; ?></textarea><br />
Codificación para ver archivos:
<select name="una-codificacion">
<?php
foreach ($array_codif as $i=>$val){
echo "<option value=\"$val\"";
if ($codificacion == $val) echo " selected=\"selected\"";
echo ">$val</option>";
}
?>
</select><br />
<input type="submit" value="enviar" />
</form>
<?php
echo "<br />$presenta_nodos";
echo "<br />$presenta_archivo";
?>
</body>
</html>
Cuarto script
Tampoco recuerdo si lo copié o lo creé. Es muy sencillo y permite listar el contenido de la carpeta, pero no permite navegar.Código fuente:
<html><head>
<title>Videos de Miki</title>
</head>
<body>
<?php
$dirpath = getcwd() . "/";
$dir = opendir($dirpath);
$files = array();
$i=0;
while ($file = readdir($dir))
{
$files[$i] = $file;
$i+=1;
}
sort($files);
$i=0;
while ($files[$i])
{
if (is_dir($files[$i]))
{
echo '<a href=./'.$files[$i].'>'.$files[$i];
echo '<br>';
}
$i+=1;
}
?>
</body>
</html>
Otro script
Tiene un funcionamiento adecuado excepto por el detalle de que no crea las vistas previas y por lo tanto tiene que generar la página completa cada vez que se visita. No me parece ni necesario ni adecuado utilizar tanta potencia para un proceso que se podría realizar una sola vez.Fuente: http://www.syntaxerror.es/proyectos/minigallery
Plugin Name: WP-MiniGallery
Tiene 809 líneas y ocupa 25 K. Excesivo para ponerlo aquí.
Definitivo
A partir de aquí habrá que ir sacando el "definitivo" porque empiezo a estar cansado de poner el script cada vez que creo un directorio con fotos.La idea es crear una carpeta con un nombre que no se vaya a indexar y que sirva como base_de_datos/tabla_de_localización_de_ficheros (será la que vaya explorando el script en vez de la "real") y que cuando se visita una carpeta:
- Si es la primera vez que se visita, cree una vista previa del contenido y lo visualice.
- Si ya se ha visitado antes, cargue la vista previa anterior y compruebe si se ha cambiado algo desde la última visita:
- Si ha habido cambios, se cambie la página guardada.
- Si no ha habido cambios todo sigue igual.
- ... ya se me irán ocurriendo más cosas
Tenía una duda sobre si debería utilizar md5 o sha y después de buscar mucho he encontrado algo (todo el mundo hace las comparativas refiriendose a la seguridad de contraseñas y yo deseo comparar un listado de ficheros): http://www.monografias.com/trabajos76/funciones-hash-criptografia/funciones-hash-criptografia2.shtml
En el apartado Pasos y tasas de cifra en MD5 y SHA-1.
Por estos motivos la ejecución del algoritmo SHA-1 es más lenta que la de MD5 usando un mismo hardware, por ejemplo un programa realizado en C entregaba en un Pentium a 266 Mhz (no importa que esta velocidad sea tan baja) una tasa del orden de 20 Mbits/seg para SHA-1 y para MD5 esta tasa llegaba a los 60 Mbits/seg.Puesto que lo deseado es que sea rápido y consumir pocos recursos, en este caso lo ideal es md5.
El código fuente-chapuza de lo que llevo hasta ahora es:
/////////////////////////////////////////////////////////////////////////////////////////////
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="es">
<head>
<title>Explora carpetas</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<?php
$ruta = dirname(__FILE__)."/";
echo "La ruta es: ".$ruta."<br />";
$privado=$ruta."privado";
//en su momento habrá que crear una opción para que cree o actualice todo el arbol
if(!file_exists($privado)){
echo 'No existe '.$privado.'<br />';
echo 'Se va a crear un directorio ...<br />';
mkdir ($privado,0777);//habría que comprobar si se ha creado por si no se tiene permiso de escritura
if(!file_exists($privado)){
echo 'Ha sido imposible crear el directorio privado. Se abandona la ejecución<br />';
return;
}else{
echo 'Se ha creado el directorio y no ha habido problemas<br />';
}
}else{
echo 'Existe el fichero o el directorio. Falta hacer esa comprobación<br />';
if(is_dir($privado)){
echo 'Ya existe el directorio. Todo va bien...<br />';
}else{
echo 'Hay un problema. Existe un fichero de nombre "privado". Imposible resolverlo desde aquí<br />';
return;
}
}
//Si ha llegado aquí es que todo ha ido bien. Se supone que se ha comprobado si se creó en caso de que se haya tenido que crear.
//Debería comprobar si hay un fichero index.html. En caso de que exista cargarlo y comprobar si ha habido cambios. En caso de que no exista, generarlo a partir del contenido.
//explorar el directorio y crear el fichero index.html
if(!file_exists($privado.index.html)){
//hay que generarlo para poder visualizarlo
echo 'No existe index.html<br />';
$index=$privado.'/index.html';
echo 'el fichero index.html se va a crear en: '.$index.'<br />';
$fp=fopen($index,"w");//'w' Para solo escritura. Se pone el puntero al principio, y si existe, BORRA todo su contenido. Si no existe el fichero, LO CREA.
//ya se tiene un puntero a fichero llamado fp que apunta al comienzo de un fichero vacío.
//algo va mal en este bloque
//está localizado. al crearlo no le da permiso de escritura.
//Ya pertenecía al usuario/grupo www-data
//dando permisos 777 funciona una vez y se los quita
echo 'los permisos son: '.base_convert(fileperms($privado),10,8).'<br />';
//llamar a la función que escribe el fichero html
//a su vez esta función llama a otra que escribe las cabeceras
fwrite($fp, '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">'."\n");
fwrite($fp, '<html xmlns="http://www.w3.org/1999/xhtml" lang="es">'."\n");
fwrite($fp, '<head>'."\n");
fwrite($fp, '<title>Probando...</title>'."\n");
fwrite($fp, '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">'."\n");
fwrite($fp, '</head>'."\n");
fwrite($fp, '<body>'."\n");
fwrite($fp, '<h1>Titulo</h1>'."\n");
fwrite($fp, '1');
fwrite($fp, '23');
fwrite($fp, '45<br />'."\n\n\n\n\n");
fwrite($fp, '<h1>hache 1</h1>');
fwrite($fp, '</body>'."\n");
fwrite($fp, '</html>'."\n");
echo 'los permisos son: '.base_convert(fileperms($privado),10,8).'<br />';
fclose($fp);
}else{
echo 'Ya esixte index.html. Se procede a cargarlo<br />';
//hay que cargar el existente y comprobarlo en segundo plano
//la comprobación debe ser sencilla, contar el número de ficheros y compararlo con un número alamacenado
//y si son iguales hacer una comprobación tipo md5 con el listado de ficheros
//string md5 ( string $str [, bool $raw_output = false ] )
//str es una cadena
}
?>
</body>
</html>
/////////////////////////////////////////////////////////////////////////////////
lunes, 30 de junio de 2014
Crear un servidor proxy para navegación en la LAN (o internet) desde el exterior
Buscando información he encontrado este blog tiene algo similar a mi raspberry (aunque usa demasiado el modo gráfico para mi gusto):
Tambien este sitio tiene algo interesante para evitar ataques por fuerza bruta (failtoban):
Sigo buscando. De momento se que se puede configuar el apache en modo reverse_proxy pero es demasiado complicado porque hay que crear sitios virtuales...
Busco algo del tipo anonymizer, proxify, 2anonymousproxy, kproxy, anonymouse, zend2...
Parece que este puede valer: http://norfipc.com/articulos/esconder-ip-crear-web-proxy.html
Llevarlo a su ubicación definitiva...
Descomprimir en esa ubicación. Saldrá una carpeta serv.
Voy a restringir el acceso a esa carpeta. En este caso: /home/pi/web_proxy/serv
Pondré el fichero con user/pass en la carpeta superior porque no es accesible desde la web.
Si va bien, probar: https://raspberrypi/proxy
Finalmente probar desde fuera de la LAN (mediante noip.com)
Tambien este sitio tiene algo interesante para evitar ataques por fuerza bruta (failtoban):
Sigo buscando. De momento se que se puede configuar el apache en modo reverse_proxy pero es demasiado complicado porque hay que crear sitios virtuales...
Busco algo del tipo anonymizer, proxify, 2anonymousproxy, kproxy, anonymouse, zend2...
Parece que este puede valer: http://norfipc.com/articulos/esconder-ip-crear-web-proxy.html
Procedimiento
Descargar http://norfipc.com/ftp/varios/proxy-glype-1.1.zipLlevarlo a su ubicación definitiva...
Descomprimir en esa ubicación. Saldrá una carpeta serv.
Voy a restringir el acceso a esa carpeta. En este caso: /home/pi/web_proxy/serv
Pondré el fichero con user/pass en la carpeta superior porque no es accesible desde la web.
- htpasswd -cb /home/pi/web_proxy/.htpasswd xxxusuarioxxx xxxpasswordxxx
- cd /etc/apache2/conf.d/
- ls -la
- En este caso voy a usar el de miki (ya está configurado): cp miki.conf proxy.conf
- Modificar para adaptar a las nuevas posiciones. Resultado final:
- cat proxy.conf
Alias /proxy /home/pi/web_proxy/serv
<Directory /home/pi/web_proxy/serv/>
Options +FollowSymLinks
AllowOverride All
order allow,deny
allow from all
AuthUserFile /home/pi/web_proxy/.htpasswd
AuthType Basic
AuthName "Acceso al proxy"
<LIMIT GET POST>
require valid-user
</LIMIT>
</Directory>
- Reiniciar apache: sudo service apache2 restart
Probar
Escribir en el navegador raspberrypi/proxySi va bien, probar: https://raspberrypi/proxy
Finalmente probar desde fuera de la LAN (mediante noip.com)
He encontrado al autor y la última versión de momento...
- http://www.glype.com/
- glype-1.4.9.zip
- A partir de aquí voy a repetir pasos y modificar lo que sea necesario para tratar de que funcione igual (sin cambiar archios de configuración).
domingo, 29 de junio de 2014
Establecer usuario/contraseña para acceso a directorio web en Apache
Base: http://jpcozar-public.wikidot.com/establecer-usuario-contrasena-para-directorio-web-en-apache
miércoles, 25 de junio de 2014
Configurar soporte HTTPS en Apache
Fuente/agradecimientos: Amor Rodriguez Navarro (Creo que ese es su nombre)
Se va a hacer para que salga la conexión segura con el sitio que esté por defecto.
cd /etc
sudo mkdir certificados
cd certificados
#generar los certificados y guardarlos en /etc/certificados
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout servidor.key -out servidor.crt
#copiar los certificados en /etc/ssl/private/
sudo cp servidor.crt servidor.key /etc/ssl/private/
Se va a hacer para que salga la conexión segura con el sitio que esté por defecto.
Crear los certificados autofirmados
#Se va a hacer guardando una copia de los certificados en /etc/certificadoscd /etc
sudo mkdir certificados
cd certificados
#generar los certificados y guardarlos en /etc/certificados
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout servidor.key -out servidor.crt
#copiar los certificados en /etc/ssl/private/
sudo cp servidor.crt servidor.key /etc/ssl/private/
Activar el módulo ssl
a2enmod ssl
Insertar los certificados al sitio por defecto
sudo nano /etc/apache2/sites-available/default-ssl
#Modificar las líneas SSLCertificateFile y SSLCertificateKeyFile (claves pública y privada respectivamente) para que apunten a las que se acaban de crear servidor.crt y servidor.key
#Deben quedar así:
- SSLCertificateFile /etc/ssl/private/servidor.crt
- SSLCertificateKeyFile /etc/ssl/private/servidor.key
Activar el host con el comando:
sudo a2ensite default-ssl
Reinicar apache
#El comando anterior indica al terminar que hay que reinicar apache: sudo service apache2 reload
#O el clásico: /etc/init.d/apache2 restart
Próximo paso: Crea tu propia entidad certificadora
lunes, 23 de junio de 2014
Instalar no-ip (para poder utilizar opencloud)
Darse de alta en el sitio:
#! /bin/sh
# /etc/init.d/noip2
### BEGIN INIT INFO
# Provides: noip2
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Simple script to start a program at boot
# Description: A simple script from www.stuffaboutcode.com which will start / stop a program a boot / shutdown.
### END INIT INFO
# If you want a command to always run, put it here
# Carry out specific functions when asked to by the system
case "$1" in
start)
echo "Starting noip2"
# run application you want to start
/usr/local/bin/noip2
;;
stop)
echo "Stopping noip2"
# kill application you want to stop
killall noip2
;;
*)
echo "Usage: /etc/init.d/noip2 {start|stop}"
exit 1
;;
esac
exit 0
- Rellenar los datos en www.noip.com
- Elegir el modo: Free Sign Up
- INSTALAR NO-IP EN LA RASBERRY
- Crear un directorio para descomprimir el fichero que se debe descargar
- cd
- mkdir noip
- Suponiendo que se esté usando el usuario pi, esto sería similar a utilizar: mkdir /home/pi/noip
- Descargar: wget http://www.no-ip.com/client/linux/noip-duc-linux.tar.gz
- Descomprimir: tar vzxf noip-duc-linux.tar.gz
- Esto creará una carpeta del tipo: noip-x.x...
- Ir a esa nueva carpeta compilar e instalar:
- sudo make
- sudo make install
- pedirá el nombre de usuario y contraseñas dadas durante el registro
- Hacer correr noip: sudo /usr/local/bin/noip2
- Hacer que se inicie automáticamente al reiniciar el sistema:
- Crear el fichero noip2 en /etc/init.d: sudo nano /etc/init.d/noip2
- Contenido del fichero al final de esta pubicación (fondo amarillo). El script se puede encontrar en: www.stuffaboutcode.com
- Dar permiso de ejecución al script: sudo chmod 755 /etc/init.d/noip2
- Probar si se para, si se inicia y si se reinicia.
- sudo /etc/init.d/noip2 stop
- sudo /etc/init.d/noip2 start
- sudo /etc/init.d/noip2 restart
- Registrar el script para que se inicie con el sistema:
- sudo update-rc.d noip2 defaults
- Se ha terminado en la máquina local. Queda configurar el servicio.
- He hecho por medio la configuración de raspberry para dar tiempo a recibir el correo de verificación.
- Verificar la dirección de correo electrónico suministrado.
- Seleccionar Host/Redirects (parte superior de la columna izquierda)
- Add a Host
- Elegir el nombre y el dominio (en este caso entre los dominios gratuitos)
- Ya solo falta abrir puertos en el router. Lo más facil es direccionar el 80 de la raspberry al 8080 de internet (es al que apunta no-ip por defecto).
- No se que pasará en otras conexiones, en mi conexión actual no me deja probarlo. Tuve que utilizar un proxy para el navegador.
- El día que lo busqué: anonymous proxy free online
- Probé el primero de la lista: www.zend2.com
- Y funcionó bien: Al poner la dirección: xxxx.no-ip.org visita: mi-ip:8080
- Ya solo queda añadir a esa /owncloud (como mi conexión no es segura no he introducido user/pass)
- El proximo paso será asegurar la conexión.
- En vez de navegar a través de un proxy es más senillo utilizar el navegador de tor:
- https://www.torproject.org/
- Tiene más utilidades, pero para esto es sencillísimo y sin necesidad de complicarse buscando un proxy porque seguro que el anterior pronto deja de ser gratuito.
#! /bin/sh
# /etc/init.d/noip2
### BEGIN INIT INFO
# Provides: noip2
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Simple script to start a program at boot
# Description: A simple script from www.stuffaboutcode.com which will start / stop a program a boot / shutdown.
### END INIT INFO
# If you want a command to always run, put it here
# Carry out specific functions when asked to by the system
case "$1" in
start)
echo "Starting noip2"
# run application you want to start
/usr/local/bin/noip2
;;
stop)
echo "Stopping noip2"
# kill application you want to stop
killall noip2
;;
*)
echo "Usage: /etc/init.d/noip2 {start|stop}"
exit 1
;;
esac
exit 0
domingo, 4 de mayo de 2014
minidlna
El único problema ha sido con la base de datos.
En primer lugar la he puesto en el disco externo mediante un enlace blando.
En segundo lugar, no siempre se actualiza al poner nuevos elementos o reiniciar. La solución es el comando:
En primer lugar la he puesto en el disco externo mediante un enlace blando.
En segundo lugar, no siempre se actualiza al poner nuevos elementos o reiniciar. La solución es el comando:
- sudo service minidlna force-reload
owncloud
La parte sencilla es:
sudo apt-get install owncloud
Se empieza a complicar con el mysql (por defecto crea el usuario root sin password)
Y termina de complicarse porque el disco externo que tengo está formateado en NTFS y requiere que el usuario:grupo sea www-data:www-data con permisos 770.
Este problema ya me lo daba el samba (los usuarios que en un principio solo tenían permiso de lectura en realidad tenían todos los permisos).
He decidido hacer montajes "secundarios" con el nombre de usuario/grupo adecuados y los permisos de acuerdo a lo que crea conveniente.
Empezaré con el de owncloud y si va bien se lo aplicaré al resto.
Paso 1: obtener identificadores de usuario y grupo:
sudo apt-get install owncloud
Se empieza a complicar con el mysql (por defecto crea el usuario root sin password)
Y termina de complicarse porque el disco externo que tengo está formateado en NTFS y requiere que el usuario:grupo sea www-data:www-data con permisos 770.
Este problema ya me lo daba el samba (los usuarios que en un principio solo tenían permiso de lectura en realidad tenían todos los permisos).
He decidido hacer montajes "secundarios" con el nombre de usuario/grupo adecuados y los permisos de acuerdo a lo que crea conveniente.
Empezaré con el de owncloud y si va bien se lo aplicaré al resto.
Paso 1: obtener identificadores de usuario y grupo:
- sudo id www-data
- En este caso obtengo: uid=33(www-data) gid=33(www-data) grupos=33(www-data)
- Por sencillez lo voy a poner en /mnt
- sudo mkdir /mnt/owncloud
- sudo chown www-data:www-data
- sudo chmod 770 www-data
- Dentro del directorio owncloud habrá una carpeta data (por seguir la estructura tradicional)
- Añadir una entrada (sudo nano /etc/fstab) en la que monte la carpeta /automount/owncloud (que contiene dentro la carpeta data) en /mnt/owncloud con permiso 770 (007) para el usuario 33 y el grupo 33.
- /automount/owncloud /mnt/owncloud uid=33,gid=33,umask=007 bind 0 0
- Si se desea aplicar sin reiniciar: sudo mount -a
domingo, 27 de abril de 2014
Servicios instalados
Me había olvidado un poco de todo esto.
Finalmente he instalado los siguientes servicios. No recuerdo cual fue el orden.
Tenía en mente instalar el apache openmeetings pero va a resultar demasiado pesado.
Finalmente he instalado los siguientes servicios. No recuerdo cual fue el orden.
- Sistema Operativo: raspbian
- ntfs-3g (disco externo USB NTFS) Elegir NTFS ha traido algunos problemas de seguridad...
- samba
- apache+php
- No recuerdo si el openssh venía de serie o tuve que instalarlo
- minidlna
- vsftp
- Proximamente: owncloud
- De seguridad porque al montar el disco externo debo dar a todo el mundo permiso de escritura y no puedo dar permisos especiales a carpetas/documentos.
- Que desde windows no podía acceder a los documentos de dos usuarios distintos sin reiniciar para que el windows olvidase las credenciales (ya se solucionó).
- Quitar el fichero de swap creado automáticamente por el sistema en la tarjeta SD y pasarlo a un fichero del disco físico.
- Poner doble IP a la máquina para que acceda a la dirección de prueba puesta en el router WIFI para las pruebas de radius.
Tenía en mente instalar el apache openmeetings pero va a resultar demasiado pesado.
Eliminar credenciales cacheadas por windows para acceso a recursos compartidos.
De momento el único problema que ha surgido. Solución: http://perezdecolosia.wordpress.com/2013/04/03/eliminar-credenciales-cacheadas-por-windows-para-acceso-a-recursos-compartidos/
Resumiendo:
Resumiendo:
- net use (muestra el nombre del recurso compartido cuyas credenciales vamos a eliminar)
- net use \\recurso compartido /del (donde \\recurso compartido es...)
- net use * /del
viernes, 21 de marzo de 2014
Tengo preparado todo para poner a funcionar el raspberry como servidor de archivos y de páginas web para centralizar la documentación de todo el mundo y no tener documentos dispersos por los ordenadores con distintas fechas, cambios...
Me falta mejorar la seguridad para abrirlo a internet, poner un servidor radius para dar servicio a la red inalámbrica y un honeypot.
Sobre ese último he encontrado algo que de momento no voy a poder utilizar porque me desmontaría todo lo anterior, pero podría venirle bien a muchísimos usuarios: http://www.raspberrypi.org/forum/viewtopic.php?f=76&t=59827 (HoneyPot casero con Raspberry Pi)
Ya iré apuntando los problemas/soluciones que vayan apareciendo.
He dedidido cambiar el honeypot por un servicio de nube (owncloud)
Me falta mejorar la seguridad para abrirlo a internet, poner un servidor radius para dar servicio a la red inalámbrica y un honeypot.
Sobre ese último he encontrado algo que de momento no voy a poder utilizar porque me desmontaría todo lo anterior, pero podría venirle bien a muchísimos usuarios: http://www.raspberrypi.org/forum/viewtopic.php?f=76&t=59827 (HoneyPot casero con Raspberry Pi)
Ya iré apuntando los problemas/soluciones que vayan apareciendo.
He dedidido cambiar el honeypot por un servicio de nube (owncloud)
Suscribirse a:
Entradas (Atom)