Как я могу получить имя файла из заголовка, используя curl в php? - PullRequest
1 голос
/ 03 ноября 2010

как я могу определить имя файла в заголовке, когда я получаю с php. заблокировать это:

<?php
/*
This is usefull when you are downloading big files, as it
will prevent time out of the script :
*/
set_time_limit(0);
ini_set('display_errors',true);//Just in case we get some errors, let us know....

$fp = fopen (dirname(__FILE__) . '/tempfile', 'w+');//This is the file where we save the information
$ch = curl_init('http://www.example.com/getfile.php?id=4456'); // Here is the file we are downloading

/*
    the server get me an header 'Content-Disposition: attachment; filename="myfile.pdf"'

    i want get 'myfile.pdf' from headers. how can i get it ?
*/

$fileNameFromHeader = '?????????????';

curl_setopt($ch, CURLOPT_TIMEOUT, 50);
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_exec($ch);
curl_close($ch);
fclose($fp);

// rename file
rename(dirname(__FILE__) . '/tempfile', dirname(__FILE__) . $fileNameFromHeader);

Ответы [ 2 ]

2 голосов
/ 03 ноября 2010

Создайте обратный вызов, который читает заголовки, и анализируйте их самостоятельно. Что-то вроде:

function readHeader($ch, $header)
{
          global $responseHeaders;
          $url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
          $responseHeaders[$url][] = $header;
      return strlen($header);
}

 ... curl stuff ...
 // if you need to call a class method use this:
 // curl_setopt($ch, CURLOPT_HEADERFUNCTION, array(&$this,'readHeader'));
 // for a non class method use this
 curl_setopt($ch, CURLOPT_HEADERFUNCTION, 'readHeader');
 $result = curl_exec($ch);

 // all headers are now in $responseHeaders
1 голос
/ 03 ноября 2010

Я бы использовал упомянутую функцию Байрона. Однако, если вы просто хотите fileNameFromHeader, я бы включил это в функцию readHeader:

function readHeader($ch, $header)
{
    global $responseHeaders;
    $url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
    $responseHeaders[$url][] = $header;

    // $url = '/3939340/kak-ya-mogu-poluchit-imya-faila-iz-zagolovka-ispolzuya-curl-v-php'; 
    $params = explode('/', $url);
    $fileNameFromHeader = $params[count($params) - 1];

    //return strlen($header);
    return $fileNameFromHeader;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...