Funciones archivos y ejemplos

<?php

$f = fopen("datos.txt", "r");
//recorro el archivo
$lineas=[];
while (!feof($f)) {
    $lineas[] = fgets($f);  
}
fclose($f);
print_r($lineas);
//Abre, lee, lo pasa a array y lo cierra
$otramanera=file("datos.txt");
print_r($otramanera);
//Abre, lee, lo pasa a cadena y lo cierra
$cadena= file_get_contents("datos.txt");
echo $cadena;

$cadena= file_get_contents("https://www.pampling.com/");
echo str_ireplace("camiseta", "cacahuete", $cadena);

$f=fopen("log.txt","a");

fwrite($f,"Log de números\r\n");

for($i=1;$i<=10;$i++){
    fwrite($f,$i."\r\n");
}

fclose($f);

Ejercicio apuntes

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <?php
        $carpeta = "archivos/";
        if (isset($_FILES['fichero'])) {
            if (substr($_FILES['fichero']['name'], -4) == ".txt") {
                move_uploaded_file($_FILES['fichero']['tmp_name'], $carpeta . $_FILES['fichero']['name']);
                echo "Archivo subido";
            } else {
                echo "El archivo no es .txt<br>";
            }
        }
        $nombre = filter_input(INPUT_POST, "nombre");
        if (!empty($nombre) && !file_exists($carpeta.$nombre)){
            mkdir($carpeta.$nombre);
        }
        $lista= scandir($carpeta);
        array_shift($lista);
        array_shift($lista);
        $archivos="";
        $carpetas="";
        foreach($lista as $v){
            if (is_dir($carpeta.$v)){
                $carpetas.=$v."<br>";
            } else {
                $archivos.=$v."<br>";
            }
        }
        ?>
        <form method="post" enctype="multipart/form-data">
            Escoge archivo: <input type="file" name="fichero">
            <input type="submit">
        </form>
        <form method="post">
            Introduzca la carpeta: 
            <input type="text" name="nombre">
            <input type="submit">
        </form>
        <table>
            <tr><td>Archivos</td><td>Carpetas</td></tr>
            <tr><td>
                <?=$archivos?>
                </td><td>
                 <?=$carpetas?>
                </td></tr>
        </table>
    </body>
</html>

Ejercicios repaso

Variables

1. Crear dos variables de tipo cadena y mostrarlas concatenadas
2. Crear una variable num que valga 10, restarle 5, multiplicarla por 7, incrementar uno y mostrar el resultado
3. ¿Que nos muestra el siguiente código?

 $a=5;
$b=6; 
echo $b.$a;

Estructuras de control

4. Si tengo una variable $sueldo quiero un código que me imprima por pantalla “ILEGAL” si es menor que el SMI (900€)
5. Tengo las variables $usuario y $password. Poner un código que me imprima “Usuario autorizado” si el usuario es “juan” y el password es “1234”
6. Lo mismo pero que también esté autorizado el usuario “eva” y password “7890” (es decir, que estén autorizados los dos)
7. Crear una página web que nos pida dos números y nos diga si la diferencia entre los dos es mayor que diez o no
Ejemplo: si pongo 4 y 9 me dirá que no. Si pongo 4 y 40 me dirá que sí.
8. Crear una página que me pida un día de la semana y me diga si es festivo (en el caso de sábado y domingo) o no (el resto)

Bucles

9. Crear una página que nos pida un número y nos muestre la tabla de multiplicar de ese número
10. Crear una página que nos muestre la suma de los números entre 1 y 100
11. Crear una página que nos muestre una lista (ul) con los primeros 10 cuadrados (1,4,9,16,…)
12. Crear una página que nos muestre una tabla de 5×5 y que cada celda tenga un valor consecutivo

Funciones

13. Crear una función que le pasemos un nombre y un apellido y nos devuelva el valor concatenado.
14. Crear una función que le pasemos un nombre y nos devuelva “Hola ” y el nombre
15. Crear una función a la que pasemos tres números y nos devuelva el que está en la mitad (ni el más alto ni el más bajo). Si hay algún número que sea igual a otro que nos devuelva ese número.
16. Crear una función a la que le pasemos dos números y nos devuelva true si los dos son pares o impares y false si uno es par y el otro es impar.

Funciones de cadena

17. Crear una función que nos diga cuantas consonantes tiene una palabra.
18. Crear una función a la que le pasemos dos palabras y nos diga cual es la más larga
19. Crear una función a la que le pasemos una frase y nos sustituya la ‘a’ por ‘4’ y la ‘e’ por ‘3’
20. Crear una función a la que le pasemos una cadena y nos devuelva una cadena formada por las dos primeras letras y por las dos últimas letras. Si la longitud de la cadena es menor que cuatro devolver la misma cadena

Funciones de array

21. Crear una función a la que le pasemos un número y nos devuelva un array con los números desde el 1 al número que me pasen.Ejemplo, si le paso un 5 me devuelve [1,2,3,4,5]
22. Crear una función a la que le pasemos un array con cadenas y nos devuelva la cadena más corta
23. Crear una función a la que le pasemos dos arrays y nos devuelva un array con los dos mezclados
24. Crear una función a la que le pasemos una cadena y nos devuelva la palabra con más consonantes

Funciones de fecha

25. Crear una función vencimiento que le pasemos un número de días y nos devuelva la fecha que resultará de sumarle a hoy el número de días que nos pasan.
26. Crear una función que nos devuelva un array con todas las fechas de este año que caen en lunes
27. Crear una función que le pasemos un año y nos diga si es bisiesto o no
28. Crear una función a la que le pasemos un año y un mes y nos devuelva que día de la semana empieza (en texto)

Galería de fotos

<!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:

http://www.teacherspro.com

Herramientas educativas a la programación:

http://www.helloapps.com/

Examen de candidatos online:

https://devskiller.com/

Tinder de candidatos y trabajos:

https://www.tinkerlink.com/

Desarrollo de aplicaciones de una manera rápida:

https://kingofapp.com/es/

Vivero para startsups:

https://demiumstartups.com/

Kit de programación para drones:

http://codingbird.kr

Aceleradora de empresas:

https://rocasalvatella.com/

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 menor a mayor arsort()
arsort() valor mayor a menor asort()
krsort() key mayor a menor ksort()
ksort() key menor a mayor asort()
natcasesort() valores natural, insensible a mayúsculas y minúsculas natsort()
natsort() valor natural natcasesort()
rsort() valor no mayor a menor sort()
shuffle() valor no aleatorio array_rand()
sort() valor no menor a mayor rsort()
uasort() valor definido por el usuario uksort()
uksort() key definido por el usuario uasort()
usort() valor no definido por el usuario uasort()