Ayuda con descarga de archivo con php

Iniciado por alessander, 28 Mayo 2009, 13:00 PM

0 Miembros y 1 Visitante están viendo este tema.

alessander

Buenas la ayuda que pido es que si hay alguna funcion para guardar la salida de un archivo en otro
Me explico??...

Bueno lo que pasa es esto: Quiero descargar un archivo por medio de php de esta manera este es el codigo:

function shapeUrl($url,$return) {
$en = strpos($url,"/");
if($return == "host") {
$dns = str_replace("http://","",$url);
$host = str_replace("www.","",$dns);
$en = strpos($host,"/");
if($host = substr_replace($host,"",$en)) {
return $host;
}else {
return $dns;
}
}
if($return == "path" && $en) {
$url = str_replace("http://","",$url);
$url = str_replace("www.","",$url);
$posi = strpos($url,"/");
return substr($url,$posi,strlen($url));
}else {
return "/";
}
}
function GetOrHeader($dns,$metod) {
$metod = strtoupper($metod);
$host = shapeUrl($dns,"host");
$path = shapeUrl($dns,"path");
if($metod == "HEAD") {
   $conexion = fsockopen($host,"80");
   $cabecera = "HEAD $path HTTP/1.1\r\n";
   $cabecera .= "Host: www.$host\r\n";
   $cabecera .= "User-Agent: Extract/1.0\r\n";
   $cabecera .= "Connection: close\r\n\r\n";
   fwrite($conexion,$cabecera);
   return $resultado = stream_get_contents($conexion);
   fclose($conexion);
   }else if($metod == "GET") {
   $conexion = fsockopen($host,"80");
   $cabecera = "GET $path HTTP/1.1\r\n";
        $cabecera .= "Host: www.$host\r\n";
   $cabecera .= "User-Agent: Extract/1.0\r\n";
   $cabecera .= "Connection: close\r\n\r\n";
   fwrite($conexion,$cabecera);
   return $resultado = stream_get_contents($conexion);
   fclose($conexion);
   }
}

GetOrHeader("UrlDelArchivoAdescargar","get");

Todo va biien cuando devuelve la salida por medio de fpasthru() La salida es instantanea Pero cuando lo ago por medio de stream_get_contents() Tarda mucho en dar la salida, Lo que quiero acer Es escribir la salida de GetOrHeader()  en otro archivo para guardar la informacion descargada Me explico??.....

Ah! la razon por la que no uso Curl es porque la verdad quiero saber como funcionan las cosas (Claro cuando se puede verdad XD)....


Gracias por adelantado...agradezco muchooo su ayuda!! bye bye..

Azielito

No es mas facil get_file_contents y lo mandas a imprimir y forzando la descarga e identificando el tipo mime lo guardas? '_'

alessander

Perdon Azielito no te abras equivocado con el nombre de la funcion que me diste?? Que no el nombre es
file_get_contents() porque cuando escribir el nombre de la funcion que me diste me salio el error de Funcion indefinida.....Pero nome sirve esa funcion  Porque:

1- Necesito recuperar las cabeceras ya que el archivo que intento descargar es un video de youtube y necesito recuperar el campo Location: para redirigirme ahi.

2- Como dije en el post Quiero saber como funciona todo lo que esta en mi script y Aparte estoy estudiando el protocolo HTTP y pues nesecito comprenderlo mejor y pues la funcion que tu me diste es como si usara CURL y como dije en el post no lo quiero usar.


Pero de todos modos ya solucione el problema Azielito XD....

Aqui esta lo que ise para solucionar el problema Solamente modifique la funcion GetOrHeader() Bueno sin mas bla bla bla mio ajajajja aqui esta:

function GetOrHeader($dns,$metod) {
$metod = strtoupper($metod);
$host = shapeUrl($dns,"host");
$path = shapeUrl($dns,"path");
if($metod == "HEAD") {
   $socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
   $conexion = socket_connect($socket,$host,"80");
   $cabecera = "HEAD $path HTTP/1.1\r\n";
   $cabecera .= "Host: www.$host\r\n";
   $cabecera .= "User-Agent: Extract/1.0\r\n";
   $cabecera .= "Connection: close\r\n\r\n";
   socket_write($socket,$cabecera,strlen($cabecera));
   $resultado = "";
   while($salida = socket_read($socket,2048)) {
   $resultado = $salida;
   }
   return $resultado;
   socket_close($socket);
   }else if($metod == "GET") {
   $socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
   $conexion = socket_connect($socket,$host,"80");
   $cabecera = "GET $path HTTP/1.1\r\n";
   $cabecera .= "Host: www.$host\r\n";
   $cabecera .= "User-Agent: Extract/1.0\r\n";
   $cabecera .= "Connection: close\r\n\r\n";
   socket_write($socket,$cabecera,strlen($cabecera));
   $resultado = "";
   while($salida = socket_read($socket,2048)) {
   $resultado = $salida;
   }
   return $resultado;
   socket_close($socket);
   }
}


Muchisisisismas Graciass!!! bye bye