Klaus-Uwe Mitterer
1db8d5a2af
Use curl for remote file operations Do file operations in memory instead of file system Add config.php to .gitignore
82 lines
No EOL
2.5 KiB
PHP
82 lines
No EOL
2.5 KiB
PHP
<?php
|
|
|
|
class File {
|
|
public $url;
|
|
|
|
function __construct($url) {
|
|
$this->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) {
|
|
return $this->get_headers($follow)["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);
|
|
}
|
|
} |