2015-07-09 7 views
0

Мне интересно, почему эта функция download() не работает.Curl progress function in PHP

function download($url) 
{ 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, 'progress'); 
    curl_setopt($ch, CURLOPT_NOPROGRESS, false); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); 
    $html = curl_exec($ch); 
    curl_close($ch); 


    function progress($resource, $download_size, $downloaded, $upload_size, $uploaded) 
    { 
     if ($download_size > 0) 
      $progress = round($downloaded/$download_size * 100); 
     $progress = array('progress' => $progress); 
     $path = "temp/"; 
     $destination = $path."11.json"; 
     $file = fopen($destination, "w+"); 
     fwrite($file, json_encode($progress, JSON_UNESCAPED_UNICODE)); 
     fclose($file); 
    } 
} 

download("http://stackoverflow.com"); 

Но когда я использую без функции как

curl_setopt($ch, CURLOPT_URL, "http://stackoverflow.com"); 

или когда я использую функцию дважды как

download("http://stackoverflow.com"); 
download("http://stackoverflow.com"); 

это работает. В противном случае он не создает никакого json-файла.

+0

Я хотел создать файл JSON, но он не создавал. Теперь он работает после объявления прогресса вне загрузки. –

ответ

0

Объявить ваша функция progress за пределами download:

function download($url) 
{ 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, 'progress'); 
    curl_setopt($ch, CURLOPT_NOPROGRESS, false); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); 
    $html = curl_exec($ch); 
    curl_close($ch); 
} 

function progress($resource, $download_size, $downloaded, $upload_size, $uploaded) 
{ 
    if ($download_size > 0) 
     $progress = round($downloaded/$download_size * 100); 
    $progress = array('progress' => $progress); 
    $path = "temp/"; 
    $destination = $path."11.json"; 
    $file = fopen($destination, "w+"); 
    fwrite($file, json_encode($progress, JSON_UNESCAPED_UNICODE)); 
    fclose($file); 
}