Php dosya başlığından dosya adı elde kıvrımla

2 Cevap php

Ben bu php cURL fonksiyonu vardır:

function curl_login($url,$data,$proxy,$proxystatus){
$fp = fopen("cookietlt.txt", "w");
fclose($fp);
$login = curl_init();
curl_setopt($login, CURLOPT_COOKIEJAR, "cookie.txt");
curl_setopt($login, CURLOPT_COOKIEFILE, "cookie.txt");
curl_setopt($login, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($login, CURLOPT_TIMEOUT, 40);
curl_setopt($login, CURLOPT_RETURNTRANSFER, TRUE);
if ($proxystatus == 'on') {
    curl_setopt($login, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($login, CURLOPT_HTTPPROXYTUNNEL, TRUE);
    curl_setopt($login, CURLOPT_PROXY, $proxy);
}
curl_setopt($login, CURLOPT_URL, $url);
curl_setopt($login, CURLOPT_HEADER, TRUE);
curl_setopt($login, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($login, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($login, CURLOPT_POST, TRUE);
curl_setopt($login, CURLOPT_POSTFIELDS, $data);
ob_start();      // prevent any output
return curl_exec ($login); // execute the curl command
ob_end_clean();  // stop preventing output

curl_close ($login);

unset($login);    
}                  
function curl_grab_page($site,$proxy,$proxystatus){
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
if ($proxystatus == 'on') {
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, TRUE);
    curl_setopt($ch, CURLOPT_PROXY, $proxy);
}
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
curl_setopt($ch, CURLOPT_URL, $site);
ob_start();      // prevent any output
return curl_exec ($ch); // execute the curl command
ob_end_clean();  // stop preventing output
curl_close ($ch);
}


curl_login('http://www.site.tdl/login.php','username=test&password=demo','','off');
curl_grab_page('http://www.site.tdl/1965.torrent','','off');

Ben dosyaya değişkene (http://www.site.tdl/1965.torrent ) başlığı den dosya almak gerekir.

http://www.site.tdl/1965.torrent başlık:

Content-Disposition: attachment; filename="Linux.Mint.torrent"
Content-Type: application/x-bittorrent
Content-Length: 4525

Yani çıkış Linux.Mint olacaktır. Bunu nasıl yapabilirim?

Teşekkürler!

2 Cevap

Bu soru eski tür olduğunu biliyorum, ama ben CURLOPT_HEADERFUNCTION biraz açıklamak istiyorum, ben kafa karıştırıcı olmaya php.net belgelerine bulundu.

kıvırmak bir anda başlık arama işlevini tek bir başlığı gönderir. Geri arama fonksiyonu okunan bayt sayısını döndürmek gerekir veya başka kıvırmak başarısız olur (ve istek sona erecek)

curl_setopt($ch, CURLOPT_HEADERFUNCTION, "readHeader");

function readHeader($ch, $header)
{
     // read headers
    echo "Read header: ", $header;
    return strlen($header);
}

Örnek çıktı:

 Read header: HTTP/1.1 200 OK
    Read header: Server: nginx/0.8.32
    Read header: Date: Wed, 31 Mar 2010 14:23:18 GMT
    Read header: Content-Type: image/jpeg
    Read header: Content-Length: 886308
    Read header: Connection: close
    Read header: Accept-Ranges: bytes
    Read header: 

İlk başlık gönderildikten sonra readHeader gelen geri dönüşü olmayan, kıvırmak sona erecek.

Sen başlıklarını okumak için bir geri atamanız gerekir.

curl_setopt($ch, CURLOPT_HEADERFUNCTION, readHeader);

function readHeader($ch, $header)
{
     // read headers
}