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í:
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.
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:
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 Hes 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.
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):
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¶metro2=dasflkjdf</url>
</Nodo>
En este caso tenemos que escapara el carácter & utilizando & ( no olvidaros del ; ) . Nos quedaría así:
<Nodo>
<titulo>Este es el titulo</titulo>
<url>http://www.direccion.com?parametro1=1233¶metro2=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¶metro2=dasflkjdf]]</url>
</Nodo>
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");
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.
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:
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:
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);
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:
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.
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:
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.
No hay comentarios
Añade tu comentario