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

domingo, 27 de diciembre de 2020

for loop PHP continue to next item

 

<?php
$stack = array('first', 'second', 'third', 'fourth', 'fifth');

foreach($stack as $v){
    if($v == 'second') {
      continue;
    }
    echo $v.'<br>';
}
/*
first
third
fourth
fifth
 */
?> 

jueves, 26 de octubre de 2017

Anti-DDoS PHP Script (Prevenir ataques DDoS en PHP)

Las soluciones contra un ataque DDoS son más bien del lado de la configuración del servidor y el firewall que tenemos allí instalado.

No obstante, es posible a nivel de código tener un pequeño control, que si no evita el ataque completamente, al menos lo puede mitigar en una gran medida. Manos a la obra...

martes, 24 de febrero de 2015

Cómo ejecutar una Instrucción SQL desde un archivo .BAT en ciclos

A veces necesitamos ejecutar un script en SQL en nuestra base de datos de SQL Server, pero sin hacer uso del Agente (a veces por motivos de seguridad), sin un Servicio de Windows (para disminuir consumo de procesamiento), sin construir una aplicación de consola y que además se autoejecute cada determinado tiempo, de manera automática.

Bueno... con semejante requerimiento solo nos queda hacer uso de un archivo .BAT (Batch).

Los archivos .BAT son un archivo de texto que solamente ejecuta comandos de manera primaria en el DOS (Disk Operating System) y en él se puede invocar la ejecución de otras aplicaciones.

Para el caso que necesitamos en este ejemplo, escribiremos la instrucción que necesitamos ejecutar en nuestra base de datos en un archivo .sql y lo guardamos en una ruta del disco duro fácil de acceder. En un editor de textos plano, como el notepad, guardando después el archivo con el nombre de nuestra elección sin olvidar la extensión .sql.

Nota: Es preferible que podamos acceder a la BD de SQLServer desde la misma máquina donde vamos a poner el archivo .sql y el archivo .bat

Ejemplo del archivo .sql:
Update seguridad_lic SET licencia_status = 1 where cliente_pago = 'OK';

Como se puede ver es una instrucción SQL que puede ser interpretada por SQL Server de manera fácil.  Este archivo lo guardamos con el nombre instruccion.sql (puedes ponerle el nombre que quieras pero con esa extensión) y ahora construimos el archivo ejecutar.bat

Ejemplo del archivo ejecutar.bat:
@echo off

OSQL -U (username) -P (password) -S (Direccion IP del servidor con el puerto, si no hay un valor por defecto) -i C:\instruccion.sql -o c:\instruccion.txt

Y ahora lo que nos hace falta es que se ejecute repetidamente. Para esto podemos hacer 3 tipos de alternativas:
  1. Ejecución infinita en un ciclo interminable (muy poco recomendable).
  2. Ejecutarlo un determinado número de veces (mejor, pero tiene una vida útil limitada)
  3. Incluirlo en el registro de Windows, para que se ejecute cada determinado tiempo o periódicamente (más recomendable)

1. Ejecución infinita en un ciclo interminable

Para esto simplemente usamos un puntero y lo invocamos internamente, de manera que hace un ciclo infinito.  Abrimos el archivo (NO con Doble Clic), Botón derecho y abrirlo con el bloc de notas (por si acaso):

@echo off
 

:repetiresto
 

OSQL -U (username) -P (password) -S (Direccion IP del servidor con el puerto, si no hay un valor por defecto) -i C:\instruccion.sql -o c:\instruccion.txt

Goto repetiresto

Guardamos de nuevo el archivo y listo.
Advertencia:  La única manera de detener este archivo es eliminando el proceso por el Adminitrador de Tareas.

2. Ejecutarlo un determinado número de veces

De nuevo, abrimos el archivo para editarlo y hacemos el siguiente ajuste:

@echo off

set Repetir=1
goto
repetiresto
:repetiresto
set /a Repetir=Repetir+ 1

OSQL -U (username) -P (password) -S (Direccion IP del servidor con el puerto, si no hay un valor por defecto) -i C:\instruccion.sql -o c:\instruccion.txt

if %Repetir% == 5 (goto fin) else (goto
repetiresto)
:fin


En este ejmplo lo pusimos a que se repitiera 5 veces.

3. Incluirlo en el registro de Windows

Al hacer esto, se iniciará cuando iniciemos el PC, por lo tanto, quedará dependerá de que la máquina esté activa.

No hace falta modificar el archivo ejecutar.bat que ya tenenos escrito desde el comienzo.  Solamente hay que crear uno nuevo para hacer el registro en Windows y debe ser así:
@echo off
AT 17:00 @echo off&&start c:/ejecutar.bat
REG ADD HKLM\Software\Microsoft\Windows\CurrentVersion\Run /v sysin2 /t REG_SZ /d "c:/ejecutar.bat"


Espero que les ayude en sus procesos de ejecución de base de datos periódicos.

Un saludo,
@ivan_londono

jueves, 21 de agosto de 2014

Crear una aplicación de Windows para que funcione siempre como Administrador

Los permisos por defecto en cualquier aplicación que uno desarrolla para Windows, toma por defecto el usuario con el que nos hemos autenticado en Windows.  Esto ocurre por razones de seguridad.  Pero algunas veces necesitamos que nuestra aplicación haga actividades en el PC con permisos administrativos... y generalmente esto genera errores en nuestra aplicación.

El usuario final que tiene en sus manos nuestra aplicación (así recién salida del horno de nuestro cerebro), y con SO Windows 7 o superior, puede darle permisos de ejecución para que se ejecute como administrador.  Pero seamos francos... no podemos depender de lo que haga un usuario (así se lo expliquemos con plastilina).

Para crear una aplicación que siempre se ejecute con permisos de administrador, esto es lo que hay que hacer en nuestro código:

1) Crear el archivo de manifiesto.  En El sitio de MSDN hay un tutorial muy claro de cómo generar este archivo (y un poco largo para ser sinceros). Resumiendo: En Propiedades del proyecto, ingresamos en la pestaña de "Aplicación" y pulsamos el botón de "Ver configuración de Windows".  Esto generará un archivo automáticamente llamado app.manifiest


2) Modificando el archivo app.manifiest.  Abrimos el archivo recién generado y cambiamos la configuración de requestedExecutionLevel.  Debe quedar con la siguiente sintaxis: <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
En el archivo generado, hay varias opciones de ejemplo de lo que podemos hacer en cuanto a seguridad se trata, pero para nuestro objetivo de éste artículo pondremos el recien mencionado.


De esta manera, al ejecutar nuestra aplicación en Windows, sin importar cuál sea el usuario desde el que se está ejecutando la aplicación, tendrá como prioridad la ejecución "como administrador".

Esto es solo la mitad de la solución.  Porque el usuario, puede desde modificar sus permisos administrativos sobre cada aplicación y declarar nuestra aplicación como no apta para ser ejecutada con rol administrativo.  Entonces es necesario hacer una validación a nivel de código:

En VB.NET:

Imports System.Security.Principal
 
If myPrincipal.IsInRole(WindowsBuiltInRole.Administrator) = false Then
   MsgBox ("Requiere permisos administrativos para ejecutar esta aplicación")
End If 


En C#.NET:

using System.Security.Principal;
 
If (myPrincipal.IsInRole(WindowsBuiltInRole.Administrator) == false) {
MsgBox ("Requiere permisos administrativos para ejecutar esta aplicación"); 
}
 
 

miércoles, 19 de junio de 2013

Warning: Cannot modify header information - headers already sent by...

Situación:

Aparece este error en nuestro servidor de PHP:


Warning:  Cannot modify header information - headers already sent
 by (output started at 
/home/dominio/public_html/includes/functions/incrustaciones.php:496)
 in /home/dominio/public_html/general.php on line 108

Entendiendo el Problema:

En PHP podemos incrustar codigo para funciones recurrentes, esto lo hacemos con los siguientes comandos: include_once('archivodefunciones.php'), require('archivodefunciones.php').

Estos archivos incrustados solo deben contener PHP, y debemos asegurarnos que tanto al comienzo como al final se usen los TAG de código para determinar el contenido del archivo.  Estos tag son <?php al comienzo y ?> al final, entonces una estructura de un archivo incrustado debe ser:

Al comienzo:




Y al final:



Causas del problema:

El error se genera cuando hay contenido luego del cierre del archivo incrustado.  Es decir, el mensaje de eeror nos indica que debemos revisar el archivo incrustaciones.php (segun nuestro ejemplo), y debemos mirar al final del documento.  En pocas palabras encontraremos el archivo con el siguiente final:



Solución:

Hay dos maneras de solucionar el problema:
  1. Quitando el contenido restante luego del Tag de cierre de código.
  2. Quitando el Tag de cierre de código, indicando que el código de PHP no se ha terminado.
 

viernes, 18 de enero de 2013

A potentially dangerous Request.Form value was detected from the client

Es tal vez un error ya muy fácil de corregir por la mayoría en un sitio desarrollado en ASP.NET, pero con Framework 2.0. Sucede que en un servidor recientemente, fue necesario cambiarlo a Framework 4.0 y apareció este error.

Causas:
La principal causa de este tipo de errores es el envío en algun campo de texto de un formulario un contenido que esté encerrado en un TAG, es decir entre símbolos menor qué y mayor qué "< cualquier cosa >".

Realmente cualquier contenido entre estos símbolos no son potencialmente peligrosos, salvo cuando su contenido pueda ser comandos de ejecución tipo Javascript.  Entonces nos pueden incluso infectar el sitio web de algun tipo de troyano o gusano que se replique entre los archivos de nuestro servidor.

Solución:
En Framework 4.0, es necesario poner la siguiente línea de código en el web.config entre el TAG de <system.web>:


<system.web>
   <httpRuntime requestValidationMode="2.0" />
</system.web> 

Si alguien quiere de manera global, quitar las validaciones en todas las páginas de la aplicación, entonces es necesario incluir dentro del mismo TAG de sistem.web, el comando para evitar esta validación:

<system.web>
   <pages validateRequest="false" />
</system.web>

jueves, 27 de diciembre de 2012

Crear un XML desde un Array en PHP

Hace poco me encontré con la necesidad de generar archivos XML desde PHP. Lo interesante del tema es que el XML debe generarse en el servidor desde algunos parámetros, por eso era necesario incluir un encabezado para que el cliente lo identificara como tal.

Por lo tanto esto se compone de cuatro partes:

1) El encabezado en PHP:

<?php
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');

header('Content-type: text/xml');
?>


2) El array puede ser en cualquier complejidad. Aqui algunos ejemplos:

<?php
$array 
= array(
    
"foo" => "bar",
    
"bar" => "foo",
);
// a partir de PHP 5.4 

$array = [
    
"foo" => "bar",
    
"bar" => "foo",
];
?>

3) La invocación se hace por una función en donde se le pasa el array, indicandole cuál es el nodo del XML en el que se va a encapsular el resto de los datos:

echo arrayToXml($array,'datos');


4) La función que hace el trabajo es la siguiente:

function arrayToXml($array,$lastkey='root')
{
    $buffer.="<".$lastkey.">";
    if (!is_array($array))
    {$buffer.=$array;}
    else
    {
        foreach($array as $key=>$value)
        {
            if (is_array($value))
            {
                if ( is_numeric(key($value)))
                {
                    foreach($value as $bkey=>$bvalue)
                    {
                        $buffer.=arrayToXml($bvalue,$key);
                    }
                }
                else
                {
                    $buffer.=arrayToXml($value,$key);
                }
            }
            else
            {
                    $buffer.=arrayToXml($value,$key);
            }
        }
    }
    $buffer.="</".$lastkey.">";
    return $buffer;
}






5) El resultado que obtenemos es un archivo en XML con la siguiente estructura:

<datos>
   <foo>bar</foo>
   <bar>foo</bar>
</datos>

martes, 18 de diciembre de 2012

Validando el HTML y su sintaxis

Durante el desarrollo de cualquier proyecto web o diseño de sitio web, nos enfocamos por tratar de darle gusto al cliente en todo lo que pide, y generalmente omitimos algunas validaciones básicas, entre ellas la más simple de todas y no menos importante: el HTML.

En realidad, la estructura de una página de HTML, ya sea generada por PHP, ASP, .NET, Ruby o cualquier otro lenguaje, debe tener unos lineamientos básicos, pero hoy por hoy, cuando las plataformas se diversifican, las tecnologías cambian tan rápidamente y la premura por entregar el proyecto, hace que nos encontremos en pleno lanzamiento de nuestro proyecto y surge el comentario de algún amigo a última hora: "Oye, no me carga bien en mi Tablet!", ó "Tengo IE 8 y las imágenes se ven corridas para un lado"... y un sin número de detalles más.

Hay muchas librerías que nos ayudan a minimizar este y muchos otros aspectos, pero siempre pasamos por alto lo más obvio... la estructura y la sintaxis del HTML.

No es de angustiarse, pero si de tener un poco más de cuidado. Lo cierto es que aunque estemos trabajando con HTML5, incluimos sintaxis y tags de HTML1, algunas veces por la costumbre, porque no fuimos precavidos en la arquitectura o porque simplemente funcionó y lo dejamos así.

Por eso les traigo esta herramienta, que no importa la versión del HTML con que estemos trabajando (incluyendo HTML5), siempre nos va a orientar en qué estamos fallando:

El enlace es el siguiente:
http://validator.w3.org/

7 razones para no usar Laravel en tu proyecto de PHP

En más de 40 años de experiencia como programador y director de proyectos de programación, he aprendido que cada requerimiento tiene mejores...