Mostrando entradas con la etiqueta php. Mostrar todas las entradas
Mostrando entradas con la etiqueta php. Mostrar todas las entradas

Solicitar un fichero en html y guardarlo en el servidor con php


   En este pequeño ejemplo o tutorial vamos a ver como soliticar un fichero mediante un formulario en html y después con php guardarlo en el servidor.

   Para comenzar tenemos nuestro formulario en html:

  
FORMULARIO FICHEROS
@ SandritaSCS












   Después nuestro código php tiene lo siguiente:
$archivo = $_FILES['ficheroUsuario']['tmp_name'];
$nombre_archivo = $_FILES['ficheroUsuario']['name'];
$directorioNuevo ="ficheros/";

move_uploaded_file($archivo, $directorioNuevo.$nombre_archivo);

echo "OK";

   No se utiliza la variable $_POST aunque el método sea POST. La variable que almacena los datos del fichero que queremos guardar es $_FILE. Con esta variable podemos recuperar la siguiente información:

  • $_FILE['fichero_usuario']['tmp_name'] -> El nombre temporal que se le asigna al fichero que queremos subir.
  • $_FILE['fichero_usuario']['name'] -> Nombre original del fichero que se ha subido.
  • $_FILE['fichero_usuario']['type'] -> Tipo de fichero ( si el navegador lo proporciona). No se refiere a la extensión sino por ejemplo si es una imagen sería "image/png".
  • $_FILE['fichero_usuario']['size'] -> Tamaño del fichero
  • $_FILE['fichero_usuario']['error'] -> Error asociado al fichero que se intenta subir.
   La función move_uploaded_file guarda el fichero temporal (por eso se usa la variable guardada con tmp_name) con el nombre que le proporcionemos y la ruta donde queremos guardarlo ( en este caso el nombre es el mismo que el fichero que se sube).

   Si queremos guardar el archivo con otro nombre podemos hacerlo así:

$archivo = $_FILES['ficheroUsuario']['tmp_name'];
$nombre_archivo = $_FILES['ficheroUsuario']['name'];
$info = pathinfo($nombre_archivo)['extension'];
$directorioNuevo ="ficheros/";

move_uploaded_file($archivo, $directorioNuevo."nombreNuevo.".$info);

echo "OK";

   Con la función patchinfo($fichero) se puede recuperar la extensión del fichero, así como el nombre base etc.
   Para descargar el código lo podéis hacer en el siguiente enlace -> CÓDIGO.

Sandra Campos

Comparte si te gusta

Generar imágenes QR con PHP usando qrlib.php

   
   Vamos a generar imágenes QR en PHP de una manera sencilla utilizando qrlib.php. Lo haremos de una manera muy fácil, usando la función QRcode::png.

   Lo primero, como siempre, es descargarnos la librería en este ENLACE. Una vez descargada, la descomprimimos y la añadimos a nuestro proyecto.


 En el código php tenemos que incluir la ruta al fichero qrlib.php que está en la carpeta que hemos añadido. El código más básico para generar una imagen qr, teniendo como datos una url, es el siguiente:

include_once dirname(__FILE__)."/phpqrcode/qrlib.php";

// --- url
$url = "https://es.wikipedia.org";

QRcode::png($url);

   A la función png le podemos pasar ciertos parámetros para cambiar la imagen del qr. Le podemos pasar una ruta para guardar la imagen, el tamaño de la imagen (ECC Level), los pixeles y el tamaño del frame. Los distintos valores para el tamaño de la imagen son los siguientes:

  • QR_ECLEVEL_L
  • QR_ECLEVEL_M
  • QR_ECLEVEL_Q
  • QR_ECLEVEL_H

   El L es el más pequeño y el H es el más grande. Jugando con estos niveles y los pixeles podemos obtener la imagen más grande o más pequeña y con más resolución o menos.

   Estos parámetros lo vemos con el siguiente código

include_once dirname(__FILE__)."/phpqrcode/qrlib.php";

// --- url
$url = "https://es.wikipedia.org";

QRcode::png($url,"temp/01.png",QR_ECLEVEL_L,3,1);
echo '<img src="temp/01.png"/>';

   El 3 corresponde a los pixels y el 1 al frame (el frame es como un margen blanco en la imagen en todos los lados). En tmp se guarda la imagen:

   Os voy a poner como se escribirian los datos para mandar un teléfono, sms, skype o email (la variable es $codigo, en los comentarios están las distintas formas del código para mandar teléfono, skype, etc):

include_once dirname(__FILE__)."/phpqrcode/qrlib.php";
// --- sms y telefono
//$codigo = "sms:568999666";
//$codigo = "tel:568999666";

// -- email
$email="sandritascs@gmail.com";
$subject="Test qr";
$body = "Comprobación del test qr";
$codigo="mailto:".$email."?subject=".urlencode($subject)."&body=".urlencode($body);

// --- skype
//$codigo = "skype:".urlencode("usuarioSkype")."?call";

// --- generar imagen
QRcode::png($codigo,"temp/01.png",QR_ECLEVEL_L,3,1);

echo '<img src="temp/01.png"/>';
 
En el video se puede ver una demostración del funcionamiento. Aquí teneis los ficheros del ejemplo del video junto con la librería --> DESCARGA

Sandra Campos

Etiquetas

, , , , , ,

Comparte si te gusta

Error: XML Validation error : EntityRef: expecting';'


   Cuando os encontréis este error en alguna conexión/servicio web que tengáis que hacer mediante XML, significa que hay algún carácter en el código que tenéis que "escapar". Muchas veces pasa cuando en el xml tenemos que poner alguna url y tienen el carácter &.

Por ejemplo tenemos el siguiente xml:

<Nodo>     
            <titulo>Este es el titulo</titulo>       
            <url>http://www.direccion.com?parametro1=1233&parametro2=dasflkjdf</url>                     
</Nodo>

   En este caso tenemos que escapara el carácter & utilizando &amp; ( no olvidaros del ; ) . Nos quedaría así:

<Nodo>     
            <titulo>Este es el titulo</titulo>       
            <url>http://www.direccion.com?parametro1=1233&parametro2=dasflkjdf</url>                     
</Nodo>

   En general para cualquier carácter la sintáxis sería &nombre;

   Otra forma de hacerlo es usar una sección CDATA para meter la url:

<Nodo>     
            <titulo>Este es el titulo</titulo>       
            <url><![CDATAhttp://www.direccion.com?parametro1=1233&parametro2=dasflkjdf]]</url>                     
</Nodo>
Sandra Campos

Comparte si te gusta

Tipos de peticiones/request con PHP cURL


   Vamos a ver como implementar los diferentes tipos de peticiones que se pueden hacer en PHP mediante cURL, para cuando necesitemos hacer alguna conexión con servicios web, apis, etc.

Petición GET

public function peticion_get(){

$url = "https://www.servicioprueba.com/request";

$conexion = curl_init();



// --- Url

curl_setopt($conexion, CURLOPT_URL,$url);

// --- Petición GET.

curl_setopt($conexion, CURLOPT_HTTPGET, TRUE);

// --- Cabecera HTTP.

curl_setopt($conexion, CURLOPT_HTTPHEADER,array('Content-Type: application/json'));

// --- Para recibir respuesta de la conexión.

curl_setopt($conexion, CURLOPT_RETURNTRANSFER, 1);



// --- Respuesta

$respuesta=curl_exec($conexion);



if($respuesta===false)

 echo "error";

curl_close($conexion);

}

   Esto son parámetros básicos, quizás sobre incluso CURLOPT_RETURNTRANSFER. Para indicar que es una petición GET también podíamos usar lo siguiente:
curl_setopt($conexion, CURLOPT_CUSTOMREQUEST, "GET");

Pero con CURLOPT_HTTPGET a true no hace falta.

Petición POST

public function peticion_post(){



$url = "https://www.servicioprueba.com/request";

$conexion = curl_init();

$envio = "datos que se envian"; // --- Puede ser un xml, un json, etc.



curl_setopt($conexion, CURLOPT_URL,$url);

// --- Datos que se van a enviar por POST.

curl_setopt($conexion, CURLOPT_POSTFIELDS,$envio);

// --- Cabecera incluyendo la longitud de los datos de envio.

curl_setopt($conexion, CURLOPT_HTTPHEADER,array('Content-Type: application/json', 'Content-Length: '.strlen($envio)));

// --- Petición POST.

curl_setopt($conexion, CURLOPT_POST, 1);

// --- HTTPGET a false porque no se trata de una petición GET.

curl_setopt($conexion, CURLOPT_HTTPGET, FALSE);

// -- HEADER a false.

curl_setopt($conexion, CURLOPT_HEADER, FALSE);



// --- Respuesta.

$respuesta=curl_exec($conexion);



if($respuesta===false)

 echo "error";

curl_close($conexion);

}

   Como en la petición anterior podríamos usar CURLOPT_CUSTOMREQUEST pero tampoco hace falta porque ya le decimos que se trata de una petición POST con CURLOPT_POST.

Petición PUT

Esta es similar a POST y en este caso si utilizamos CUSTOMREQUEST.

public function peticion_put(){



$url = "https://www.servicioprueba.com/request";

$conexion = curl_init();

$envio = "datos que se envian"; // --- Puede ser un xml, un json, etc.



curl_setopt($conexion, CURLOPT_URL,$url);

// --- Datos que se van a enviar por PUT.

curl_setopt($conexion, CURLOPT_POSTFIELDS,$envio);

// --- Cabecera incluyendo la longitud de los datos de envio.

curl_setopt($conexion, CURLOPT_HTTPHEADER,array('Content-Type: application/json', 'Content-Length: '.strlen($envio)));

// --- Petición PUT.

curl_setopt($conexion, CURLOPT_CUSTOMREQUEST, "PUT");

// --- HTTPGET a false porque no se trata de una petición GET.

curl_setopt($conexion, CURLOPT_HTTPGET, FALSE);



// --- Respuesta.

$respuesta=curl_exec($conexion);



if($respuesta===false)

 echo "error";

curl_close($conexion);

}

Petición PATCH

public function peticion_patch(){



$url = "https://www.servicioprueba.com/request";

$conexion = curl_init();

$envio = "datos que se envian"; // --- Puede ser un xml, un json, etc.



curl_setopt($conexion, CURLOPT_URL,$url);

// --- Datos que se van a enviar por PATCH.

curl_setopt($conexion, CURLOPT_POSTFIELDS,$envio);

// --- Cabecera incluyendo la longitud de los datos de envio.

curl_setopt($conexion, CURLOPT_HTTPHEADER,array('Content-Type: application/json', 'Content-Length: '.strlen($envio)));

// --- Petición PATCH.

curl_setopt($conexion, CURLOPT_CUSTOMREQUEST, "PATCH");

// --- HTTPGET a false porque no se trata de una petición GET.

curl_setopt($conexion, CURLOPT_HTTPGET, FALSE);



// --- Respuesta.

$respuesta=curl_exec($conexion);



if($respuesta===false)

 echo "error";

curl_close($conexion);

}

Petición DELETE

public function peticion_patch(){



$url = "https://www.servicioprueba.com/request";

$conexion = curl_init();



curl_setopt($conexion, CURLOPT_URL,$url);

// --- Cabecera

curl_setopt($conexion, CURLOPT_HTTPHEADER,array('Content-Type: application/json'));

// --- Petición DELETE.

curl_setopt($conexion, CURLOPT_CUSTOMREQUEST, "DELETE");

// --- HTTPGET a false porque no se trata de una petición GET.

curl_setopt($conexion, CURLOPT_HTTPGET, FALSE);



// --- Respuesta.

$respuesta=curl_exec($conexion);



if($respuesta===false)

 echo "error";

curl_close($conexion);

}

Otros parámetros

   Dependiendo de la conexión que tengamos que hacer podemos/debemos poner otros parámetros en el curl. Os pongo algunos interesantes:

curl_setopt($conexion, CURLOPT_COOKIESESSION, FALSE);

curl_setopt($conexion, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);// Para poner el tipo de certificado

  curl_setopt($conexion, CURLOPT_USERPWD, "usuario:password");




Sandra Campos

Comparte si te gusta

Crear documentos word (doc, docx) con PHPWord y TemplateProcesor





   Por necesidades en mi trabajo he tenido que recurrir a una librería para crear documentos word. Esta librería se llama PHPWord y está escrita en php. La versión actual soporta Microsoft Office Open XML (OOXML or OpenXML), OASIS Open Document Format for Office Applications (OpenDocument or ODF), Rich Text Format (RTF), HTML, y PDF.

   Podéis descargarla del repositorio en GiHub, y los requisitos mínimos son:
  • PHP 5.3 superior.
  • Extensiones zip y xml parser.
  • Opcionales: XMLWriter (para .docx y .odt), XSL (estilos plantillas), GD (para añadir imágenes) y dompdf (para PDF).

INSTALACIÓN

   En el repositorio viene como instalar la libreria pero os lo pongo aqui también.
   Recomiendan instalarla a través de composer, incluyendo un pequeño código en el fichero composer.json:

{
    "require": {
       "phpoffice/phpword": "dev-master"
    }
} 

   La otra forma es descargarse todos los ficheros de la libreria y ponerlos en nuestro proyecto. Después en nuestro fichero .php tenemos que registrar el autoloader. Esto se hace poniendo las siguientes líneas en nuestro fichero:

require_once 'carpetaPHPWord/src/PhpWord/Autoloader.php';
\PhpOffice\PhpWord\Autoloader::register();

CREAR DOCUMENTO

   En esta primera parte vamos a crear un nuevo documento word con PHPWord. Después de incluir las líneas anteriores en nuestro fichero .php encargado de generar el documento, tenemos que incluir lo siguiente:

use PhpOffice\PhpWord\PhpWord;
use PhpOffice\PhpWord\Style\Font;

   A continuación hacemos la instancia de la clase. La podemos hacer de dos formas:

$documento = new PhpWord();

   o

$documento = new \PhpOffice\PhpWord\PhpWord();

   Ahora ya podemos añadir elementos a nuestro documento. Tenemos que crear una sección, que luego se añadirá al documento.


$seccion = $documento->addSection();

   A la sección podemos añadirle los elementos que queramos.

- Texto:

// Texto sin formato
$seccion->addText(
 htmlspecialchars(
  'Primer texto - Texto sin formato'
 )
);

// Texto con formato
$seccion->addText(
htmlspecialchars(
'Segundo texto con formato'
),
array('name' => 'Arial', 'size' => '12', 'bold' => 'true')
);


// Texto con fuente personalizada
$fuente_propia = 'mifuente';
$documento->addFontStyle($fuente_propia,
array('name' => 'Arial', 'size' => '14', 'bold' => 'true', 'color' => '5882FA')
);

$seccion->addText(
htmlspecialchars(
'Tercer texto con formato'
),
$fuente_propia
);

// Texto con objetos
$fuente = new Font();
$fuente->setBold(true);
$fuente->setName('Tahoma');
$fuente->setSize(16);
$fuente->setColor('9F81F7');
$texto = $seccion->addText(htmlspecialchars(
'Cuarto texto con formato'
));
$texto->setFontStyle($fuente);

-Tabla:

// Tabla personalizada
$estilo_tabla = array(
'borderColor' => 'F2F2F2',
'borderSize' => '5',
'cellMargin' => '20',
'bgColor' => '088A68',
);

$primera_fila = array('bgColor' => 'F2F2F2');
$documento->addTableStyle('mitabla',$estilo_tabla, $primera_fila);
$tabla = $seccion->addTable('mitabla');

for ($row = 1; $row <= 8; $row++) {
    $tabla->addRow();
    for ($cell = 1; $cell <= 3; $cell++) {
    if($row ==1)
    $tabla->addCell(200)->addText(htmlspecialchars('primera'));
    else
        $tabla->addCell(200)->addText(htmlspecialchars('celda'));
    }
}

-Salto:

$seccion->addTextBreak(1);

-Imagenes:

$seccion->addImage(
    'imagen.jpg',
    array(
        'width' => 600,
        'height' => 400,
        'wrappingStyle' => 'behind'
    )
);

   Estos son solo dos ejemplos. Podemos dar estilos, pie de página y muchas cosas más. Podéis consultar el siguiente enlace


   Por último para guardar el documento en docx, pdf o html lo hacemos de la siguiente forma:

$objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($documento, 'Word2007');
$objWriter->save('Documento1.docx');

$objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($documento, 'ODText');
$objWriter->save('Documento1.odt');

$objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($documento, 'HTML');
$objWriter->save('Documento1.html');

LEER DOCUMENTO (PLANTILLA) Y ASIGNAR TEXTO.

   En este apartado tenemos que tener una plantilla en word. En esta plantilla tenemos que poner los valores que queramos que sean sustituidos de una determinada forma:

${valor}


   Cuando tengamos la plantilla hecha, para leerla y sustituir los datos lo haremos de la siguiente manera en php:

        $templateWord = new TemplateProcessor('plantilla.docx');

        // --- Variables
       
        $nombre = "Sandra S.L.";
        $direccion = "Mi dirección";
        $municipio = "Mrd";
        $provincia = "Bdj";
        $cp = "02541";
        $telefono = "24536784";

        // --- Asignamos valores
        $templateWord->setValue('nombre_empresa', $nombre);
        $templateWord->setValue('direccion_empresa', $direccion);
        $templateWord->setValue('municipio_empresa', $municipio);
        $templateWord->setValue('provincia_empresa', $provincia);
        $templateWord->setValue('cp_empresa', $cp);
        $templateWord->setValue('telefono_empresa', $telefono);

        // --- Guardamos el documento
        $templateWord->saveAs('Documento02.docx');
       
   También podemos poner para que se descargue directamente (también válido para el apartado anterior):

        header("Content-Disposition: attachment; filename=Documento02.docx; charset=iso-8859-1");
        echo file_get_contents('Documento02.docx');


   Podéis descargaros el PROYECTO para ver los ejemplos.

Instalar Piwik - Web analytics open source



   Hoy os traigo una herramienta de analítica web open source (gratuita y código abierto). Esta herramienta se llama piwik y su punto fuerte es que da el control absoluto de todos los datos, además de respetar la privacidad.



   En esta entrada os voy a explicar su instalación. Es una instalación muy sencilla como podréis comprobar al final.

   Nos descargamos piwik de la página oficial y descomprimimos la carpeta. Los archivos que hay en la carpeta piwik tenemos que copiarlos en una carpeta que se llame analytics en la raíz principal donde esté nuestra web. Si lo tenemos en un hosting subiremos los archivos por ftp (utilizando filezilla por ejemplo).


   Ahora escribimos en el navegador la dirección de nuestra web más /analytics (www.webejemplo.com/analytics) y nos saltará en instalador.


   En el siguiente paso se comprueban los requisitos del sistema. Si está todo OK, aparecerán con la flecha en verde. Si alguno falla nos saldrá como solucionarlo. Los requisitos principales para instalar piwik son:

  • PHP 5.3.3 o superior.
  • MySQL 4.1 o superior.
  • Servidor web Apache, Nginx,IIS, etc.
  • PHP extensión pdo y pdo_mysql.
  • Extensiones recomendadas: php5-curl, php5-gd, php5-cli, php5-geoip.
  • Se recomienda crear una BD sólo para piwik (si no hay más remedio puede ser la misma que la de la web).
  • Crear un usuario y password de la BD MySQL con permisos para crear y modificar datos de la BD.


   A continuación nos pide el servidor de la base de datos y el usuario y contraseña que hemos tenido que crear para tener acceso a las tablas de piwik y el nombre de la base de datos.



   Ahora nos pide crear un super usuario. Este usuario es distinto al de la base de datos, es un usuario para gestionar piwik y con el que nos vamos a loguear para ver las analíticas.


   Indicamos el nombre del sitio web, la url, la zona horaria y si se trata de un sitio ecommerce o no.


  Para finalizar nos aparece el script configurado para poner en nuestra web. Tenemos que ponerlo en la cabecera de la página principal. Este código sirve para que piwik rastree nuestra web y genere todos los datos y estadísticas que más tarde podemos consultar.



   En la última pantalla nos dice si ha ido todo correctamente. También hay dos casillas marcadas, que son para habilitar el soporte Do Not Track ( que si un usuario tiene configurado en el navegador que no quiere ser rastreado, piwik no rastreará a ese usuario); y la otra opción es para ocultar la dirección IP del visitante.


   Si le damos a Ir a Piwik nos salta la pantalla para loguearnos.


   Después de autenticarnos nos aparecen la vistas de piwik con todos los datos analizados. Aquí tenéis la demo que facilita piwik para observar como serían las vistas:


   Piwik dispone de una api, para configurar los parámetros para configurar las estadísticas como queramos y también para el rastreador. Además dispone de una API para desarrolladores y podemos crear nuestras propias consultas a la BD.