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; }