Mostrando entradas con la etiqueta programacion. Mostrar todas las entradas
Mostrando entradas con la etiqueta programacion. 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

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.

Canales Youtube

  Hace poco decidi hacer videos de cualquier cosa que me gustase, como son tantas llegue a la conclusión de hacerme varios canales en youtube, cada uno con una temática diferente, ya que tenerlo todo junto no me parecia bien. Al final me hice tres canales, uno para cosas de animales y naturaleza (principalmente mis mascotas), otro para danza, música y arte y todo lo que gire en torno a esto, y el último que es el principal de la cuenta lo he dedicado a tutoriales de programación y de otros enreos.

  Ahora mismo pues no tengo muchos suscriptores ni muchas visitas, pero es lógico ya que acabo de empezar, pero espero que con el tiempo vaya aumentando la cosa ya que así eso me anima a que realice más videos :).

  Bueno dejándome de rollo dejo aquí los enlaces de los canales junto con algunos videos por si a alguien le gusta, y si os gusta pues suscribiros o lo que sea :D. 

  Por supuesto este blog también podéis seguirlo.

   Danza, música y arte   




   Animales y naturaleza   





   Sandra Campos Suárez