7 changed files with 265 additions and 91 deletions
Unified 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