. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
| Server IP : 94.23.64.18 / Your IP :
216.73.216.185 [
Web Server : Apache System : Linux webm005.cluster107.gra.hosting.ovh.net 5.15.167-ovh-vps-grsec-zfs-classid #1 SMP Tue Sep 17 08:14:20 UTC 2024 x86_64 User : villadal ( 6036) PHP Version : 7.4.33 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl Domains : 2 Domains MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/villadal/www/old/wp-content/plugins/backwpup/inc/ |
Upload File : |
<?php
use \Inpsyde\BackWPupShared\File\MimeTypeExtractor;
/**
* Class BackWPup_Download_File
*/
final class BackWPup_Download_File implements BackWPup_Download_File_Interface {
/**
* The file path
*
* @var string The path of the file to download
*/
private $filepath;
/**
* File Name
*
* @var string The file name
*/
private $filename;
/**
* @var string
*
* @string The encoding type
*/
private static $encoding = 'binary';
/**
* File content length
*
* @var int The length of the file
*/
private $length;
/**
* Callback
*
* @var callable The callback to call that will perform the download action
*/
private $callback;
/**
* Capability
*
* @var @string The capability needed to download the file
*/
private $capability;
/**
* BackWPup_Download_File constructor
*
* @todo move the file stuffs into a specific class to manage only files. Blocked by class-file.php
*
* @throws \InvalidArgumentException In case the callback is not a valid callback.
*
* @param string $filepath The path of the file to download.
* @param callable $callback The callback to call that will perform the download action.
* @param string $capability The capability needed to download the file.
*/
public function __construct( $filepath, $callback, $capability ) {
if ( ! is_callable( $callback ) ) {
throw new \InvalidArgumentException(
sprintf( 'Invalid callback passed to %s. Callback parameter must be callable.', self::class )
);
}
$this->filepath = $filepath;
$this->filename = basename( $filepath );
$this->callback = $callback;
$this->length = file_exists( $filepath ) ? filesize( $filepath ) : 0;
$this->capability = $capability;
}
/**
* @inheritdoc
*/
public function download() {
if ( ! current_user_can( $this->capability ) ) {
wp_die( 'Cheating Uh?' );
}
$this->perform_download_callback();
}
/**
* @inheritdoc
*/
public function clean_ob() {
$level = ob_get_level();
if ( $level ) {
for ( $i = 0; $i < $level; $i ++ ) {
ob_end_clean();
}
}
return $this;
}
/**
* @inheritdoc
*/
public function filepath() {
return $this->filepath;
}
/**
* @inheritdoc
*/
public function headers() {
$mime = MimeTypeExtractor::fromFilePath( $this->filepath );
$level = ob_get_level();
if ( $level ) {
for ( $i = 0; $i < $level; $i ++ ) {
ob_end_clean();
}
}
// phpcs:ignore
@set_time_limit( 300 );
nocache_headers();
// Set headers.
header( 'Content-Description: File Transfer' );
header( "Content-Type: {$mime}" );
header( "Content-Disposition: attachment; filename={$this->filename}" );
header( 'Content-Transfer-Encoding: ' . self::$encoding );
header( "Content-Length: {$this->length}" );
return $this;
}
/**
* Perform the Download
*
* Note: The callback must call `die` it self.
*
* @return void
*/
private function perform_download_callback() {
call_user_func( $this->callback, $this );
}
}