<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style>
div.polaroid {
width: 30%;
background-color: white;
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
margin-bottom: 25px;
display: inline-block;
}
.polaroid img{
width:300px;
height:300px;
}
div.container {
text-align: center;
padding: 10px 20px;
}
</style>
</head>
<body>
<h1>Galería de imágenes</h1>
<a href="?borrar=pepe">test</a>
<form action="?" method="post" enctype="multipart/form-data">
Selecciona una foto:
<input type="file" name="foto">
<input type="submit">
</form>
<?php
$borrar= filter_input(INPUT_GET, "borrar");
if(!empty($borrar) && file_exists("fotos/".$borrar)){
unlink("fotos/".$borrar);
}
if (isset($_FILES['foto'])) {
if (strpos($_FILES['foto']['type'], "image") !== false) {
move_uploaded_file($_FILES['foto']['tmp_name'], "fotos/" . $_FILES['foto']['name']);
echo "Imagen subida<br>";
} else {
echo "Formato de archivo incorrecto. <br>";
}
}
//Ver un listado con los nombres de las imágenes que me han subido en fotos
$archivos = scandir("fotos");
array_shift($archivos);
array_shift($archivos);
foreach ($archivos as $archivo) {
?>
<div class="polaroid">
<img src="fotos/<?= $archivo ?>" alt="<?= $archivo ?>" style="width:100%">
<div class="container">
<p><?= $archivo ?> | <a href="?borrar=<?= $archivo ?>">Borrar</a></p>
</div>
</div>
<?php
}
?>
</body>
</html>
Funciones de ficheros
Crear carpeta:
mkdir("/ruta/a/mi/directorio", 0700);
Borrar carpeta:
rmdir('ejemplos');
Existe un fichero:
file_exists($nombre_fichero)
Es un fichero:
is_file('un_fichero.txt')
Es una carpeta:
is_dir('directorio/abc')
Obtener partes de una ruta:
$partes_ruta = pathinfo('/www/htdocs/inc/lib.inc.php');
echo $partes_ruta['dirname'], "\n";
echo $partes_ruta['basename'], "\n";
echo $partes_ruta['extension'], "\n";
echo $partes_ruta['filename'], "\n"; // desde PHP 5.2.0
Borrar un fichero (¡ojo!):
unlink('prueba.html')
Obtener carpeta actual:
getcwd()
Cambiar carpeta:
chdir
Recorrer archivos carpeta:
if ($gestor = opendir('.')) {
while (false !== ($entrada = readdir($gestor))) {
if ($entrada != "." && $entrada != "..") {
echo "$entrada\n";
}
}
closedir($gestor);
}
A un array:
$directorio = '/tmp'; $ficheros1 = scandir($directorio); $ficheros2 = scandir($directorio, 1); print_r($ficheros1); print_r($ficheros2);
Subir archivos con PHP
Necesitamos, en primer lugar, un formulario que debe ser de tipo post y multipart/form-data:
<form method="post" enctype="multipart/form-data">
<!-- opcionalmente podemos poner un límite en bytes del fichero, esto se comprueba antes de subir -->
<input type="hidden" name="MAX_FILE_SIZE" value="2048">
Selecciona una foto (tamaño máximo 2K):
<input type="file" name="foto">
<input type="submit">
</form>
Después lo recogemos en PHP dentro de la variable superglobal $_FILES. Contiene la siguiente información:
$_FILES[‘fichero_usuario’][‘name’]
El nombre original del fichero en la máquina del cliente.
$_FILES[‘fichero_usuario’][‘type’]
El tipo MIME del fichero, si el navegador proporcionó esta información. Un ejemplo sería «image/gif». Este tipo MIME, sin embargo, no se comprueba en el lado de PHP y por lo tanto no se garantiza su valor.
$_FILES[‘fichero_usuario’][‘size’]
El tamaño, en bytes, del fichero subido.
$_FILES[‘fichero_usuario’][‘tmp_name’]
El nombre temporal del fichero en el cual se almacena el fichero subido en el servidor.
$_FILES[‘fichero_usuario’][‘error’]
El código de error asociado a esta subida.
Los códigos de error son los siguientes:
UPLOAD_ERR_OK
Valor: 0; No hay error, fichero subido con éxito.
UPLOAD_ERR_INI_SIZE
Valor: 1; El fichero subido excede la directiva upload_max_filesize de php.ini.
UPLOAD_ERR_FORM_SIZE
Valor: 2; El fichero subido excede la directiva MAX_FILE_SIZE especificada en el formulario HTML.
UPLOAD_ERR_PARTIAL
Valor: 3; El fichero fue sólo parcialmente subido.
UPLOAD_ERR_NO_FILE
Valor: 4; No se subió ningún fichero.
UPLOAD_ERR_NO_TMP_DIR
Valor: 6; Falta la carpeta temporal. Introducido en PHP 5.0.3.
UPLOAD_ERR_CANT_WRITE
Valor: 7; No se pudo escribir el fichero en el disco. Introducido en PHP 5.1.0.
UPLOAD_ERR_EXTENSION
Valor: 8; Una extensión de PHP detuvo la subida de ficheros. PHP no proporciona una forma de determinar la extensión que causó la parada de la subida de ficheros; el examen de la lista de extensiones cargadas con phpinfo() puede ayudar. Introducido en PHP 5.2.0.
Comprobamos si nos han enviado un fichero, si es así tenemos que moverlo de la carpeta temporal al destino que queramos:
if (isset($_FILES['foto'])) {
//En este caso lo muevo a la carpeta 'fotos'
move_uploaded_file($_FILES['foto']['tmp_name'],
"fotos/" . $_FILES['foto']['name']);
}
Opcionalmente podemos hacer otro tipo de comprobaciones, tipo, tamaño, etcétera:
if (isset($_FILES['foto'])) {
if (strpos($_FILES['foto']['type'], "image")!==false &&
$_FILES['foto']['size']<2048){
move_uploaded_file($_FILES['foto']['tmp_name'],
"fotos/" . $_FILES['foto']['name']);
echo "Imagen subida";
} else {
echo "Formato de archivo incorrecto. Debe enviar una imagen menor de 2K";
}
Algunos enlaces del 4YFN
Plataforma para profesores:
Herramientas educativas a la programación:
Examen de candidatos online:
Tinder de candidatos y trabajos:
Desarrollo de aplicaciones de una manera rápida:
Vivero para startsups:
Kit de programación para drones:
Aceleradora de empresas:
Ejemplos ordenar
https://www.toptal.com/developers/sorting-algorithms
$a=[3,1,8,5,2,6];
print_r($a);
sort($a);
print_r($a);
$b=["juan","ana","pepe","eva"];
sort($b);
print_r($b);
$c="en un lugar de la mancha De cuyo nombre no quiero acordarme";
$d= explode(" ", $c);
sort($d);
print_r($d);
$asoc=["aa"=>10,"bb"=>5,"cc"=>3,"dd"=>9];
asort($asoc);
print_r($asoc);
ksort($asoc);
print_r($asoc);
$array1 = $array2 = array("img12.png", "img10.png", "img2.png", "img1.png");
asort($array1);
echo "Ordenación estándar\n";
print_r($array1);
natsort($array2);
echo "\nOrdenación de orden natural\n";
print_r($array2);
function comparacion($a,$b){
if (strlen($a)==strlen($b)){
return 0;
}
if (strlen($a)<strlen($b)){
return -1;
}
if (strlen($a)>strlen($b)){
return 1;
}
}
echo comparacion("cacahuete","hola");
usort($d,"comparacion");
print_r($d);
Ordenar arrays
| Nombre de la función | Ordena por | Mantiene asociación con las key | Orden de la clasificación | Funciones relacionadas |
|---|---|---|---|---|
| array_multisort() | valor | sí si es asociativa, no si es númerica | primer array u opciones de clasificación | array_walk() |
| asort() | valor | sí | menor a mayor | arsort() |
| arsort() | valor | sí | mayor a menor | asort() |
| krsort() | key | sí | mayor a menor | ksort() |
| ksort() | key | sí | menor a mayor | asort() |
| natcasesort() | valores | sí | natural, insensible a mayúsculas y minúsculas | natsort() |
| natsort() | valor | sí | natural | natcasesort() |
| rsort() | valor | no | mayor a menor | sort() |
| shuffle() | valor | no | aleatorio | array_rand() |
| sort() | valor | no | menor a mayor | rsort() |
| uasort() | valor | sí | definido por el usuario | uksort() |
| uksort() | key | sí | definido por el usuario | uasort() |
| usort() | valor | no | definido por el usuario | uasort() |
Ejercicio empleados
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form>
Nombre: <input type="text" name="nombre">
Sueldo: <input type="number" name="sueldo">
<input type="submit">
</form>
<?php
session_start();
$nombre = filter_input(INPUT_GET, "nombre");
$sueldo = filter_input(INPUT_GET, "sueldo", FILTER_VALIDATE_INT);
$borrar = filter_input(INPUT_GET, "borrar");
if (!empty($borrar)) {
unset($_SESSION['empleados'][$borrar]);
}
if (!empty($nombre) && is_numeric($sueldo)) {
//Si empleados está vacía añadimos directamente el valor
if (empty($_SESSION['empleados'])) {
$_SESSION['empleados'][$nombre] = $sueldo;
} else {
//Creamos un array para copiar empleados
$auxiliar = [];
foreach ($_SESSION['empleados'] as $c => $v) {
//Si el sueldo es menor lo metemos antes
if ($sueldo < $v) {
$auxiliar[$nombre] = $sueldo;
}
//Y siempre copiamos el elemento, lo que pasa es
//Que si el sueldo era menor lo hemos añadido en
//el if anterior
$auxiliar[$c] = $v;
}
//Si después de recorrer el array no lo hemos introducido
//Es que debe ir al final
if (!isset($auxiliar[$nombre])) {
$auxiliar[$nombre] = $sueldo;
}
//Sustituimos el array empleados por la copia
$_SESSION['empleados'] = $auxiliar;
}
}
if (!isset($_SESSION['empleados'])) :
$_SESSION['empleados'] = [];
endif;
?>
<table>
<tr><th>Empleado</th><th>Sueldo</th><th>Acciones</th></tr>
<?php
foreach ($_SESSION['empleados'] as $c => $v):
?>
<tr><td><?= $c ?></td><td><?= $v ?></td>
<td><a href="?borrar=<?= $c ?>">Borrar</a></td></tr>
<?php
endforeach;
?>
</table>
</body>
</html>
Ejercicio empleados
Vamos a realizar un ejercicio en el cual tendremos el mantenimiento de una lista de empleados. Tendremos una caja con el nombre y una con el sueldo. Cuando el usuario le de a enviar nos añadirá el empleado a la variable de sesión ‘Empleados’ con la clave el nombre del empleado y valor el sueldo.
Ej: Juan 3000
$_SESSION[‘empleados’][‘Juan’]=>3000;
Hay que hacer las siguientes opciones:
1.- Poder dar de alta empleados
2.- Visualizarlos en una tabla
3.- Añadir la opción para borrarlos
4.- Poder cambiar el sueldo de un empleado
5.- (Complicada) Poner el empleado justo antes del primer empleado que tenga más sueldo que él.
Funciones Array (V)
Funciones de búsqueda en arrays:
Ejemplos:
$tabla=range("a","j");
if (in_array("b",$tabla)){
echo "Está la b<br/>";
}
if (in_array("w",$tabla)){
echo "Está la w<br/>";
}
$pos= array_search("b", $tabla);
echo "|".$pos."|<br/>";
$pos= array_search("w", $tabla);
echo "|".$pos."|<br/>";
$asociativa=array("a"=>1,"b"=>2,"c"=>3,"d"=>4,);
$pos= array_search(3, $asociativa);
echo "|".$pos."|<br/>";
if (array_key_exists("d",$asociativa)){
echo "Existe la clave d<br/>";
}
Ejercicio añadir nombres a variable de sesión
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form method="get">
Nombre:
<input type="text" name="nombre">
<input type="submit">
<input type="submit" name="reset" value="reset">
</form>
<?php
session_start();
$nombre = filter_input(INPUT_GET, "nombre");
$reset = filter_input(INPUT_GET, "reset");
$borrar = filter_input(INPUT_GET, "borrar");
if (is_numeric($borrar)){
//unset($_SESSION['lista'][$borrar]);
array_splice($_SESSION['lista'],$borrar,1);
}
if (empty($reset)) {
if (!empty($nombre)) {
$_SESSION['lista'][] = $nombre;
}
foreach ($_SESSION['lista'] as $c=>$elemento) {
echo $elemento." |<small><a href='?borrar=$c'>Borrar</a></small> |<br>";
}
} else {
$_SESSION['lista'] = [];
}
?>
</body>
</html>
Lo mismo con form
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form method="get">
Nombre:
<input type="text" name="nombre">
<input type="submit">
<input type="submit" name="reset" value="reset">
</form>
<?php
session_start();
$nombre = filter_input(INPUT_GET, "nombre");
$reset = filter_input(INPUT_GET, "reset");
$borrar = filter_input(INPUT_POST, "borrar");
if (is_numeric($borrar)) {
//unset($_SESSION['lista'][$borrar]);
array_splice($_SESSION['lista'], $borrar, 1);
}
if (empty($reset)) {
if (!empty($nombre)) {
$_SESSION['lista'][] = $nombre;
}
foreach ($_SESSION['lista'] as $c => $elemento) {
?>
<form method="post" action="<?=$_SERVER['PHP_SELF']?>"><?= $elemento ?>
<input type="hidden" name="borrar" value="<?= $c ?>">
<input type="submit" name="reset" value="Borrar">
</form>
<?php
}
} else {
$_SESSION['lista'] = [];
}
?>
</body>
</html>