Ficheros array

<form enctype=”multipart/form-data” action=”archivo.php” method=”POST”>

<!– MAX_FILE_SIZE debe preceder al campo de entrada del fichero –>

<input type=”hidden” name=”MAX_FILE_SIZE” value=”300000″ />

<!– El nombre del elemento de entrada determina el nombre en el array $_FILES –>

Foto: <input name=”foto” type=”file” /><br/>

Curriculum: <input name=”curri” type=”file” /><br/>

Informes: <input name=”informe[]” type=”file” /><br/>

<input name=”informe[]” type=”file” /><br/>

<input name=”informe[]” type=”file” /><br/>

<input type=”submit” value=”Enviar fichero” /></form>

$dir_subida = 'upload/';
$foto = $dir_subida . basename($_FILES['foto']['name']);
$curri = $dir_subida . basename($_FILES['curri']['name']);

if (move_uploaded_file($_FILES['foto']['tmp_name'], $foto)) {
 echo "Foto subida con éxito.\n";
} else {
 echo "¡Posible ataque de subida de ficheros!\n";
}

if (move_uploaded_file($_FILES['curri']['tmp_name'], $curri)) {
 echo "Curriculum subido con éxito.\n";
} else {
 echo "¡Posible ataque de subida de ficheros!\n";
}
for ($i=0;$i<count($_FILES['informe']['name']);$i++){
 if (move_uploaded_file($_FILES['informe']['tmp_name'][$i],
 $dir_subida . basename($_FILES['informe']['name'][$i]))) {
 echo "Informe $i subido con éxito.\n";
} else {
 echo "¡Posible ataque de subida de ficheros!\n";
}
}

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

Borar 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 PHP

Para subir un archivo necesitamos primero indicar en el formulario el typo de datos (multipart/form-data) y, opcionalmente, el máximo tamaño:

<!-- El tipo de codificación de datos, enctype, DEBE especificarse como sigue -->
<form enctype="multipart/form-data" action="__URL__" method="POST">
    <!-- MAX_FILE_SIZE debe preceder al campo de entrada del fichero -->
    <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
    <!-- El nombre del elemento de entrada determina el nombre en el array $_FILES -->
    Enviar este fichero: <input name="fichero_usuario" type="file" />
    <input type="submit" value="Enviar fichero" />
</form>

Después, en el PHP, debemos recoger el archivo y moverlo a su ubicación definitiva:

$dir_subida = '/var/www/uploads/';
$fichero_subido = $dir_subida . basename($_FILES['fichero_usuario']['name']);

if (move_uploaded_file($_FILES['fichero_usuario']['tmp_name'], $fichero_subido)) {
    echo "El fichero es válido y se subió con éxito.\n";
} else {
    echo "¡Posible ataque de subida de ficheros!\n";
}

Carácter de nueva línea \n

El carácter de nueva línea sólo funciona cuando está encerrado entre comillas dobles:

$a='hola\n';
$b="hola\n";

En el primer caso no hace salto de línea, en el segundo sí. Esto se aplica a la hora de imprimir en pantalla o escribir en ficheros.

En general el entrecomillado doble permite carácteres de escape, mientras que el simple no:

Cadenas en PHP

Escribir un cuadrado en un archivo

$lado= filter_input(INPUT_GET, 'lado');
if (empty($lado)){
 $lado=3;
}
$f = fopen('cuadrado.txt', 'w');
for ($i = 0; $i < $lado; $i++) {
 fwrite($f, str_repeat('0', $lado)."\n");
}
fclose($f);

$tabla=file('cuadrado.txt',FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$cadena= file_get_contents('cuadrado.txt');
var_dump($tabla);
var_dump($cadena);
file_put_contents('cuadrado.txt', 'ola k ase????',FILE_APPEND);

Funciones de lectura completa en PHP

La siguiente función nos lee un fichero y lo pasa a un array:

file("test.txt")

La siguiente hace lo mismo pero como una string:

file_get_contents("test.txt");

Esta escribe directamente unos datos al fichero:

file_put_contents("test.txt","Hello World. Testing!");

Esta lee un fichero y lo imprime directamete en la pantalla:

readfile("viajeros.txt");

Leer y modificar web

$url='http://www.20minutos.es/minuteca/rita-barbera/';
if (!empty($_GET['url'])){
 $url=$_GET['url'];
}
$img=['http://debeverse.com/wp-content/uploads/2015/07/Gatito-Rezando.jpg','http://imagenesdeamistadunicas.com/wp-content/uploads/2016/imagenes/imagenes-bellas-de-gatitos.jpg','http://cdn.weruletheinternet.com//wp-content/uploads/images/2012/Janurary/overflow/1_10/cute_animal_pictures_7.jpg','http://4.bp.blogspot.com/_mwlHu9TqP1E/TC_KJ3EDgAI/AAAAAAAAAAU/tmD1V-ici4g/s1600/gatito.jpg','http://www.elmegatop.com/wp-content/uploads/gatito-triste.jpg','http://i1.wp.com/www.ateneupopular.com/wp-content/uploads/2012/03/gatotipo1.jpg?resize=550%2C317','http://genialesimagenes.com/wp-content/uploads/2015/09/gatito-tierno-bosteza.jpg'];
$f = fopen($url, 'r');

while (!feof($f)) {
 $linea = fgets($f);
 
 $linea= preg_replace('/src=\".*\.jpg/', "src=\"".$img[mt_rand(0,count($img)-1)], $linea);
 echo str_ireplace("barberá", "Bárbara", $linea);
}
fclose($f);

Ejercicio validar mail

$cadenas = ["pepe@pepe.com", "ola k ase??", "@@@....", "hola.ssss@mmv", "pepe.com", "pepe@pepe"];
//Recorrer con for
for ($i = 0; $i < count($cadenas); $i++) {
 echo ($i + 1) . ".- " . $cadenas[$i] . (esMail2($cadenas[$i]) ? '' : ' no ') . " es mail.<br/>";
}
//Recorrer con foreach
foreach($cadenas as $cadena){
 echo $cadena . (esMail3($cadena) ? '' : ' no ') . " es mail.<br/>";
}

function esMail($cadena) {
 $pos1 = strpos($cadena, "@");
 $pos2 = strpos($cadena, ".");
 if ($pos1 !== false && $pos2 !== false && $pos2 > $pos1) {
 return true;
 } else {
 return false;
 }
}

function esMail3($cadena) {
 $pos1 = strpos($cadena, "@");
 $pos2 = strpos($cadena, ".",$pos1);
 return ($pos1 != false && $pos2 !== false);
}
function esMail2($cadena) {
 
 if ($pos = strpos($cadena, "@")) {
 return strpos($cadena, ".", $pos);
 }
 return false;
}

function esMailReg($cadena){
 return preg_match(
'/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/',
$cadena);
}

function buscaMail($cadena){
 $pattern="/(?:[A-Za-z0-9!#$%&'*+=?^_`{|}~-]+(?:\.[A-Za-z0-9!#$%&'*+=?^_`{|}~-]+)*|\"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*\")@(?:(?:[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?\.)+[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[A-Za-z0-9-]*[A-Za-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])/";
 preg_match_all($pattern,$cadena,$mails);
 return $mails;
}

Variables variables

En PHP podemos tener variables variables, esto es, poniendo dos $$ accedemos al valor:

$nombre='Juan';
$a='nombre';
echo $$a; //Imprime Juan

Podemos extenderlo al infinito:

$Bar = "a";
  $Foo = "Bar";
  $World = "Foo";
  $Hello = "World";
  $a = "Hello";

  $a; //Returns Hello
  $$a; //Returns World
  $$$a; //Returns Foo
  $$$$a; //Returns Bar
  $$$$$a; //Returns a

  $$$$$$a; //Returns Hello
  $$$$$$$a; //Returns World