sábado, 31 de diciembre de 2022

Configurar archivo .htaccess en Apache reescribir las rutas de archivos .php

Para configurar un archivo .htaccess en un servidor Apache local montado en un sistema operativo Linux Ubuntu y reescribir las rutas de archivos .php, sigue estos pasos:

Abre el archivo .htaccess en tu editor de texto preferido. Si no tienes un archivo .htaccess en tu directorio, puedes crear uno nuevo.

Agrega la siguiente línea al archivo .htaccess:

RewriteEngine On

Esto habilita la funcionalidad de reescritura de URL en el servidor Apache.

A continuación, agrega la regla de reescritura que deseas utilizar. Por ejemplo, para reescribir todas las solicitudes a archivos .php a un archivo index.php, agrega la siguiente línea:

RewriteRule ^(.*)\.php$ /index.php [L]

Esto significa que cualquier solicitud a un archivo .php será reescrita a index.php.

Guarda el archivo .htaccess y carga la página en tu navegador para verificar que la reescritura de URL esté funcionando correctamente.

Es importante tener en cuenta que el archivo .htaccess se aplica a todo el directorio y a todos sus subdirectorios. Si deseas configurar reescrituras de URL solo para un subdirectorio específico, debes crear un archivo .htaccess en ese subdirectorio y agregar las reglas de reescritura allí.


miércoles, 16 de noviembre de 2022

Laravel: Conexión con base de datos

Para conectar nuestro proyecto Laravel con una BD de MySQL.

Dentro del archivo database.php en el directorio config configuramos el driver de la conexión, por defecto vendrá con mysql, si queremos cambiarlo por otro motor de base de datos tendremos que cambiar el valor mysql por sqlite, pgsql, sqlsrv.

'default' => env('DB_CONNECTION', 'mysql')

Tendremos que configurar el archivo .env ubicado en la raíz del proyecto.

DB_HOST=localhost --- indicar el servidor propio local
DB_DATABASE=test  --- nombre de la base de datos 
DB_USERNAME=root  --- usuario de conexión a la base de datos
DB_PASSWORD=123   --- password del usuario 

Una vez que tengamos todo configurado, nos dirigimos a la terminal y ejecutamos el comando php artisan migrate para crear las migraciones, si todo ha salido bien tendremos que ver las tablas:

  • migrations
  • password_resets
  • users

En Laravel, los nombres de las tablas siempre son escritos en plural, esto  es parte de una convención: Convención de la configuración, que nos evita realizar configuraciones y pasos extras de la asociación de Modelos con tablas entre otras cosas.

Instalación de Framework Laravel

Laravel necesita un servidor web. No importa cuál sea pero la mayoría de la comunidad usa Apache o Nginx, por lo que es recomendable instalar uno de los dos para cuando se necesite buscar información sobre solucionar problemas.

Instalación de XAMPP (Windows)

XAMPP es un programa que nos ofrece una distribución de Apache, MySQL, PHP y Perl muy simple de instalar, administrar y utilizar. Podemos descargarlo aquí.

Instalación de LAMP (Linux)

LAMP es el conjunto de aplicaciones Apache, MySQL, PHP o Python en entornos Linux que nos facilitan el desarrollo de sistemas.

En Ubuntu o derivadas podemos instalarlo con los siguientes comandos:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install lamp-server^
sudo apt-get install php5-mcrypt
sudo php5enmod mcrypt

Después de tener instalado nuestro Servidor web, es necesario instalar Composer el cuál es un gestor de dependencias php muy útil y del cuál se hablará más tarde.

Instalación de composer (Windows)

La forma más sencilla de instalar Composer en tu ordenador Windows consiste en descargar y ejecutar el archivo Composer-Setup.exe, que instala la versión más reciente de Composer y actualiza el PATH de tu ordenador para que puedas ejecutar Composer simplemente escribiendo el comando composer.

Instalación de composer (Linux)

En ubuntu bastará con ejecutar los siguientes comandos en la terminal.

sudo apt-get install curl
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
sudo echo 'PATH=$PATH:~/.composer/vendor/bin' >> ~/.profile

Instalación de Laravel

Existen diferentes formas de instalar laravel en nuestra computadora.

  • Podemos clonar el repositorio Laravel de github.
  • Usando el instalador:
    composer global require "laravel/installer=~1.1"
    laravel new Proyecto
    
  • Usando composer:
    composer create-project laravel/laravel --prefer-dist Proyecto
    
    Una vez instalado laravel es recomendable situarse en la raíz del proyecto y ejecutar:
    composer update
    php artisan key:generate
    php artisan app:name Curso

viernes, 11 de noviembre de 2022

Activar módulo rewrite de Apache en Ubuntu

El módulo rewrite es un módulo de la aplicación Apache que permite modificar la URL de un sitio. Este módulo viene desactivado por defecto.
Para activarlo en Ubuntu se utiliza el comando a2enmod que permite pasar los módulo disponibles de apache del directorio /etc/apache2/mods-available al directorio /etc/apache2/mods-enabled

$ sudo a2enmod rewrite

Se debe indicar donde se quiere aplicar el módulo, con lo cual se abre el archivo de configuración del sitio en efecto:

$ sudo gedit /etc/apache2/sites-enabled/000-default

Y se reemplaza "AllowOverride None" por "AllowOverride All" donde se quiera aplicar el cambio.
Por último se reinicia el Apache:

$ sudo /etc/init.d/apache2 force-reload

lunes, 8 de marzo de 2021

Fatal error base address marks unusable memory region (Opcache error - Local by Flywheel)

Lenguaje: Wordpress - Flywheel

Desarrollado para:  Aplicación web.

Luego de una instalación local normal de Local (de Flywheel) en un SO Windows 7, comienza la descarga e instalación de Wordpress y antes de poder iniciar el servidor, muestra el siguiente mensaje de error

 


Para poder corregir este error, debemos realizar lo siguiente:

  • Ir al archivo php.ini.hbs, que debe estar en la siguiente ruta: 
    • "C:\Users\[usuario de windows]\Local Sites\[nombre del sitio]\conf\php"
  • Dentro del archivo, ir a la sección Opcache y agregar las siguientes 2 lineas:

opcache.file_cache="C:\Windows\temp\php_opcache"
opcache.file_cache_fallback=1_

  • Luego guardar el archivo y reiniciar el sitio. Con eso debería iniciar correctamente. 

martes, 29 de septiembre de 2020

Cambio del valor propiedad en href con Javascript

Lenguaje: Javascript
Desarrollado para: Aplicación Web

Para cuando es necesario cambiar el valor de un parámetro (codigo) en un link a href, según el valor seleccionado en un combobox/select


//Función para el select, evento "change". Cuando se selecciona un valor, llama a la función que cambia el valor del link (change_link

$("#id-select").change(function(){
      change_link();
});


//Función que cambia el valor del parámetro del link

function change_link(){
    var val = $("#id-select option:selected").val();    // Selecciona el valor seleccionado en el select - ej.: 34
    $("#link").each(function(){
        var nhref = "";
        var href = $(this).attr("href").split("=");     // Obtiene el valor del link "href" y lo divide en un arreglo 
                                                                                             // - ej.: [pagina.php?codigo][]"
        nhref += href[0]+"=";                                 //Obtiene lo de la primera posición - ej.: pagina.php?codigo=
        nhref += val;                                               //Pega el valor del select - ej.: pagina.php?codigo=34
        $(this).attr("href",nhref);                            //Coloca el valor en el atributo "href"
    });
}

miércoles, 8 de mayo de 2019

HashtableUtil - Pasar una lista tipificada a Hashtable, utilizando Reflection


Lenguaje: C#
Desarrollado para: Aplicación de Consola C#

Clase que permite transformar una lista de valores en Hashtable y todas las listas que tanga asociadas, llamandose recursivamente.


using System;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;


namespace Util
{
    /// <summary>
    /// Clase que permite transformar un objeto en hashtable
    /// </summary>
    public class HashtableUtil
    {
        /// <summary>
        /// Clase que permite generar un Hashtable de una lista de objetos, por su tipo.
        /// </summary>
        /// <typeparam name="T">Tipo de objeto al que pertenece la lista</typeparam>
        /// <param name="objetos" />
        /// <returns></returns>
        public static Hashtable ObtieneHash<t>(List<t> objetos)
        {
            // obtiene las propiedades del tipo de objeto y las guarda en un arreglo
            PropertyInfo[] props = typeof(T).GetProperties();

            // se ordenan las propiedades por nombre
            Array.Sort(props ,delegate (PropertyInfo propertyInfo1, PropertyInfo propertyInfo2)
            { return propertyInfo1.Name.CompareTo(propertyInfo2.Name); });

            int indexProp = 0;
            // recorre las propiedades, para encontrar el indice de la propiedad "cod_code"
            foreach (PropertyInfo propertyInfo in props)
            {
                if (propertyInfo.Name.ToUpper().Equals("CODCODE")) { break; }
                indexProp++;
            }

            bool usaCorrelativo = false;
            if (indexProp &gt;= props.Length) { usaCorrelativo = true; }


            // se recorre la lista de objetos para guardar los objetos con su codigo asociado
            Hashtable retorno = new Hashtable();
            // indice de las propiedades
            int indice = 0;
            foreach (T obj in objetos)
            {
                //se crean los objetos a utilizar
                Hashtable ht = new Hashtable();
                List<object> lista = new List<object>();

                foreach (PropertyInfo propertyInfo in props)
                {
                    // se obtiene el tipo (type) de la propiedad y se compara con el tipo de la lista
                    Type tipo = ((T)obj).GetType().GetProperty(propertyInfo.Name).PropertyType;
                    if (tipo.Name == lista.GetType().Name)
                    {
                        // si es una lista, se obtiene el valor (T) de la lista
                        Type itemTipo = tipo.GetGenericArguments()[0];
                        // se crea un MethodInfo con el mismo método, pasandole el tipo de la lista
                        MethodInfo mi = typeof(HashtableUtil).GetMethod("ObtieneHash", BindingFlags.Static | BindingFlags.Public);
                        MethodInfo mi2 = mi.MakeGenericMethod(new Type[] { itemTipo });
                        // Invocamos el método con los valores obtenidos de la propiedad
                        ht[propertyInfo.Name] = mi2.Invoke(null, new object[] { ((T)obj).GetType().GetProperty(propertyInfo.Name).GetValue(obj, null) });
                    }
                    else
                    {
                        // si no es una lista, se mete directo el valor del objeto, con su nombre de propiedad.
                        ht[propertyInfo.Name] = ((T)obj).GetType().GetProperty(propertyInfo.Name).GetValue(obj, null);
                    }
                }

                if (usaCorrelativo)
                    retorno[indice.ToString()] = ht;
                else
                {
                    string nombrePropiedad = props[indexProp].Name;
                    // se coloca el código como key en el Hashtable de retorno, asociando su misma hashtable de valores.
                    retorno[((T)obj).GetType().GetProperty(nombrePropiedad).GetValue(obj, null).ToString()] = ht;
                }
                indice++;
            }
            return retorno;

        } 
    }
}