url = $url; } function get_headers($follow=true) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $this->url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $follow); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_NOBODY, true); curl_setopt($ch, CURLOPT_TIMEOUT, 10); $output = curl_exec($ch); curl_close($ch); $headers = []; $output = rtrim($output); $data = explode("\n", $output); $headers['status'] = $data[0]; array_shift($data); foreach($data as $part) { $middle = explode(":",$part,2); if ( !isset($middle[1]) ) { $middle[1] = null; } $headers[trim($middle[0])] = trim($middle[1]); } return $headers; } function get_status($follow=true, $throw=true) { if ($status=$this->get_headers($follow)["status"] >= 400) { throw new Exception("Error downloading " . $this->url . " - Status: " . $status); } return $status; } function get_filename($follow=true) { $content = $this->get_headers($follow); $content = array_change_key_case($content, CASE_LOWER); if ($content['content-disposition']) { $tmp_name = explode('=', $content['content-disposition']); if ($tmp_name[1]) $realfilename = trim($tmp_name[1],'";\''); }; if (!$realfilename) { $stripped_url = preg_replace('/\\?.*/', '', $this->url); $stripped_url = preg_replace('/\\/$/', '', $stripped_url); $realfilename = basename($stripped_url); } return $realfilename; } function fetch_file($write=false, $path=null, $follow=true) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $this->url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $follow); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_NOBODY, false); curl_setopt($ch, CURLOPT_TIMEOUT, 10); $output = curl_exec($ch); if(curl_errno($ch)) throw new Exception('Error downloading file. ' . curl_error($ch)); curl_close($ch); if ($write) { if (!$path) $path = tempnam(sys_get_temp_dir(), "EXPMAIL_"); if (!file_put_contents($path, $output)) throw new Exception('Error saving file to ' . $path); } return ($write ? $path : $output); } }