Limpiando entradas de datos de usuario en OsCommerce

Escrito el 02/October/2008 por juan_belon

Como echaba en falta una función decente para eliminar caracteres extraños, he creado esta opción para la función de OsCommerce "tep_sanitize_string" , de forma que ahora además tenga un modo "paranoid" con el que sólo nos deje el texto y nada más…para campos peligrosos como para pasarelas de pago y demás es encantador jejeje

Nos vamos a /catalog/includes/functions/general.php y reemplazamos la función tep_sanitize_string por esta:


<?php
function tep_sanitize_string($string,$paranoid=false) {
$string ereg_replace(‘ +'‘ 'trim($string));
if (!
$paranoid)
return 
preg_replace("/[&lt;&gt;]/"‘_'$string);
else {
$string preg_replace(‘/&lt;(.|\s)*?&gt;/'"$string);
$string str_replace(‘&lt;',",$string);
$string str_replace(‘&gt;',"",$string);
return 
ereg_replace(‘(([^0-9a-z&lt;&gt;A-Z_\.\ \@])+)'"",$string);
}
}

?>


Ayuda con cadenas de texto

Escrito el 24/April/2008 por juan_belon

Todo sobre cadenas de texto

Introducción

Vamos a aprender como encontrar, transformar y borrar palabras ya que es algo así como una tarea esencial de todo ingeniero de aplicaciones web que se precie.Además tomaremos consciencia de los métodos usados para ahorrarnos escribir texto de entrada/salida en nuestras aplicaciones a la hora de crear mecanismos automáticos con los que operar en nuestras aplicaciones.

Verás funciones de este artículo que son bastante simples pero se mencionan por si nunca antes las habias visto, lo estamos haciendo fácil para todos. Las funciones más complejas usan expresiones regulares, una parte muy potente de PHP que todo programador ha de conocer.

Extraer parte de una cadena

El problema de un buscador es que se suele buscar en formas plurales y los programadores dándonos cuenta de esto, tenemos que ingeníarnoslas para procesar el texto y hacer que el usuario encuentre lo que busca en la base de datos. Para eliminar las ‘s' de una cadena se puede utilizar la función substr(cadena, inicio, fin) de forma que podemos comprobar si la última letra se debe eliminar con un básico:
if (susbstr( cadena, -1, 1)=='s')

Una vez que has encontrado una subcadena que te interesa hay una serie de operaciones que puedes realizar con ella:

  • Reasignar una porción específica de la cadena usando substr() para eliminar los caracteres que sobran.
    Ejemplo: $cadena = substr($cadena, 0, 10);
    Lo que hace es poner en $cadena los 10 primeros caracteres de $cadena,empezando por el primero.
  • Eliminar los últimos N caracteres con substring y strlen().
    Ejemplo: $cadena = substr($cadena,0 ,strlen($cadena)-3);
    Guarda en $cadena todos los caracteres menos los 3 últimos.
  • Reemplazar caracteres con substr_replace(cadena_original, cadena_reemplazo,inicio, longitud) que permite especificar una subcadena y reemplazarla con otra, por ejemplo:
    $cadena = substr_replace('abcdef','bbb',1,2)
    guarda en $cadena la cadena ‘abbbdef'

Operaciones con Mayúsculas y Minúsculas

Un problema que puede surgir con PHP y MySQL es que este sistema gestor de bases de datos es sensible a mayúsculas pero soporta campos que no lo son, sin embargo, las cadenas en PHP son sensibles a mayúsculas, asi que prentendemos asegurar que no habrá malentendidos entre ambos y que nos vamos a llevar bien :) Para ello disponemos de una consulta MySQL donde no hay diferencia entre Juan y JUAN , sin embargo en PHP son dos cadenas distintas, asi que necesitamos pasar toda la cadena en este lenguaje a mayúsculas antes de compararlas o imprimirlas por pantalla.
PHP tiene varias funciones esenciales para realizar este tipo de tareas:

  • strtolower(): pasa toda la cadena a minúsculas
  • strtoupper(): pasa toda la cadena a mayúsculas
  • ucwords(): convierte la primera letra de cada palabra de la cadena a mayúsculas
  • ucfirst(): convierte la primera letra la cadena a mayúsculas

Ejemplo

 

<?php$cadena = "HOla qUe Tal CoMo EstAs?";

echo strtoupper($cadena);

//imprime "HOLA QUE TAL COMO ESTAS?"

echo strtolower($cadena);

//imprime "hola que tal como estas?"

echo ucwords(strtolower($cadena));

//usando un truquito para pasar primero la cadena a min�sculas

//imprime "Hola Que Tal Como Estas?"

echo ucfirst(strtolower($cadena));

//imprime "Hola que tal como estas?"

?>

Hemos de tener en cuenta que si nuestra cadena tiene letras separadas por otros caracteres que no sean un espacio,se interpretan como una única palabra, es decir, juan-belon se interpreta como una sóla palabra, para realizar este tipo de conversiones a palabras en esta forma necesitamos crear una expresión regular que detecte dicho formato o algo más fácil,como construir una lista en un array y pasárselo a la función str_replace() como argumento para reemplazarlo. Ejemplo de conversiones que no queremos que se hagan:

 

<?phpfunction formatear_titulo($cadena){

//Primero el array de palabras que no queremos que se pasen a may�sculas, pronombres,preposiciones,etc.

$mayusculas = array("De","A ","El ","La ","Y ","Un ","Una ","O ");

//Ahora el conjunto de reemplazos, en el mismo orden!!

$minusculas = array("de ","a ","el ", "la ","y ","un ","una ","o ");

$cadena = ucwords(strtolower($cadena));

$cadena = str_replace($mayusculas, $minusculas, $cadena);

//Ahora devolvemos la cadena con la primera letra en may�scula:

return ucfirst($cadena);

}

?>

Debemos tener en cuenta que como en el caso anterior, si teníamos una cadena como Juan-Belon, la función ucwords(strtolower()) ha eliminado su mayúscula en Belon, si es importante preservar dichas capitalizacionese entonces puedes usar una comparación mediante la función strcasecmp(cadena1, cadena2);

Encontrar subcadenas

PHP tiene bastantes funciones que permiten encontrar subcadenas en una cadena dada. La elección depende de lo que quieras hacer con el resultado. Algunas funciones básicas:

  • strpos():
    encuetra la posición de la primera ocurriencia de la subcadena pasada
  • strrpos(): encuentra la posición de la última ocurrencia de la subcadena proporcionada, en la cadena pasada como argumento. A partir de dicha posición se puede extraer el contenido restante con substr() ,o se puede hacer con la siguiente función
  • strstr(): devuelve todo lo que hay después de la primera ocurrencia de la subcadena dada

Estas funciones devuelve False si la subcadena no se encuentra presente en la cadena original, hay que llevar cuidado pues la primera ocurrencia puede estar en la posición 0 de la cadena, lo que se puede interpretar como un valor False usado en un condicional, es por eso que debemos usar "===false" en lugar de "==false".
La triple igualdad asegura que los valores y los tipos de los términos del operador de comparación son los mismos, es importante porque puedes obtener valores no esperados como resultado de una comparación.
Veamos un ejemplo:

 

<?php$cadena = "Yo apruebo todas mis asignaturas porque estudio lo suficiente en mi estudio particular";

$termino = "estudio";

//Aparece el término en la cadena?

$pos = strpos($cadena, "estudio");

if ($pos === false){

echo "No se ha encontrado el término ‘$termino' en la cadena ‘$cadena'";

} else {

echo "Se ha encontrado el el término ‘$termino' en la cadena ‘$cadena' en la posición: $pos<br>";

echo "Última posición:".strval(strrpos($cadena, $termino))."<br>";

echo strstr($cadena, $termino)."\n";

//Imprime desde el primer "estudio":

echo substr($cadena, strrpos($cadena,$termino))."<br>";

//Imprime "estudio particular"

}

?>

Recordar que estas funciones son sensibles a mayúsculas, y que se están comparando subcadenas, no palabras, para ello necesitamos construir una expresión regular.
Reemplazar texto es muy útil, de hecho se puede construir un sistema de plantillas con la función str_replace super rápido…
Ahora vamos a ver un pequeño ejemplo de esto…

Notación "Camello"

Esta notación se utiliza para convertir nombres usados en un programa en nombres para mostrar por la pantalla del usuario.

Algunos frameworks (conjunto de librerias de programación) utilizan mecanismos en clases para pluralizar palabras y formas verbales…aunque algunas veces estos mecanismos transparentes resultan de lo más complicado de entender gracias a los comicos nombres y formas, como "camellizar" y otras parodias XD

 

<?php/**

* Pasa de formato Camel a texto que se puede leer por un humano

* @param str $cadena

* @return str

*/

function humanizar($cadena) {

return ucfirst(preg_replace(‘/([a-z])([A-Z])/', ‘\1 \2′, $cadena));

}

/**

* Pasa una cadena a texto en notación "Camel" para usarla en un programa

* @param str $cadena

* @return str

*/

function camellizar($cadena) {

if (!isset($cadena[0])) {

return ";

}

$cadena = ucwords(strtolower($cadena));

$cadena = preg_replace(‘/[^a-zA-Z0-9]/', ", $cadena);

$cadena[0] = strtolower($cadena[0]);

return $cadena;

}

?>

El término CamelCase describe la apariencia de las PalabrasEnCodigo. Varias palabras unidas sin espacios entre sí, mezclando mayúsculas y minúsculas. Las letras mayúsculas y minúsculas se asemejan a las jorobas de un camello, de ahi lo del animalillo XD

Veamos un ejemplo de uso:

 

<?php echo humanizar(‘ejemploTextoCamello');

// Salida: Ejemplo Texto Camello

echo humanizar(‘nombreProducto');

// Salida: Nombre Producto

echo camellizar(‘Ejemplo Texto Camello');

// Salida: ejemploTextoCamello

echo camellizar(‘Nombre - Producto');

// Salida: nombreProducto

?>

Expresiones Regulares

El tema de las expresiones regulares se sale un poco del tratamiento de cadenas y es algo un poco más complejo que ha de ser tomado con cautela para comprenderlo…

Algunos ejemplos más podeis verlos en :

  • Compactadores de HTML
  • Filtros para guardar ficheros: $fichero = ereg_replace('(([^0-9a-zA-Z_\.])+)', "",basename($f[$i]));
  • Filtros para comprobar que una cadena es un correo electrónico:

     

    <?php
    /**

    * Utiliza una expresion regular para comprobar que el $correo pasado es realmente un correo electronico

    *

    * @param str $correo

    * @return bool

    */

    function zen_es_correo($correo){

    return preg_match(

    ‘/^[\ a-z0-9._-]+@[a-z0-9.-]+\.[a-z]{2,6}$/i',

    $correo

    );

    }

    ?>

  • Funciones para procesar fechas

etc.

Todo sobre Funciones en PHP

Escrito el 07/April/2008 por juan_belon

He considerado oportuno explicar desde las cosas más básicas y sencillas con respecto a las funciones hasta las más complejas, ya que nos pueden ahorrar inventarnos otros mecanismos más inadecuados si no conocemos las maravillosas características que se pueden tener un método o función bien construido. Empecemos pues por lo más fácil y vayamos aumentando el nivel

Declarar una función simple: desde PHP4 se pueden declarar antes y después del lugar donde es llamada.


<?php
function imprimirNegrita($texto){
echo 
"<b>$texto</b>";
}
echo 
"Linea sin negrita<br />";
imprimirNegrita("Linea en negrita<br />");

?>


La sentencia return
En un punto de la función se encontrará en un estado final y dispuesta a devolverle el control a quien la llamó, por ejemplo cuando llega al final del bloque de código de la función, la ejecución coge entonces la línea siguiente de aquella donde fue llamada. Otra forma de para la ejecución de la función es usar la sentencia return. Seguramente existirán varias en una función, pero usar demasiados puede ser una barrera para comprender el flujo de la ejecución y hace más difícil la lectura del código. Lo ideal es tener una entrada y una salida pero en la práctica hay casos en los que es más que aceptable tener múltiples sentencias return.


<?php
function hacerNegrita($texto){
$texto "<b>$texto</b>";
return 
$texto;
}
echo 
"Linea sin negrita<br />";
echo 
hacerNegrita("Linea en negrita<br />");

?>


Paso por referencia y por valor:
Para la mayor parte de los tipos de datos ,las variables pasadas como argumentos de la función se hacen por valor, en PHP4 se puede forzar a pasarlos por referencia mediante el uso de "&" justo antes del nombre de la variable: "&$variable". Las funciones también disponen de esta característica si realizamos algo como lo siguiente:


<?php
function &amp;obtenerMatrizAleatoria(){
$matriz = array();
for ( 
$i=0$i 10$i++ ){
$a[] = rand(1,100);
}

return $a;
}

$nuevaMatriz =&ampobtenerMatrizAleatoria();

?>


Sin embargo, hay que tener en cuenta que el uso de & estará "vetado" a partir de PHP6.x o superiores y si usamos la referencia con una sentencia new aparecerá un error de tipo STRICT a partir de la versión 5 de PHP.


<?php
class MiClase {
/** Constructor de MiClase */
function MiClase(){}
}
$c =&amp; new MiClase(); //Devuelve "deprecated" en PHP5.x+

?>


Ámbitos
El ámbito ,también llamado "scope", se creaó para evitar colisiones entre variables de diferentes funcione, PHP incluye dicha noción de ámbito. Cada línea de código pertenece a un determinado "scope". El código dentro de una función se considera que pertenece al ámbito de la propia función. El código fuera de la función pertenece al ámbito global del fichero. El ámbito es la propiedad que determina qué tabla de memoria se usa para almacenar las variables y alternativamente qué variables son accesibles. Por lo tanto ,las variables de una función son locales a ésta,por lo que no se podrán modificar desde fuera de ella ya que son de propiedad privada. Sin embargo las variables globales fuera de la función han de declararse como globales accesibles por medio de la sentencia "global" antes del nombre de variable, ejemplo: "global $mivariable" es accesible en una función si realizamos dicho acceso de la variable declarada fuera:


<?php
$ciudad  
"Granada";
function 
miCiudad(){
global 
$ciudad;
mostrarCiudad($ciudad);
}
function 
mostrarCiudad($nombre){
echo 
"La ciudad seleccionada es :".$nombre."<br />";
}
function 
OtraCiudad(){
$ciudad "Sevilla";
mostrarCiudad($ciudad);
}
miCiudad();
OtraCiudad();

}

?>


Cuando se ejecuta el script se muestra Granada y Sevilla en ese orden. Aunque hayamos modificado $ciudad dentro de la función OtraCiudad() ,no es la misma que la del ámbito global.

La sentencia global lleva una variable a un espacio de nombres de una función,desde ese momento se puede modificar dentro o fuera de aquella. Así es posible referenciar la variable a través del array $_GLOBALS donde se indexan por el nombre, de forma que podríamos acceder a "global $ciudad" por medio de "$_GLOBALS['ciudad']".

Variables estáticas
Recordemos que cuando creamos una variable dentro de una función sólo existe mientras la función se esté ejecutando. Una vez que la ejecución finalice y se pase el control al proceso que realizó la llamada, todo el espacio de variables para esa función es borrado, a veces esto no es lo deseable porque necesitamos que la función recuerde el último estado de las variables entre llamadas, esto se puede implementar por medio del uso de la sentencia "static".
En el comienzo de la función antes de los comandos debes declarar las variables que van a ser estáticas,entonces mantendrán su valor incluso después de abandonar la función. Veamos un ejemplo sencillo para usar esto (alternar colores de las celdas de una tabla):


<?php
function alternarColor(){
//Recordar Color usado
static $color "#00FF00″;
if (
$color=="#00FF00″){
$color "#CCFFCC";
} else {
$color "#00FF00″;
}
return 
$color;
}
echo 
‘<table>';
for (
$i=1$i 11$i++){
$color alternarColor();
//Mostrar la fila en el color alternado:
echo ‘<tr><td bgcolor="‘.$color.‘">Fila '.$i.‘</td>'."\n";
}
echo 
‘</table>';

?>


Argumentos
Cuando se declara una función es posible que necesitemos usar argumentos dentro del paréntesis y separados por comas, si se usa el operador & se pasan por referencia (se pasa la dirección de memoria de la variable desde la llamada) y si no se especifica se pasan por valor (se hace una copia de la variable), los cambios realizados sólo permanecen después de salir de la función con el paso por referencia.
Un argumento puede tener un valor por defecto, esto se hace con una asignación (usando el "=" ) al especificar el nombre de variable dentro del paréntesis de la declaración de la función, ejemplo:


<?php
function mostrarColor($texto$color="black", &amp;$cuenta=NULL){
echo 
‘<span style="color:'.$black.‘;">'.$texto.‘</span>';
//La función isset() comprueba que $cuenta no tenga un valor NULL (nulo).
if (isset($cuenta) &amp;&ampis_numeric($cuenta)) $cuenta intval($cuenta)+1;
}

mostrarColor("Texto en negro").‘<br />';
mostrarColor("Texto en azul","blue").‘<br />';
//Ahora declaramos $c para pasársela como argumento a la función:
$c 0;
mostrarColor("Texto en rojo con cuenta","red",$c).‘<br />';
mostrarColor("Texto en verde con cuenta","green",$c).‘<br />';
echo 
"Cuenta total: $c <br />";

?>


La cuenta ha de tener 2 al final de la ejecución.

Funciones para recuperar propiedades de una función
Podemos acceder a los argumentos por su posición usando tres funciones:

  • func_get_arg($numero_argumento): el primer argumento tiene índice 0.
  • func_get_args(): el primer argumento también tiene índice 0.
  • func_num_args(): devuelve el número de argumentos de una función

Ejemplo para usar estas funciones:


<?php
function crearLista(){
echo 
"<ol>\n";
$n func_num_args();
for (
$i=0$i $n $i++ ) {
echo 
"<li>"func_get_arg($i)."\n";
}
echo 
"</ol>\n";
crearLista("GNU/Linux","Apache","MySQL","PHP","XML");
}

?>


Para recuperar los nombres de las clases existe "get_class($variable_instancia_objeto)" que devuelve el nombre como una cadena, para obtener sus métodos en un array de los nombres de los métodos de la clase, usa "get_class_methods($nombre_clase)" o la alternativa con el objeto: "get_class_methods($variable_instancia_objeto)". Para obtener las variables de una clase en un array , usa "get_class_vars($nombre_clase)" y la variante para el objeto instanciado es "get_object_vars($variable_instancia_objeto)". Además podemos recuperar el nombre del padre de la clase con "get_parent_class($variable_instancia_objeto)" o bien con "get_parent_class($nombre_clase)". Quizás una útil función es "is_a(object $instancia, string $clase)", que sirve para comprobar si una determinada variable $instancia de objeto es del tipo especificado en la cadena $clase. De hecho, si la clase ha heredado de otra se pueden comprobar con "is_subclass_of(object $instancia, string $nombre_clase)", por último para comprobar si existe un método en la instancia de un objeto dado: boolean method_exists(object $instancia, string $nombre_metodo)".

Recursividad
¡Qué sería de las funciones sin la recursividad! . Nuestras funciones hacen llamadas a otras funciones y estas al mismo tiempo pueden hacer llamadas a si mismas. El proceso de una función que se llama a sí misma se llama Recursividad. Esta definición circular lleva a la elegancia del diseño de algoritmos, también se puede definir como la solución a un problema que se subdivide en subproblemas más pequeños varias veces. Son muy comunes en Matemáticas, ejemplo: la serie de Fibonacci. En zenphp podemos encontrar funciones implementadas que usan esta técnica [ver]. A veces puede resultar complejo comprender un algoritmo recursivo y nos lleva un tiempo realizar la traza de la ejecución. Se suele utilizar por motivos de eficiencia, ya que 10 llamadas en PHP necesita mantener 10 copias es necesario que nos ocupemos manualmente de las variables…

Ejemplo de uso de la recursión en una función:


<?php
function comprobarEntero($numero){
if (
$numero ){
return 
comprobarEntero($numero-1);
} elseif (
$numero 0){
return 
comprobarEntero((-1)*$numero-;
} else {
if (
$numero 0  &amp;&amp;  $numero 1) return "No";
else return 
"Si";
}
}

echo "Es 0 un entero?".comprobarEntero(0)."<br>";
echo 
"Es 7 un entero?".comprobarEntero(7)."<br />";
echo 
"Es 2.7 un entero?".comprobarEntero(2.7)."<br />";
echo 
"Es -7 un entero?".comprobarEntero(-7)."<br />";

?>


Llamadas dinámicas a funciones
Puede que no sepas qué función llamar cuando estás escribiendo un script de PHP, posiblemente sea porque los datos en los que te bases determinen qué hacer durante la ejecución, una forma de llevar esto a cabo es establecer una variable con el nombre de una función y después usarla como si fuera una función.
Si a una variable le sigue un paréntesis se interpreta de esta forma, se tratará como una función, veamos un ejemplo:


<?php
function mostrar($texto)
{
echo 
$texto;
}
function 
mostrarNegrita($texto){
echo 
‘<b>'.$texto.‘</b>';
}
$miFuncion ‘mostrar';
$miFuncion("Hola!").‘<br />';
$miFuncion ‘mostrarNegrita';
$miFuncion("Hola en negrita!").‘<br />';

?>


Si no sabes exactamente como funcionará exactamente puedes crear una función anónima por medio de la función "create_function".

Funciones definidas por el usuario
La función "create_function" crea una función y devuelve un nombre único, por eso son funciones anónimas, eso permite escribir funciones que dependen de información sólo disponible en tiempo de ejecución, aunque puedes almacenar el nombre de esta nueva función en una variable para lalmarla después, create_function es quizás el método más útil para definir funciones de tipo lambda, ejemplo:


<?php
$datos  
= array("zanahoria","manzana","naranja");
//añade subrayado bajo al final de cada palabra y convertir todo a mayúsculas:
array_walk($datoscreate_function(‘&amp;$v',
‘$v = "_".strtoupper($v)."_";')
);
print_r($datos);

?>



Puedes crear y usar tus propias funciones con "call_user_func($nombre_funcion,…)", ejecuta una función definida por el usuario, donde "…" a continuación son los argumentos a pasar a dicha función en tiempo de ejecución. Puedes usarla para llamar a un método de un objeto ,entonces en lugar de un nombre usa un array donde el primer argumento es el objeto donde reside el método y el segundo el nombre de la función,ahi termina el array, el resto igual que antes…

call_user_func_array($funcion, $array_de_parametros ) es igual que call_user_func excepto porque hay un array de parámetros en lugar de varios argumentos.

Un método no recomendado es eval(), intenta ejecutar el argumento pasado, que es código PHP, ejemplo:


<?php
$codigo 
‘<b>< ?php print(date("d-m-Y"));?></b>';
eval (
"?>".$codigo);

?>


Y hasta aquí sobre funciones, seguid leyendo el código de zenphp para ver más ejemplos complejos.

Dias entre dos fechas

Escrito el 09/January/2008 por juan_belon

La versión más resumida que he podido crear de la función:


<?php
/**
* Calcula la diferencia entre dos fechas y devuelve el número de dias resultante:
* Pasar las fechas como cadenas en el formato: date('d/m/Y')
*
* @param str $fecha_ini
* @param str $fecha_fin
* @return str
*/
function zen_comparaFechas ($fecha_ini$fecha_fin){
//Inicialización
$matriz_f_ini explode ("/"$fecha_ini);
$matriz_f_fin explode ("/"$fecha_fin);
//Cálculo
return gregoriantojd($matriz_f_fin[1], $matriz_f_fin[0], $matriz_f_fin[2]) - gregoriantojd($matriz_f_ini[1], $matriz_f_ini[0], $matriz_f_ini[2]);
}

?>


Cuando ya estamos en el caos!

Escrito el 13/December/2007 por pabloko

Hola a todos, hace unas semanas presté a un amigo una carpeta en un servidor mio para que se hiciera sus paranoyas y eso. Incauto, la ha liado y ha dejado acceso libre a una serie de asquerosos defacers que han poblado todo el servidor de basura, concretamente archivos de NetShell y cosas asi de molestas, ya os imaginas claves al aire libre, el servidor smtp saturado enviando spam, de todo un poco.

Lo mas molesto era un iframe que generaba en todas las paginas, y que producia miles de errores y desvios de tráfico.

Es un servidor grande, con aproximadamente 3 o 4 gigas de datos nada mas que de archivos html y php, con clientes gordos que tuvieron bastantes problemas.

Rapidamente desactive toda posibilidad de acceso SHELL, cambien passwords y elimine todos los archivos del defacing, pero los putos iframes quedaron ayi

Sé que con PERL con una sola linea de texto (perl -pi -e ‘s/sustituir/sustituido/g' *) se puede hacer todo eso, pero como soy masoka, he elaborado todo este php para hacerlo ;)

";
$sustituto="";
function extension($archivo){
$posicion = strrpos($archivo,'.')+1;
$extension = substr($archivo,$posicion);
return $extension;
}
function listar_directorios_ruta($ruta){
if (is_dir($ruta)) {
if ($dh = opendir($ruta)) {
while (($file = readdir($dh)) !== false) {
if ($file=="." or $file=="..") {} else {
$EXT=extension( $ruta. $file);
if ($EXT=="html" or $EXT=="htm" or $EXT=="php" or $EXT=="php3" or $EXT=="php4" or $EXT=="txt") {
$readed=file_get_contents($ruta.$file);
$pos=strpos($readed,$sustituir);
if ($pos!="") {$basura="SE HA ENCONTRADO BASURA";
$contenido=str_replace($sustituir,$sustituto,$readed);
if (is_writable($ruta.$file)) {
if (!$gestor = fopen($ruta.$file, ‘w')) {
echo "NO SE ABRE";
exit;
}
if (fwrite($gestor, $contenido) === FALSE) {
echo "NO SE ESCRIBE";
exit;
}
echo "WEA ARREGLADO SII";
fclose($gestor);
} else {
echo "NO ES ESCRIBIBLE";
}
} else {$basura="";}
echo "
Nombre de archivo: $ruta$file : Es un: " . extension( $ruta. $file).$basura; }}
if (is_dir($ruta . $file) && $file!="." && $file!=".."){
listar_directorios_ruta($ruta . $file . "/");
}
}
closedir($dh);
}
}else
echo "
No es ruta valida";
}
listar_directorios_ruta("./");
?>

No os preocupeis, porque ami de una sola pasada me ha hecho los 4 gigas de datos, pero si veis que no, pasadlo tantas veces como sea necesario.

Lo bueno es que incluye un debug para ver cuales estabamn infectados y si se ha solucionado o no

Me ha dado tanto placer terminarlo que lo he decidido publicar por aqui

Saludossss

Evita document.getElementBy… al estilo MooTools

Escrito el 01/November/2007 por pabloko

Hola, hoy os traigo algo simple pero que os va a evitar tener que escribir todas esas lineas de codigo tan pesadas.

Cuando queremos obtener parametros de un elemento, deberiamos poder saltarnos toda esa pesada escritura de lineas de codigo. Poniendo este codigo

function $(v) { return(document.getElementById(v)); }

para referirnos a elementos solo tendremos que poner $('id_elemento'). Ademas podemos usarlo del modo habitual para sobreescribir propiedades $('id_elemnto').align='center'

Ademas podemos crear otras definiciones que vallamos a usar

function $(v) { return(document.getElementById(v)); }
function $S(v) { return($(v).style); }

Ahora $S('id_elemento') se refiere a los parametros de estilo $S('id_elemento').display='none'

Asi dotaremos nuestra web de rapidez y sencillez

No useis esto si estais usando frameworks como MooTols o JQuery, ya que se produciria un conflicto

A liarla

Truco para renombrar varios ficheros

Escrito el 04/October/2007 por juan_belon

Éste truco es útil cuando tenemos muchos ficheros con un patrón, por ejemplo, imágenes en un idioma, que empiezan por es_[nombre_imagen].[extensión], para renombrarlos a otro idioma, por ejemplo: en_[nombre_imagen].[extensión]…y para hacerlo utilizaremos una expresión regular super simple.:D
Para renombralos todos de golpe en una sóla instrucción simplemente hacemos la llamada:


<?php
rename
(‘y/es_/en_/',"*");

?>


o bien podemos hacer uso del comando de GNU/Linux con la instrucción adecuada para ello:


<?php
chdir
(RUTA_COMPLETA_AL_DIRECTORIO_DE_LOS_FICHEROS);
shell_exec("rename 'y/es_/en_/' * ");

?>


Así que podemos crearnos una función simple para renombrar ficheros masivamente, que quedaría tal que así:


<?php
function renombra_ficheros($original,$cambio){
return 
rename‘y/'.$original.‘/'.$cambio.‘/',"*");
}

?>


Si alguien tiene otra idea, simplemente la comenta XD

Aplicaciones con Zen PHP

Escrito el 24/August/2007 por juan_belon

Este pequeño extracto del código de Zen PHP debería ser autoexplicativo, sólo es una intro de lo que se puede ahorrar uno pensando antes de escribir a lo loco XD


<?php
/**
* Llama a los constructores
*
* juaxix dice:
* La programacion es "Estando en la accion",es puro zen….asi, se puede saber que es zen…
* el zen no se puede entender por las palabras
* pero si por la practica
* dentro del zen…todo es zen…
* asi es
* solo son palabras
* el codigo es 1 poco mas q palabras
* es la accion
* la accion es zen,solo accion
* y zazen es solo vacio
* pero las 2 cosas son la misma cosa
* antonio dice: matrix y no matrixx se confunden…
*
* @param array('Clase1,Clase2,…') $matrix
*/
function inicializar($matrix) {
if (!
is_array($matrix)) $matrix split(",",$matrix);
for (
$i=0$i&lt;sizeof($matrix); $i++){
if (empty(
$matrix[$i])) continue;
zen___carga_clase$matrix[$i]);
//Si es del nucleo le quitamos el apostrofe para meter la clase con su nombre tal cual
$variable=(substr($matrix[$i],0,4)==‘zen_')?substr($matrix[$i],4,strlen($matrix[$i])-4):$matrix[$i];
//Creamos la clase y la metemos en el contenedor
eval(‘$this-&gt;'.$variable.‘ = new '.$matrix[$i].‘($this);');
}
}

?>


Funciones interesantes

Escrito el 19/January/2007 por juan_belon

¿Cómo escribir funciones interesantes?

Lo primero es tener la necesidad y luego salen solas…aquí están las funciones interesantes por mi por ahora, pero no tengo demasiado tiempo para comentarlas en este momento.

Pincha en leer el resto de la entrada para ver las maravillosas y geniales funciones :) escritas por Juan, un programador PHP de Granada.

Leer el resto del artículo »