Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - marco811

Páginas: 1 [2]
16
Tutoriales PHP / Tutorial de como se utiliza CURL en PHP
« en: 19 de Abril de 2010, 11:23:25 am »
Buenas, en este post os voy a explicar el funcionamiento de la clase CURL, muy útil para hacer peticiones personalizadas con el protocolo HTTP.
Esta clase tiene estas principales funciones que mas se usan:
  • curl_init - Inicia una nueva sesion CURL.
  • curl_setopt - Define opciones para nuestra sesion CURL.
  • curl_getinfo -  Obtiene información de la última transferencia.
  • curl_exec - Ejecuta la petición HTTP
  • curl_close - Cierra la sesion CURL.
Os voy a mostrar un ejemplo para que os orientéis un poco:


<?php
$ch 
curl_init();
curl_setopt($chCURLOPT_URL"http://www.example.com/");
curl_setopt($chCURLOPT_HEADER0);
curl_setopt($curlCURLOPT_USERAGENT"Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_exec($ch);
curl_close($ch);
?>


De este modo nos muestra la pagina www.example.com.

Pero si queremos que el output que devuelve la pagina se almacene en una variable,

podemos utilizar la opción CURLOPT_RETURNTRANSFER mediante la función curl_setopt

<?php
$ch 
curl_init();
curl_setopt($chCURLOPT_URL"http://www.example.com/");
curl_setopt($chCURLOPT_HEADER0);
curl_setopt($curlCURLOPT_USERAGENT"Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($curlCURLOPT_RETURNTRANSFERtrue); 
$xxx curl_exec($ch);
curl_close($ch);
?>



Algunas opciones de la función curl_setopt:

Solamente la opción CURLOPT_URL es obligatoria, el resto son totalmente opcionales
  • CURLOPT_URL - Define la URL de la petición HTTP (Obligatorio)
  • CURLOPT_PORT - Puerto alternativo
  • CURLOPT_FOLLOWLOCATIONTrue: Sigue cualquier encabezado "Location: ". False por defecto.
  • CURLOPT_COOKIE - Define las cookies que se van a enviar al servidor HTTP, por ejemplo: "cookie1=azul&cookie2=rojo;"
  • CURLOPT_COOKIEFILE - Nombre del fichero que contiene datos de las cookies. El fichero también puede estar en un servidor HTTP remoto.
  • CURLOPT_COOKIEJAR - Nombre del fichero donde guardar cookies internas cuando se cierre la conexión.
  • CURLOPT_REFERER - Contenido del Header "Referer: " para ser usado en la petición HTTP.
  • CURLOPT_USERAGENT - Nombre del navegador
  • CURLOPT_POST - True: Para hacer una petición HTTP-POST.
  • CURLOPT_POSTFIELDS - Es valido si CURLOPT_POST esta en true. Define los datos del POST, ejemplo: "usuario=luis&password=12345;"
  • CURLOPT_HEADER - True: para incluir el header en el output.
Podéis encontrar la lista completa de opciones en php.net

Todas las opciones de la función curl_getinfo (esta funcion no se usa mucho):

  • CURLINFO_EFFECTIVE_URL - Última URL utilizada
  • CURLINFO_HTTP_CODE - Último código HTTP recibido
  • CURLINFO_FILETIME - Hora del documento remoto, si devuelve -1 la hora del documento es desconocida
  • CURLINFO_TOTAL_TIME - Tiempo total de la duración de última transación en segundos
  • CURLINFO_NAMELOOKUP_TIME - Tiempo en segundos que se tardó en resolver la ubicación del fichero
  • CURLINFO_CONNECT_TIME - Tiempo en segundos que se tardó en establecer la conexión
  • CURLINFO_PRETRANSFER_TIME - Tiempo en segundos desde el inicio justo antes de que empiece la transferencia
  • CURLINFO_STARTTRANSFER_TIME - Tiempo en segundos hasta que el primer byte está a punto de transferirse
  • CURLINFO_REDIRECT_TIME - Tiempo en segundos de todos los pasos de redireción antes que la última transación haya empezado
  • CURLINFO_SIZE_UPLOAD - Número total de bytes subidos
  • CURLINFO_SIZE_DOWNLOAD - Número total de bytes descargados
  • CURLINFO_SPEED_DOWNLOAD - Velocidad media de descarga
  • CURLINFO_SPEED_UPLOAD - Velocidad media de subida
  • CURLINFO_HEADER_SIZE - Tamaño total de los encabezados recibidos
  • CURLINFO_HEADER_OUT - La cadena de la petición enviada
  • CURLINFO_REQUEST_SIZE - Tamaño total de las peticiones realizadas, solamente para peticiones HTTP
  • CURLINFO_SSL_VERIFYRESULT - Resultado de la verificación del certificado SSL solicitado por la opción CURLOPT_SSL_VERIFYPEER
  • CURLINFO_CONTENT_LENGTH_DOWNLOAD - content-length de descarga, leído desde el campo <i>Content-Length:</i>
  • CURLINFO_CONTENT_LENGTH_UPLOAD - Tamaño especificado de subida
  • CURLINFO_CONTENT_TYPE - <i>Content-Type:</i> del objecto descargado, NULL indica que el servidor no envío un encabezado Content-Type: válido.

Ejemplos:

Buscar en google:

<?php
$ch 
curl_init();
curl_setopt($chCURLOPT_URL"http://www.google.es/search?q=PHPeros");
curl_exec($ch);
curl_close($ch);
?>

Iniciar sesion en una pagina web:

<?php
$ch 
curl_init();
curl_setopt($chCURLOPT_URL"http://www.web.com/login.php");
curl_setopt($chCURLOPT_POST1);
curl_setopt($chCURLOPT_POSTFIELDS"usuario=marco&password=12345;");
curl_setopt($chCURLOPT_COOKIEJAR"cookies.txt");
curl_exec($ch);
curl_close($ch);
?>


Cambiar nombre navegador:

<?php
$ch 
curl_init();
curl_setopt($chCURLOPT_URL"http://www.example.com");
url_setopt($chCURLOPT_USERAGENT, &#39;Googlebot/2.1 (+http://www.google.com/bot.html)&#39;); 
curl_exec($ch);
curl_close($ch);
?>


Incluir las cabeceras en el  output:

<?php
$ch 
curl_init();
curl_setopt($chCURLOPT_URL"http://www.example.com");
curl_setopt($chCURLOPT_HEADERtrue);  
curl_exec($ch);
curl_close($ch);
?>

De esta forma se nos mostrara las cabeceras del servidor HTTP junto al código HTML. Como se podrían separar las cabeceras del código html? De la siguiente forma:

<?php
$ch 
curl_init();
curl_setopt($chCURLOPT_URL"http://www.example.com");
curl_setopt($chCURLOPT_HEADERtrue);
curl_setopt($chCURLOPT_RETURNTRANSFER1);
$xxx curl_exec($ch);
curl_close($ch);
$xxx explode("\n\r\n"$xxx);
$headers $xxx[0];
$body $xxx[1];
?>

En la variable headers se guardan los encabezados y en la variable body el código HTML.


Otro ejemplo es almacenar las cookies que se devuelve por el servidor HTML en un archivo con la opción COOKIEJAR:

<?php
$ch 
curl_init();
curl_setopt($chCURLOPT_URL"http://m.tuenti.com");
curl_setopt($chCURLOPT_COOKIEJAR"cookies.txt");
curl_exec($ch);
curl_close($ch);
?>


Bueno, esto es todo, si tenéis alguna duda o petición porfavor preguntármelo.
Un saludo!

17
PHP / Funciones para directorios
« en: 16 de Abril de 2010, 15:43:21 pm »
Buenas, he pensado que seria util hacer una recopilacion de funciones que trabajan con directorios (o carpetas) ya que falta un tutorial como este en el foro. Empezemos con los directorios, las principales funciones son:

  • chdir  - Cambia de directorio
  • dir - Retorna una instancia de la clase Directory
  • getcwd - Mostrar el directorio actual
  • opendir - Abre un directorio a manejar
  • scandir - Devuelve en una array la lista de los ficheros del directorio
  • is_dir -  Indica si el nombre de archivo dado es un directorio.
  • mkdir -   Intenta crear el directorio especificado por pathname.
  • rmdir -  Intenta eliminar el directorio nombrado por dirname. El directorio debe estar vacío, y los permisos relevantes deben permitirlo.

Ahora vamos parte por parte:
chdir
Cambia el directorio de trabajo. Si usamos esta funcion tenemos que tener en cuenta que las rutas relativas que teniamos en el codigo dejaran de funcionar.
Ejemplo:

<?php
chdir
("/directorio/");
?>


getcwd
Muestra el directorio actual. Por ejemplo:
Ejemplo:

<?php
echo getcwd();
?>

Muestra: /public_html/foro/

scandir
Devuelve un array con la lista de los ficheros de un directorio.


<?php
$dir    
= &#39;/tmp&#39;;
$files1 scandir($dir);
print_r($files1);
?>

Devuelve:
Array
(
   
  • => .
  • [1] => ..
        [2] => bar.php
        [3] => foo.txt
        [4] => somedir
    )


is_dir
Indica si el nombre de archivo dado es un directorio.
Ejemplo:

<?php
if(is_dir("directorio")) echo "Es un directorio";
?>



mkdir
Intenta crear el directorio especificado por pathname.
Ejemplo:

<?php
mkdir
(&#39;pepe&#39;);
mkdir(&#39;pepe/luis&#39;, 0777);
?>

En el codigo crea dos directorios, uno llamado pepe y otro luis dentro de pepe y ademas al directorio luis lo crea con los permisos CHMOD 0777


chmod
Asigna permisos CHMOD a un directorio o fichero.
Ejemplo:

<?php
chmod
("/somedir/somefile"0750);
?>


Bueno, esto es todo. Cualquier duda que tengais lo preguntais abajo.
Un saludo!

18
Tutoriales PHP / Contador de visitas unicas sin BD
« en: 09 de Abril de 2010, 13:54:16 pm »
Buenas, os voy a enseñar como hacer un contador de visitas unicas en pocas lineas de codigo, utilizando las funciones file_get_contents  , file_put_contents  y in_array.

Para que el contador funcione perfectamente, necesitamos un archivo txt donde guardar las direcciones IP (ips.txt). Ese archivo tambien va a contener la fecha de cuando fue reseteado por ultima vez el contador, ya que el contador se resetea cada cierto tiempo. Se puede cambiar ese intervalo cambiado la variable reset.

He aqui el codigo:

$ips 
explode(&#39;;&#39;, file_get_contents("ips.txt"));
$visitas count($ips)-2;
$reset 3600;
if(!
in_array($_SERVER[&#39;REMOTE_ADDR&#39;], $ips)) file_put_contents("ips.txt", $_SERVER[&#39;REMOTE_ADDR&#39;].&#39;;&#39;, FILE_APPEND);
if((time()-reset($ips))>$resetfile_put_contents("ips.txt"time().&#39;;&#39;);
settype($visitas, &#39;string&#39;);
echo $visitas;


En la primera linea extraemos todas las IPs del archivo ips.txt que estan separadas por punto y coma (;)
En la segunda linea contamos la cantidad total de IPs que estan en el archivo ips.txt
En la tercera linea comprobamos si la direccion IP del visitante ya existe en el archivo ips.txt, si no existe se añade la IP en el archivo.
En la cuarta linea se comprueba si se ha superado el tiempo para resetear el contador, si es asi se elimina todo de ips.txt y se escribe la fecha actual y punto y coma (;).
En la quinta linea convierte la variable $visitas de int a string.
En la ultima linea se muestra la cantidad de visitados, contando el numero de ips que han visitado nuestra pagina. Si quieremos que nos lo muestre con imagenes podemos colocar el siguiente codigo:


for($i=0;$i<=strlen($visitas)-1;$i++) echo &#39;<img src="http://www.personalidad-web.net/ejemplos/contador/numeros/&#39;.$i.&#39;.gif" alt="" />&#39;;


Bueno, por ultimo que no se te olvide dar permisos chmod al archivo ips.txt
Tambien modifica el valor de la variable $reset, por ejemplo si quieres que el contador se ponga a 0 cada dia, tendras que poner 86400 (segundos que tiene un dia).

Ver ejemplo
Esto es todo, un saludo!

19
PHP / La forma mas sencilla de subir un CMS a la web
« en: 07 de Abril de 2010, 23:46:18 pm »
Hola, desde siempre me ha parecido una dificil tarea subir un script CMS (smf, wordpress) mediante FTP debido a el gran numero de archivos que tienen. Pero he descubierto otra forma mucho mas facil y rapida de hacerla y es subir el archivo ZIP por ftp (se tarda muchisimo menos subir un archivo de 3MB que 500 de 100kb). Y despues descomprimirlo utilizando la libreria ZIP de php:

<?php
$zip 
= new ZipArchive;
if (
$zip->open(&#39;smf_1-1-11_install.zip&#39;) === TRUE) {
    
$zip->extractTo(&#39;foro&#39;);
    
$zip->close();
    echo &
#39;ok&#39;;
} else {
    echo &
#39;failed&#39;;
}
?>

Lo he probado y he tardado 2 minutos en vez de 20.
Un saludo!

20
Tutoriales PHP / Tipos de variable en php
« en: 07 de Abril de 2010, 02:52:24 am »
Buenas, estoy casi seguro que la mayoria de ustedes no saben que en PHP las variables tienen un tipo determinado (int, string, etc...) y que en ocasiones nos pueden causar graves problemas.
Hace poco me tropeze con un problema al intentar mostrar un determinado caracter de una variable que era de tipo int y tenia que ser de tipo string:

<?php
$visitas 
count($array);
echo 
$visitas{1};
?>

Pero despues de utilizar la funcion settype todo volvio a la normalidad
settype ($visitas, &#39;string&#39;);
Ahora ya sabran porque no les funciona un codigo parecido al mio.
Un saludo!


21
Presentaciones / Buenas
« en: 03 de Abril de 2010, 20:37:44 pm »
Hola, soy marco, mi antiguo usuario es kekoman y he decidido dejar de utilizarlo. Y no va contra las normas tener dos usuarios  :)
Un saludo!  ;)

Páginas: 1 [2]