Crear miniaturas
<?php
/* tomamos los parámetros del programa */
/* que son $nombre para el fichero y $maxwidth y $maxheight */
/* para los tamaños máximo (predeterminado 200) */
/* */
/* la llamada se hará como */
/* imag.php?nombre=ruta/imag.jpg&maxwidth=100&maxheight=150 */
$maxwidth=$maxheight=200;
$nombre=$_GET['nombre'];
if (isset($_GET['maxwidth'])) $maxwidth=$_GET['maxwidth'];
if (isset($_GET['maxheight'])) $maxheight=$_GET['maxheight'];
if(empty($nombre))
$nombre="images/search.gif";
/* determinamos el tipo de fichero */
$tipo=substr($nombre,-3);
/* creamos la imagen a partir del fichero */
switch ($tipo)
{
case "jpg":
case "JPG":
$im1=imagecreatefromjpeg($nombre);
break;
case "gif":
case "GIF":
$a=explode("/",$nombre);
$a1=$a[count($a)-1];
if (!is_file("$_SERVER[DOCUMENT_ROOT]/imagenes/tmp/$a1.jpg"))
passthru("/usr/bin/convert $nombre $_SERVER[DOCUMENT_ROOT]/imagenes/tmp/$a1.jpg");
$nombre="imagenes/tmp/$a1.jpg";
$tipo="jpg";
$im1=imagecreatefromjpeg( "$nombre");
//unlink($nombre);
break;
case "png":
case "PNG":
$im1=imagecreatefrompng($nombre);
break;
default:
return;
}
/* calculamos lo tamaños proporcionales */
$tam = GetImageSize($nombre);
$imagewidth = $tam[0];
$imageheight = $tam[1];
$imagepropv=$imageproph=1;
if ($imagewidth > $maxwidth)
$imagepropv=$maxwidth/$imagewidth;
if ($imageheight > $maxheight)
$imageproph=$maxheight/$imageheight;
if ( $imagepropv>$imageproph)
$imagepropv=$imageproph;
$imagehsize= ceil($imagewidth*$imagepropv) ;
$imagevsize=ceil($imageheight*$imagepropv) ;
$im=imagecreate($imagehsize, $imagevsize);
ImageInterlace($im,1);
imagecopyresized ($im, $im1, 0, 0, 0, 0, $imagehsize, $imagevsize, ImageSX($im1), ImageSY($im1));
switch ($tipo)
{
case "jpg":
Header("Content-type: image/jpg");
Imagejpeg($im);
break;
case "png":
Header("Content-type: image/png");
Imagepng($im);
break;
default:
return;
}
ImageDestroy($im);
?>
Subir un fichero al servidor de un determinado tipo
Una pequeña modificación al anterior programa para que sólo permita subir ficheros con extensiones .gif, .jpg y .png. Además el tamaño máximo es de 5K. El segundo argumento de la función es el directorio donde queremos
<?php
function subirfichero($nombre,$directorio)
{
$ruta_fichero = "$_SERVER[DOCUMENT_ROOT]/$directorio/";
if (!is_dir("$ruta_fichero")) mkdir("$ruta_fichero",0777);
$ruta_relativa ="$directorio/";
if (eregi("gif$|jpg$|png$",$_FILES[$nombre]['name']) && $_FILES[$nombre]['size'] <52000 )
{
$name=$_FILES[$nombre]['name'];
$name = ereg_replace("[^a-z0-9._]", "",str_replace(" ", "_", str_replace("%20", "_", strtolower($name))));
$location = $ruta_fichero.$name;
copy($_FILES[$nombre]['tmp_name'],$location);
unlink($_FILES[$nombre]['tmp_name']);
$fichero = $ruta_relativa.$name;
}
return($fichero);
}
echo '<head>
<title>'.$_SERVER[PHP_SELF].'</title>
</head>
<html>
<body>';
if(isset($_POST[boton]))
{
$subido=subirfichero("mifichero","subidos");
if (!empty($fichero))
echo 'Fichero subido como '.$subido.' correctamente';
else
echo 'Ha surgido un error con el fichero';
}
echo '<form action="'.$_SERVER[PHP_SELF].'" method="post" enctype=multipart/form-data>
Fichero: <input type=file name=mifichero>
<input type="submit" name=boton value="Subir">
</form>';
echo "<a href=$_SERVER[PHP_SELF]>Recargar la Página</a>";
echo '</body>
</html>';
?>
Subir un fichero al servidor
Para subir un fichero al servidor, necesitamos:
un formulario un formulario con enctype=multipart/form-data
una entrada de tipo file para poder seleccionar el fichero.
En el siguiente ejemplo usamos una función para subir el fichero al servidor. La función toma como argumentos el nombre del campo del formulario correspondiente al fichero y el directorio donde lo queremos copiar. Además la función devuelve la ruta del fichero que hemos subido.
<?php
function subirfichero($nombre,$directorio)
{
$ruta_fichero = "$_SERVER[DOCUMENT_ROOT]/$directorio/";
if (!is_dir("$ruta_fichero")) mkdir("$ruta_fichero",0777);
$ruta_relativa ="$directorio/";
$name=$_FILES[$nombre]['name'];
$name = ereg_replace("[^a-z0-9._]", "",str_replace(" ", "_", str_replace("%20", "_", strtolower($name))));
$location = $ruta_fichero.$name;
copy($_FILES[$nombre]['tmp_name'],$location);
unlink($_FILES[$nombre]['tmp_name']);
$fichero = $ruta_relativa.$name;
return($fichero);
}
echo '<head>
<title>'.$_SERVER[PHP_SELF].'</title>
</head>
<html>
<body>';
if(isset($_POST[boton]))
{
subirfichero("mifichero","subidos");
}
echo '<form action="'.$_SERVER[PHP_SELF].'" method="post" enctype=multipart/form-data>
Fichero: <input type=file name=mifichero>
<input type="submit" name=boton value="Subir">
</form>';
echo "<a href=$_SERVER[PHP_SELF]>Recargar la Página</a>";
echo '</body>
</html>';
?>
La función también modifica el nombre del fichero para eliminar los posibles espacios y caracteres especiales.
Comprobar la existencia de un fichero
$fichero="imagenes/logo.png";
if (file_exists($fichero))
{
echo '<img src="/blog/ '.$fichero.' " alt="logo">';
}
else
{
echo ' Texto alternativo';
}
La función file_exists toma como argumento la ruta a un fichero. Hay que tener en cuenta que la ruta se especifica respecto a la raíz del sistema no a la raíz del servidor web. Para garantizar la portabilidad de los programas en distintos servidores , si tenemos que especificar la ruta absoluta, es aconsejable usar $_SERVER[DOCUMENT_ROOT] en las rutas de los ficheros. Las ruta relativas parten del directorio donde está el programa que se está ejecutando, por lo que esto puede ser particularmente necesario si estamos incluyendo el fichero desde otros programas que están en directorios diferentes.
Para el uso de un fichero en HTML debemos usar las rutas relativas al servidor Web, en otro caso el fichero no es accesible; por ejemplo si la raíz del servidor Web es /var/www/html, el fichero /var/www/html/programas/ejemplo.php lo podremos usar como:
<a href=/programas/ejemplo.php>programa ejemplo</a>
Sin embargo si queremos comprobar su existencia deberemos usar:
if (file_exists('/var/www/html/programas/ejemplo.ph'))
{
...
Mostrar el contenido de un directorio salvo los que empiezan por "."
$ruta = "./directorio";
$dir = opendir($ruta);
while (($file = readdir($dir))) {
if ( ! preg_match("/^\.", $file ) {
echo "$file\n";
}
}
En este caso hemos utilizado una expresión regular para comprobar que el nombre de fichero no empieza por un "."