7 changed files with 265 additions and 91 deletions
Split View
Diff Options
-
31controller/download.php
-
6include/config.php
-
88lib/DLink.php
-
143lib/Download.php
-
70lib/PremiumizeMe.php
-
4root/js/my.js
-
14templates/status.php
@ -0,0 +1,88 @@ |
|||
<?php |
|||
|
|||
class DLink { |
|||
|
|||
/** |
|||
* Telecharge le fichier |
|||
* |
|||
* @return array Informations sur le transfert |
|||
*/ |
|||
public static function get(Download $element) |
|||
{ |
|||
// On le creer tout de suite pour eviter des conflits de process
|
|||
touch(DOWNLOADINGDIR.DIRECTORY_SEPARATOR.$element->filename); |
|||
|
|||
$tmpFilename = $element->_id.'-'.time(); |
|||
|
|||
$fp = fopen(DOWNLOADINGDIR.DIRECTORY_SEPARATOR.$tmpFilename, 'w+'); |
|||
$hp = fopen(DOWNLOADINGDIR.DIRECTORY_SEPARATOR.$tmpFilename.'.headers', 'w+'); |
|||
#https://stackoverflow.com/questions/10589889/returning-header-as-array-using-curl
|
|||
$ch = curl_init($element->url); |
|||
|
|||
curl_setopt($ch, CURLOPT_FILE, $fp); |
|||
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); |
|||
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); |
|||
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); |
|||
curl_setopt($ch, CURLOPT_USERAGENT, USERAGENT_OUT); |
|||
curl_setopt($ch, CURLOPT_WRITEHEADER, $hp); |
|||
curl_exec($ch); |
|||
fclose($fp); |
|||
$retour = curl_getinfo($ch); |
|||
// https://stackoverflow.com/questions/11842721/cant-get-remote-filename-to-file-get-contents-and-then-store-file
|
|||
|
|||
if (curl_errno($ch)) { |
|||
// TODO: gerer les erreurs
|
|||
} |
|||
curl_close($ch); |
|||
rewind($hp); |
|||
$headers = stream_get_contents($hp); |
|||
fclose($hp); |
|||
//unlink(DOWNLOADINGDIR.DIRECTORY_SEPARATOR.$tmpFilename.'.header');
|
|||
$element->addEvent([ |
|||
'state' => 'downloaded', |
|||
'curlinfo' => [ |
|||
'http_code' => $retour['http_code'], |
|||
'total_time' => $retour['total_time'], |
|||
'namelookup_time' => $retour['namelookup_time'], |
|||
'connect_time' => $retour['connect_time'], |
|||
'pretransfer_time' => $retour['pretransfer_time'], |
|||
'size_download' => $retour['size_download'], |
|||
'speed_download' => $retour['speed_download'], |
|||
'starttransfer_time' => $retour['starttransfer_time'] |
|||
] |
|||
]); |
|||
|
|||
if (200 !== $retour['http_code']) { |
|||
$element->updateState('error'); |
|||
return false; |
|||
} |
|||
$element->updateState('downloaded'); |
|||
$realFilename = self::getRealFilename($element->url, $headers); |
|||
|
|||
// TODO: à adapter
|
|||
if (file_exists(DOWNLOADEDDIR.DIRECTORY_SEPARATOR.$realFilename)) { |
|||
$element->addEvent(['state' => 'dupp' ]); |
|||
$element->updateState('dupp'); |
|||
// TODO: remove temp
|
|||
return false; |
|||
} |
|||
|
|||
$element->updateFilename($realFilename); |
|||
rename( |
|||
DOWNLOADINGDIR.DIRECTORY_SEPARATOR.$tmpFilename, |
|||
DOWNLOADEDDIR.DIRECTORY_SEPARATOR.$realFilename |
|||
); |
|||
|
|||
return $retour; |
|||
} |
|||
|
|||
public static function getRealFilename($url, $headers) |
|||
{ |
|||
if (preg_match('/Content-Disposition: .*filename=([^ ]+)/', $headers, $matches)) { |
|||
return $matches[1]; |
|||
} |
|||
$stripped_url = preg_replace('/\\?.*/', '', $url); |
|||
return basename($stripped_url); |
|||
} |
|||
|
|||
} |
|||
Write
Preview
Loading…
Cancel
Save