Пример #1
0
 public static function downloadFile($url, $fileName, $verbose = false)
 {
     echo "</br></br>";
     if (($curl = curl_init($url)) == false) {
         throw new Exception("curl_init error for url {$url}.");
     }
     if (self::$proxyCount > 0) {
         $proxy = self::$proxyServers[self::$currentProxyIndex++ % self::$proxyCount];
         curl_setopt($curl, CURLOPT_PROXY, $proxy);
         if ($verbose === true) {
             echo "Downloading {$url} [Proxy: {$proxy}] ... ";
         }
     } else {
         if ($verbose === true) {
             echo "Downloading {$url} ... ";
         }
     }
     curl_setopt_array($curl, self::$options);
     curl_setopt($curl, CURLOPT_URL, $url);
     if (substr($fileName, -1) == '/') {
         $targetDir = $fileName;
         $fileName = tempnam(sys_get_temp_dir(), 'c_');
     }
     if (($fp = fopen($fileName, "wb")) === false) {
         throw new Exception("fopen error for filename {$fileName}");
     }
     curl_setopt($curl, CURLOPT_FILE, $fp);
     curl_setopt($curl, CURLOPT_HEADERFUNCTION, 'self::get_att');
     curl_setopt($curl, CURLOPT_BINARYTRANSFER, true);
     if (curl_exec($curl) === false) {
         fclose($fp);
         unlink($fileName);
         throw new Exception("curl_exec error for url {$url}.");
     } elseif (isset($targetDir)) {
         $eurl = curl_getinfo($curl, CURLINFO_EFFECTIVE_URL);
         preg_match('#^.*/(.+)$#', $eurl, $match);
         fclose($fp);
         rename($fileName, "{$targetDir}{$match[1]}");
         $fileName = "{$targetDir}{$match[1]}";
     } else {
         fclose($fp);
     }
     self::$header = curl_getinfo($curl);
     curl_close($curl);
     if ($verbose === true) {
         echo "Done.\n";
     }
     $basename = basename($fileName);
     $dirpath = dirname($fileName);
     $newbasename = self::$attach_info['filename'];
     $newFileName = $dirpath . "/" . $newbasename;
     echo "rename torrent file" . "\n";
     echo "old file:" . $fileName . ">> new file:" . $newFileName . "\n";
     if (rename($fileName, $newFileName) === false) {
         throw new Exception("rename error for file {$fileName}");
     }
     return $newFileName;
 }