Escrito por
7th Sign | Iván Rico
nov
30
He aquí un caso nuevo para mí, resulta que mi hermano necesitaba modificar unas líneas del archivo de configuración del firewall que hice en uno de sus servidores pero cuando abría el archivo con vim este arrojaba unas líneas extrañas, por lo cuál me llamo y me comentó del error rápidamente me imagine el clásico escenario que se cierra el archivo mal y se queda por ahí el .swp pero cuando me da la descripción detalla veo que algo que no había visto, por lo cual le pedí acceso para revisarlo
y efectivamente el error era otro, al darle al comando
vim /etc/init.d/firewall.sh
Marcaba líneas como estas:
E575: viminfo: Illegal starting char in line: ifconfig
E575: viminfo: Illegal starting char in line: cd /usr/src/linux
E575: viminfo: Illegal starting char in line: make modules && make modules_install
E575: viminfo: Illegal starting char in line: ifconfig
Cuándo lo vi me asuste, pues pensé que había sido algún tipo de ataque que consistía en recompilar el kernel, pero haciendo memoria me acorde de que yo había compilado los módulos para levantar unas tarjetas de red, así que decidí documentarme un poco sobre este error así que me fui al google y en los primeros resultados encontré la solución.
Resulta que hay un archivo de historial para vim que se guarda en ~/.viminfo y este esta dañado y para solucionarlo solo había que borrarlo pues no me interesa el historial y así de fácil se solucionó
No sabía que vim guardaba un tipo de historial, si me queda tiempo buscaré que objetivo tiene esta funcionalidad del editor.
saludos
Archivado en:
consola, Linux
Escrito por
7th Sign | Iván Rico
nov
23
En base de datos raramente
tenemos problemas con registros repetidos, comunmente me ha tocado ver el caso de catálogos, por ejemplo un caso de registros repetidos en un catálogo de paises es que tengamos 2 veces México, 2 veces España, etc pero con distinta llave foranea cada uno de ellos y cuando entramos en tareas de depuración buscar estos registros a mano puede llevarse tiempo pero si utilizamos este query que ya no recuerdo de dónde lo copie
nos puede ayudar a sacar esta chamba en menos tiempo
En los campos de la segunda clausula where debemos indicar cuales campos son los que buscamos que estan repetidos y de este modo nos traerá el listado de id que lo estan
SELECT id
FROM tabla AS tabla1
WHERE id > (SELECT MIN(id)
FROM tabla AS tbl1
WHERE tabla1.campo1 = tbl1.campo1
AND tabla1.campo2 = tbl1.campo2
AND tabla1.campon = tbl1.campon)
Ahora si bien se nos pueden presentar casos en dónde no existe llave primaria podemos utilizar este otro query que resolverá la problematica
Aquí el truco consiste en agrupar aquellos campos que son los que pueden estar repetidos
SELECT campo1,
campo2,
campo3,
COUNT(*) AS registros
FROM tabla
GROUP BY campo1,
campo2,
campo3
HAVING COUNT(*) > 1
Espero que estos códigos les sean útiles.
Escrito por
7th Sign | Iván Rico
nov
17
Después de un buen rato sin postear, aquí ando de nuevo, la razón por la cuál no había tenido actividad es porque cambie de trabajo y el tiempo de adaptación fué mas largo de lo pensado pero bueno al grano, ahora en mi trabajo estoy a cargo de las Bases de Datos y hasta el momento todas las que me han ido pasando han sido en SQL Server y me he estado encontrando con una serie de necesidades para darles mantenimiento por lo cuál pondré aquí aquellos scripts que me hayan sido de gran utilidad esperando que a alguien mas le sirvan
Para empezar pondre aquí uno muy útil cuando de Stored Procedures se trata, consiste en localizar texto en el cuerpo de todos los SP de una Base De Datos
USE MiBaseDeDatos
go
SELECT ROUTINE_NAME, ROUTINE_DEFINITION, *
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_DEFINITION LIKE '%texto a buscar%'
AND ROUTINE_TYPE='PROCEDURE'
Lo he usado en SQL Server 2008 y 2005 y ha funcionado en las versiones anteriores a estas no las he probado aún, en caso de que algún día lo haga, editaré el post
saludos
Escrito por
7th Sign | Iván Rico
may
10
Desde hace algún tiempo llevo usando la clase PHPMailer para el envío de correos desde sistemas hechos en PHP por desgracia siempre que la ocupo es por solo algunos momento que para los pocos días su sintaxis se me olvida, por lo cuál he decidio ponerla aquí para que me quede de respaldo.
Bueno antes de comenzar cabe mencionar que estoy usando PHPMailer v5.1 y funciona para PHP 5 y 6 la pueden descargar de aquí
Ahora a si a comenzar con un ejemplo práctico, el cuál envía un correo electrónico utilizando el SMTP de Gmail
<?php
//incluir el codigo de la clase PHPMailer
require_once 'PHPMailer_v5.1/class.phpmailer.php';
//Se crea el objeto PHPMailer
$mail = new PHPMailer();
//se activa el SMTP
$mail->IsSMTP();
//se activa la autenticación
$mail->SMTPAuth = true;
//se activa la transferencia segura, requerida por gmail
$mail->SMTPSecure = 'ssl';
//se asigna dirección del smtp
$mail->Host = 'smtp.gmail.com';
//se asigna el puerto de envío
$mail->Port = 465;
//se asigna el usuario de la cuenta de correo
$mail->Username = 'miCuentaParaPHPMailer@gmail.com';
//se asigna el password de la cuenta de correo
$mail->Password = 'superPasswordSeguro';
//se asigna el correo y el nombre que aparecerá en la parte de
// "Enviado Por"
//se aplica la función utf8_decode para que los acentos se impriman bien
$mail->SetFrom('sistema@informatico.com', utf8_decode('Sistema Informático'));
//se asigna un tiempo limite para envío de correo
$mail->Timeout = 30;
//se activa el soporte de HTML
$mail->isHTML(true);
//se asigna un correo destino
$mail->AddAddress('ivan@rico.org.mx','Iván Rico');
//se asigna el cuerpo del mensaje
$mail->Body = '<h1>Cuerpo de Correo enviado desde PHP</h1><p>Este esto es una prueba</p>';
//se asigna el asunto del mensaje
$mail->Subject = 'Correo Enviado desde PHP';
try {
//se manda el mensaje
if(!$mail->Send()) {
throw new Exception('Error: '.$mail->ErrorInfo);
}
}
catch (Exception $e ){
echo $e->getMessage();
}
En lo particular me gusta usar el servicio de SMTP de Gmail porque brinda algunas ventajas por ejemplo, gmail dificilmente estará en las listas negras otra puede ser que la dirección IP de mi servidor no estará esparciendose por ahí y esto ayuda a reducir las probabilidades de caer en alguna actividad maligna en el servidor PHP
Archivado en:
programación
Escrito por
7th Sign | Iván Rico
may
3
Desde la versión de PHP 5.2 ya hay soporte estable para la clase DateTime que es muy útil al momento de trabajar con fechas y horas, de lo más relevante que he podido utilizar en esta clase ha sido el cálculo de diferencia de días entre 2 fechas distintas pero ademas se pueden hacer algunas operaciones como la de sumar y restar. Vamos a ver unos ejemplillos.
Primero que nada lo que tenemos que hacer es definir nuestra Zona Horaria esto se hace en el archivo php.ini en la sección Date
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = America/Monterrey
Si no podemos cambiar esta info porque no somos adminstradores del servidor PHP podemos hacerlo durante la ejecución con la función date_default_timezone_set
Muy bien, ya configurado esto podemos hacer uso de la clase sin problemas.
El ejemplo mas sencillo que podemos hacer es el de crear el objeto e imprimirlo
<?php
date_default_timezone_set('America/Monterrey');
$dateTime = new DateTime(); //Se genera objeto con la fecha actual
echo $dateTime->format("Y-m-d H:i:s");
Podemos generar el objeto con una fecha especifica si asi lo deseamos o podemos utilizar algunas cadenas:
$hoy = new DateTime('now');
echo "\n". $hoy->format("Y-m-d H:i:s");
$ayer = new DateTime('yesterday');
echo "\n". $ayer->format("Y-m-d H:i:s");
$maniana = new DateTime('tomorrow');
echo "\n". $maniana->format("Y-m-d H:i:s");
Para hacer operaciones con las fechas podemos utilizar los métodos:
- DateTime::add (soportada desde la versión 5.3)
- DateTime::sub (soportada desde la versión 5.3)
- DateTime::modify (soportada desde la versión 5.2)
Lo fantastico de esto es que detecta los años bisiestos así como el cambio de mes
<?php
$dateTime = new DateTime('2011-01-25');
$dateTime->add(new DateInterval('P10D')); //PERIOD 10 DAYS
echo "\n".$dateTime->format('Y-m-d'); //Esto imprime 2011-02-04
Si contamos solo con la versión 5.2 podemos utilizar el método modify para hacer operaciones
<?php
//Probando año bisiesto
$date = new DateTime("2012-02-28");
$date->modify("+1 day");
echo "\n". $date->format("Y-m-d"); //imprime 2012-02-29
//Probando cambio de año
$date = new DateTime("2011-01-05");
$date->modify("-10 day");
echo "\n". $date->format("Y-m-d"); //imprime 2010-12-26
Obtener la diferencia entre 2 fechas
<?php
$fecha1 = new DateTime('2011-01-01');
$fecha2 = new DateTime('2011-05-03');
$intervalo = $fecha1->diff($fecha2);
echo "\n".$intervalo->format('%R%a días'); //Imprime 122 días
Para conocer mas sobre el alcance de la clase pueden leerse el manual oficial
Archivado en:
programación
Escrito por
7th Sign | Iván Rico
abr
29
Bueno seguramente muchos ya conocen de lo que voy a explicar, pero como quiera lo pongo porque suelo olvidarlo y ahí ando googleando para recordarlo xD
Comencemos:
PHP soporta una sintaxis distinta a la ya conocida de las estructuras de control:
- if
- while
- foreach
- for
- swtich
todos los phperos conocemos que el cuerpo de cada estructura va entre llaves “{ }” pero en PHP 5 se incluyo el soporte para iniciar el cuerpo con dos puntos (:) y para finalizar con la palabra reservada endif, enfwhile, etc dependiendo lo que se este usando.
Veamos un ejemplo
$variable = 1;
if ($variable == 1 ) : //con ":" iniciamos
echo 'la variable equivale a '.$variable;
endif; // con esta palabra finalizamos
//esto es lo mismo que
if ($variable == 1 ) {
echo 'la variable equivale a '.$variable;
}
Sencillo no??
Ahora bien tal vez nos viene a la mente, y para que nos sirve tener esta forma alternativa si ya todos conocemos la tradicional y funciona muy bien, bueno una posible respuesta y muy válida sería la utilización de esto en bloques HTML dónde tienes que revolver ambos lenguajes, veamos un ejemplo un poco mas práctico:
;
<?php
/* Mostrar un listado de las distribuciones del Canterbury Project */
//formamos un arreglo
$distros = array('Debian', 'OpenSUSE', 'Gentoo', 'Arch','Grml');
?>;
<html>
<head></head>
<body>
<p>Las distribuciones que nos la hicieron fueron:</p>
<table>
<?php foreach ($distros as $distro ) : ?>
<td><?php echo $distro ?></td>
<?php endforeach ?>
</table>
</body>
</html>
Cómo pueden observar en el bloque de HTML que puse se puede apreciar de forma rápida dónde finaliza la sentencia foreach lo cuál aventaja a si ponemos simplemente la llave que cierra “}”
Yo lo veo muy útil para utilizarlo en la parte de la vista osea en las plantillas o cosas por el estilo.
bueno por el momento es todo. Saludos
Escrito por
7th Sign | Iván Rico
abr
20
Hace algunos meses que quería explorar esta librería de cURL pero no había tenido en mis manos algún proyecto que la requiriera, pero tenía la esperanza de que pronto se llegará uno y así fue, hace algunas horas diseñe una rutina simple en PHP que hace uso de la librería para hacer tan solo la prueba del concepto.
La prueba fué muy sencilla, nada del otro mundo, pero se logra el objetivo
Básicamente lo que pretendo hacer es mandar un post desde un dominio a otro dominio y tomar el resultado que por razones obvias es HTML y analizarlo para extraer ciertos datos que me interesan.
Este es el código que corresponde a la parte del cURL, no es gran cosas y ademas lo copie del manual de PHP
// INICIALIZAR LA PÁGINA QUE ESPERA EL POST
$ch = curl_init('http://servidor/pagina.html');
// INDICARLE QUE SE LE ENVIARA UN POST DE LOS NORMALITOS
curl_setopt ($ch, CURLOPT_POST, 1);
// CON ESTO SE INDICA QUE EL RESULTADO LO GUARDARA EN UNA VARIABLE
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
// EN MI CASO NECESITABA ENVIAR LA COOKIE Y CON ESTA
// OPCION SE LOGRA TAL COMETIDO
$cookie="cadenotaQueRepresentaLaCookie";
// ANEXAR LA COOKIE
curl_setopt($ch, CURLOPT_COOKIE, $cookie);
// MANDARLE LOS VALORES QUE ESTA ESPERANDO LA PAGINA
curl_setopt ($ch, CURLOPT_POSTFIELDS, 'campo1=valor1&campo2=valor2');
// YA TODO PREPARADO EJECUTAMOS LA ACCION Y LA GUARDAMOS EN LA VARIABLE EL RESULTADO
$resultado = curl_exec ($ch);
// CERRAMOS
curl_close ($ch);
/*FIN */
Y bien con estas simples sencillas líneas podemos enviar POST a otros dominios y analizar las respuestas.
Si quieren conocer mas pueden entrar al manual o esperarse que me haga un experto en el uso de esta librería xD
Espero sea de utilidad para alguien.
Saludos
Archivado en:
programación
Escrito por
7th Sign | Iván Rico
abr
19
Bueno aquí la presentación de la plática que mencione en un post pasado
cualquier duda pueden preguntar, igual y mas adelante subo los ejemplos prácticos que utilizamos para demostrar las vulnerabilidades.
Saludos
Escrito por
7th Sign | Iván Rico
abr
13
Escrito por
7th Sign | Iván Rico
abr
11
El sábado pasado se llevo acabo el flisol 2011 y gracias a Basicilio tuve la oportunidad de dar una plática en conjunto con Jesús Reyna el tema del que hablamos fue:
Seguridad en el Desarrollo de Aplicaciones Web PHP
Aunque el que tema es muy muy amplio la plática fue muy general, basicamente se vio la seguridad en el ambiente hablando de LAMP y sobre las mejores prácticas en cuanto a configuración del Sistema Operativo, Apache y PHP.
También tuvimos oportunidad de hacer unos ejemplos prácticos en cuanto programación insegura con el fin de concientizar sobre las consecuencias de hacer código sin preocuparse por este tema es que tan importante.
La audiencia fue buena y hubo algunas preguntas muy interesantes sobre el tema.
Espero participar el próximo año con otra plática o algún taller.
Mas adelante subiré la presentación así como los ejemplos que pusimos (espero no tardarme en postearlos
)
Aquí unas fotos que me paso mi sobrino Edgar ya que de casualidad andaba también en el evento como buen geek.