curl_exec успешно, но выходной файл пуст - PullRequest
2 голосов
/ 21 декабря 2011

Я написал функцию PHP ниже для загрузки файлов, и она работает как положено. Однако, когда я пытаюсь скачать этот файл:

$url = 'http://javadl.sun.com/webapps/download/GetFile/1.7.0_02-b13/windows-i586/jre-7u2-windows-i586-iftw.exe';
download($url);

... содержимое не записывается в файл. И я не могу понять, почему. Файл создан, вызов curl_exec возвращает true, но выходной файл остается пустым. Файл можно загрузить в браузере просто отлично, и функция успешно загружает другие файлы. С этим файлом (хостом?) У меня проблема.

Любая помощь приветствуется.

function download($url)
{
    $outdir = 'C:/web/www/download/';
    // open file for writing in binary mode
    if (!file_exists($outdir)) {
        if (!mkdir($outdir)) {
            echo "Could not create download directory: $outdir.\n";
            return false;
        }
    }
    $outfile = $outdir . basename($url);
    $fp = fopen($outfile, 'wb');
    if ($fp == false) {
        echo "Could not open file: $outfile.\n";
        return false;
    }
    // create a new cURL resource
    $ch = curl_init();
    // The URL to fetch
    curl_setopt($ch, CURLOPT_URL, $url);
    // The file that the transfer should be written to
    curl_setopt($ch, CURLOPT_FILE, $fp);
    curl_setopt($ch, CURLOPT_HEADER, false);
    $header = array(
        'Connection: keep-alive',
        'User-Agent: Mozilla/5.0',
    );
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    // downloading...
    $downloaded = curl_exec($ch);
    $error = curl_error($ch);
    curl_close($ch);
    fclose($fp);

    if (!$downloaded) {
        echo "Download failed: $error\n";
        return false;
    } else {
        echo "File successfully downloaded\n";
        return $outfile;
    }
}

Ответы [ 2 ]

4 голосов
/ 21 декабря 2011

Этот URL перенаправляет на другой.Вам нужно установить CURLOPT_FOLLOWLOCATION в 1, чтобы это работало.

3 голосов
/ 21 декабря 2011

Попробуйте добавить;

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
//then after curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($curl, CURLOPT_BINARYTRANSFER, true);

Проверьте образец: http://www.php.net/manual/en/function.curl-exec.php#84774

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...