Contenido

file_get_contents() y Dreamhost

9 feb

+ 13

Ahora oficialmente estoy en Dreamhost y por lo tanto mis pruebas tambien las hago sobre Dreamhost. Despues de algun que otro problema descubrí que por políticas de seguridad o simplemente por que les dió la gana, tiene bloqueado el acceso a URL externas mediante la función file_get_contents(), muy util ya que te devuelve el contenido de una URL en una cadena.

$ch= file_get_contents("http://www.ejemplo.com"); 

Buscando un poco, no mucho, encontré una forma igual de eficiente usando las librerías curl de PHP, aunque son unas cuantas de líneas más nos aseguramos de que funciona.

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://ejemplo.com/");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
?> 

De esta forma obtener un cadena de igual forma, almacenada en $ch., si queremos recorrer las líneas que componen el fichero podremos hacerlo de la siguiente forma.

<?php
$ch = curl_init();
$timeout = 5; // set to zero for no timeout
curl_setopt ($ch, CURLOPT_URL, 'http://ejemplo.com');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file_contents = curl_exec($ch);
curl_close($ch);
$lines = array();
$lines = explode("\n", $ch);

// display file line by line
foreach($lines as $line_num => $line) {
    echo "Line # {$line_num} : ".htmlspecialchars($line)."<br />\n";
}
?>
  • Yo no uso ni “file_get_contents()” ni las librerias CURL, estas ultimas no suelen estar implementadas en muchos hosts…

    Uso la function File::get() de la libreria Dokoku que no usa ninguna ninguna función totalista como file_get_contents ni librerias CURL, simplemente comprueba si accedes a un fichero local o externo (tanto http, ftp, tftp… etc) y mediante fsockopen lo devuelve junto a la cabecera y el contenido, puedes comprobar el codigo http que ha devuelto y añadirle plantillas para simular querys de Firefox, Opera, IE… etc

    Copiaria algo de codigo… pero es que el codigo está muy jerarquizado y dividido en clases…

    Igualmente, te añado una alternativa a CURL para los que no puedan acceder a ella:

    Lo acabo de escribir ahora en un momentillo, es lo basico para leer archivos externos, no descomprime, pero lo especifica el request asi que solo controla los chunked files.

  • Cof cof… ¬¬

    Esto se me come los “code” tags… el codigo que debia estar antes del ultimo parrafo esta en:

    http://work.dokoku.net/Anieto2k/_file_get_contents.phps

  • Perdona, se me ha olvidado decirte que mires el tiempo que tarda en cargarte una pagina en DreamHost, yo dreamhost solo lo uso de host de imagenes, archivos y videos por el ancho de banda mensual.

    Hay alternativas muchisimo mejores que dreamhost para tu blog. Aun pagado 1 o 2 años puedes seguir usandolo de servidor secundario.

  • En GoDaddy tampoco me dejaba usar el file_get_contents por defecto, tuve que modificar el php.ini. En DreamHost te dejan modificar el php.ini? Te agradeceria mucho un post o respuesta aqui comentando DreamHost porque me lo estoy mirando.

  • Antes de contratar el host en el que estoy ahora (DhapCenter) les pregunté si tenian esta opción activada, y me contestaron que sí, pero que aún así me recomendaban el uso de CURL.
    Parece ser que es mejor usar esta librería antes que las funciones por defecto de php, por eficiencia, funcionalidad, etc.

  • Yo haciendo un poco de offtopic, y continuando con uno de los comentarios anteriores, no estoy muy contento con DH.

    Mucho espacio, mucha transferencia, pero le cuesta cargar las paginas una eternidad.

    Si encuentro algo parecido con buena conectividad, me piro pero ya.

    Un saludo

  • Muchos hosts tienen desactivadas esas funciones por temas de seguridad, para evitar “defacers”

  • Gracias. Supuse que en mi servidor estaba desactivado pero no encontraba otra forma de hacerlo.
    Funciona sin problemas.

  • AoiStar ojala me pudieras ayudar a solucionarlo desde el php.ini tengo el mismo problema, si lo quieres postear aqui o a mi email xlack@hot mail.com sin espacio

  • ¡¡Muchas gracias por la información Ángel!!

    No entendía porqué me fallaba file_get_contents y gracias has evitado que me volviera loco.

    Por cierto… enhorabuena por tu premio en el Congreso de Webmasters 2008. Yo también estuve allí.

    Sigue así.

Comentar

#

Me reservo el derecho de eliminar y/o modificar los comentarios que contengan lenguaje inapropiado, spam u otras conductas no apropiadas en una comunidad civilizada. Si tu comentario no aparece, puede ser que akismet lo haya capturado, cada día lo reviso y lo coloco en su lugar. Siento las molestias.