PHP: listar archivos de un directorio
Listar los archivos de un directorio es necesario cuando se desea eliminar una carpeta pues no se puede eliminar carpetas con elementos dentro, de igual forma podriamos crear una siemple galeria en base a todas las imagenes que tenga una carpeta especifica.
//Directorio actual:$direct"; echo "Los rchivos:"; while ($archivo = readdir($directorio)) echo "$archivo"; closedir($directorio); ?>
Es frecuente que podamos encontrar otras carpetas dentro de la misma y en esos casos si estas carpeta contiene informacion se tendria que elimnar primero la informacion dentro de ella antes de poderse borrar la carpeta respectiva. Para poder evaluar este tipo de situaciones podemos utilizar el funcion is_dir . Entonces si queremos mostrar todos los contenido incluidos los de las subcarpetas podemos utilizar algo asi como:
//Directorio actual:$directr";
echo "Los archivos:";
while ($archivo = readdir($directorio)) {
if($archivo == '.')
echo "$archivo";
elseif($archivo == '..'){
if($dir != '.'){
$carpetas = split("/",$dir);
array_pop($carpetas);
$dir2 = join("/",$carpetas);
echo "$archivo";
}
}
elseif(is_dir("$dir/$archivo"))
echo "$archivo";
else echo "$archivo";
}
closedir($directorio);
?>
?>
Ya para eliminar agregamos la funcion unlink a la estructura deseada.
PHP: Clases abstractas
PHP desde su version 5 a configurado unlenguaje más robusto y tratando de ser un lenguaje Orientado a Objetos como java, c++, c# entre muchos otros. La posibilidad de crear objetos (funcionalidad propia de todo le nguaje OO) ha generado un gran entusiasmo en todo los programadores de PHP.
La abstracion de clases es un elemento sumamente importante por que son clases que definen patrones para otras clases que extiendes de estas (guias).
Un ejemplo muy interesante e ilustrativo que vemos permanentemente en los libros de programacion es el de los medios de transporte donde la clase abstracta es la de vehiculo y de la cual extienden objetos como carro, moto, bus, bicicleta etc.
La clase abstracta se declara de la siguiente forma:
abstract class Vehículo
{
public $potencia;
public $peso;
}
Debemos saber que esta clase no se puede instanciar, si lo intentas de arrojara un error.
La clase abstracta definira las propiedades y metodos que se necesitaran para implementar las clases derivadas. Para ilustrarlo mejor refiriendonos a la clase vehiculo tenemos lo siguiente:
abstract class Vehículo
{
public $potencia;
public $peso;
function __construct($potencia,$peso)
{
$this->potencia = $potencia;
$this->peso = $peso;
return true;
}
function relacionPesoPotencia()
{
if ($this->potencia>0)
{
return ($this->peso/$this->potencia);
}
return -1;
}
abstract function aceleracionAproximada();
}
La clase carro que extiende de vehiculo seria:
//// una Carro es un Vehículo
class Carro extends Vehículo
{
function __construct($potencia,$peso)
{
$this->potencia = $potencia;
$this->peso = $peso;
return true;
}
function aceleracionAproximada()
{
$coeficienteTransmision = 3.0;
$t = $this->peso * 771.73 / (2.0 * $this->potencia * 735);
$t = $t * $coeficienteTransmision;
return $t;
}
}
Caracteristicas:
- Las clases abstractas no se pueden instanciar.
- Las clases que heredan de esta deben implementar todos los metodos abstractos.
- Las clases abstractas pueden heredar de otras clases.
- Los parametros de los metodos deben ser iguales, ya que sino sera tratado como otro metodo.
- Si una clase tiene un metodo abstracto esta debe declararse también como clase abstracta.
Detectar visitantes mobiles en PHP
En estos dias tenia que realizar un proyecto en el que necesitaba presentar una versión movil de un sitio si esta era accedida desde un dispositivio con estas caracteristicas y por otro lado mostrar el sitio en todo su explendor si se entraba desde un computador.
Pense en hacer yo mismo la funcion que hiciera la detección utilizando $_SERVER['HTTP_USER_AGENT'] como base, la cual me arrojara información del dispositivo de donde se realiza la conexión.
Meditando un poco y buscando encontre si necesidad de pensar mucho (ya otro lo ha hecho por mi), una función realmente util y completa que hace esta tarea. La probe con mi celular que tiene Windows Mobile 6.1 con Opera Mobile e Internet Explorer y funciona de maravilla. Aqui les dejo el codigo y espero que les sirva.
<?PHP
$mobile_browser = '0';
IF(PREG_MATCH('/(up.browser|up.link|mmp|symbian|smartphone|midp|wap|phone)/i',
STRTOLOWER($_SERVER['HTTP_USER_AGENT']))){
$mobile_browser++;
}
IF((STRPOS(STRTOLOWER($_SERVER['HTTP_ACCEPT']),'application/vnd.wap.xhtml+xml')>0) or
((ISSET($_SERVER['HTTP_X_WAP_PROFILE']) or ISSET($_SERVER['HTTP_PROFILE'])))){
$mobile_browser++;
}
$mobile_ua = STRTOLOWER(SUBSTR($_SERVER['HTTP_USER_AGENT'],0,4));
$mobile_agents = ARRAY(
'w3c ','acs-','alav','alca','amoi','audi','avan','benq','bird','blac',
'blaz','brew','cell','cldc','cmd-','dang','doco','eric','hipt','inno',
'ipaq','java','jigs','kddi','keji','leno','lg-c','lg-d','lg-g','lge-',
'maui','maxo','midp','mits','mmef','mobi','mot-','moto','mwbp','nec-',
'newt','noki','oper','palm','pana','pant','phil','play','port','prox',
'qwap','sage','sams','sany','sch-','sec-','send','seri','sgh-','shar',
'sie-','siem','smal','smar','sony','sph-','symb','t-mo','teli','tim-',
'tosh','tsm-','upg1','upsi','vk-v','voda','wap-','wapa','wapi','wapp',
'wapr','webc','winw','winw','xda','xda-');
IF(IN_ARRAY($mobile_ua,$mobile_agents)){
$mobile_browser++;
}
IF (STRPOS(STRTOLOWER($_SERVER['ALL_HTTP']),'OperaMini')>0) {
$mobile_browser++;
}
IF (STRPOS(STRTOLOWER($_SERVER['HTTP_USER_AGENT']),'windows')>0) {
$mobile_browser=0;
}
IF($mobile_browser>0){
// do something
} ELSE {
// do something else
}
?>
Twitter php API – crear nuevo mensaje

twitter logo
En el post anterior explique como leer los mensajes que hemos escrito en Twitter, ahora les mostrare como crear un nuevo mensaje, la verdad la documentacion de la libreria es mala, pero si uno se pone a analizar las funciones, son muy intuitivas y faciles de usar, creo que este sera el ultimo post sobre este tema (caso cerrado). Primero que todo inicializamos nuestra cuenta como se vio en el Post anterior, luego simplemente invocamos la funcion update de la libreria y escribimos nuestro mensaje.
Tenemos que tener en cuenta que este no puede ser mayor a 140 caracteres.
<?php
include_once('class.twitter.php');
$t = new Twitter;
$t->username = 'usuario';
$t->password = '****';
$t->type = 'xml';
$t->update("no se que mensaje colocar");
?>
Si tiene alguna duda con cualquiera de la funciones me pueden escribir y con gusto les ayudare.
Twitter php API – Leer publicaciones
Twitter es la plataforma de microbloging, que para las personas que no estan familiarizadas o le suena algo extraño el termino es escribir mensajes cortos (140 caracteres máximo), con alguna información relevante (muchas veces irrelevante). La verdad twitter en un principio no me llamo la atención, tal vez porque a las personas que seguian solo escribian lo que le pasaba en un momento determinado (tengo sueño, estoy en el trabajo etc). Le vine a encontrar un sabor distinto cuando empecé a agregar portales de información y ahi creo que va a estar el valor de la plataforma, el poder agregar las fuentes de información deseadas y reunirlas en un solo lugar (pueden agregarme a twitter prometo llevarle informacion realmente útil).
Ahora bien, ya habiéndote convencido del potencial que ofrece twitter, les mostrare como podemos integrarlo a tu sitio utilizando la API de php (Seleccione la más sencilla pero la peor documentada). Para iniciar tenemos que fijar un objetivo en este caso queremos mostrar en nuestra pagina todos los mensajes que hemos escrito.
Primero agregamos la referencia de la API al proyecto, que la podemos descargar aqui.
<?php
include_once('class.twitter.php');
$t = new Twitter;
$t->username = 'usuario';
$t->password = '******';
$t->type = 'xml';
$follow=$t->followers();
$status=$t->userTimeline();
for($i=0;$i<count($status);$i++){
echo $status->status[$i]->text[0]."<br>";
}
?>
Agregamos nuestro usuario y contraseña. Luego seleccionamos el tipo que en este caso es xml, tambien tenemos la opcion de recibir la informacion como json, XML , RSS, Atom. La extension utilizada por la libreria para la manipulacion del xml es SimpleXML, personalmente me gusta mas utilizar DOM, pero bueno SimpleXML es sencillo tambien
.
Ya nos desplegara todos los mensajes que hasta la fecha hemos publicado.
Actionscript 3.0 sendAndLoad
Una de las cosas mas utilizadas a la hora de hacer una aplicacion es la comunicacion con ficheros externos (.php, .asp, .aspx etc), para realizar diversas tareas. Como sabemos o si no lo sabes te comento que esta funcion ya no existe dentro del Core de ActionScript 3 asi que si quieres hacer eso que podias hacer con el sendAndLoad en AS2, solo sigue esta pequeña guia.
Si estamos trabajado sobre un AS, tenemos que importar la librerias necesarias
import flash.display.Sprite; import flash.net.URLRequest; import flash.net.URLVariables; import flash.net.sendToURL;
Creamos el elemento de envio y donde se recibe los datos de respuesta
var url:String = "http://www.waspgroup.com/ejemplos/prueba.php"; var enviar:URLRequest = new URLRequest(url); var recibir:URLLoader = new URLLoader();
Tambien creamos un elemnto tipo URLVariables que es donde se almaceneran cada una de las variables que se enviaran a la pagina.
var variables:URLVariables = new URLVariables(); variables.numero1 = 7; variables.numero2 = 10; enviar.method = URLRequestMethod.POST; enviar.data = variables; recibir.dataFormat = URLLoaderDataFormat.VARIABLES;
Luego tenemos los eventos asociados, el primero es el de respuesta, que se ejecuta una vez completado el llamado y si este fue exitoso.
El segundo es el de error, en caso de no tener respuesta por cualquier razon (no existe el vinculo, fallo de conexion, etc)
recibir.addEventListener(Event.COMPLETE,Respuesta);
recibir.addEventListener(IOErrorEvent.IO_ERROR,HayError);
recibir.load(enviar);
function Respuesta(event:Event){
trace("El resultado es : " + recibir.data.datos);
}
function HayError(event:IOErrorEvent):void {
trace("Error al cargar la url");
}
El archivo php es el siguiente:
<?php $numero1 = htmlentities($_POST[numero1]); $numero2 = htmlentities($_POST[numero2]); $info = $numero1 ."-". $numero2; echo "datos=" . $info; ?>
Este es un ejemplo de como quedaria con algunas funcionalidades adicionales:
Saber si es Par o impar
¿Cómo sabemos si un número entero es par o impar?
Por supuesto que no es muy complicado.
Cuando recién comenzaba, recuerdo haber buscado una forma de hacerlo, no muy práctica
floor($a / 2) == $a / 2;
El resultado es correcto, pero esto se podría facilitar aún más conociendo el operador %
$a % 2 == 0;
Sin embargo, se puede hacer todavía más rápido, aunque no necesariamente fácil, verificando si el binario contiene al 1 o no.
$a & 1 == 0