Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
malacoscolicine
/
dev2024_old_skip
/
wp-content
/
plugins
/
presto-player
/
inc
/
Libraries
:
BunnyCDN.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php namespace PrestoPlayer\Libraries; class BunnyCDN { private $api_key_account; private $api_key_storage; protected $api_url = array( "zone" => "https://bunnycdn.com/api", 'storage' => 'https://storage.bunnycdn.com' ); //--->account > start public function Account($api_key_account = '') { if (!$api_key_account) { return array('status' => 'error', 'code' => 'missing_api_key_account', 'msg' => 'missing api key account'); die(); } $this->api_key_account = $api_key_account; return $this; } public function GetZoneList() { /* will get all of the zones for the account */ if (!$this->api_key_account) { return array('status' => 'error', 'code' => 'api_key_account', 'msg' => 'missing acount api key'); die(); } $key = $this->api_key_account; $api_url = $this->api_url['zone'] . '/pullzone'; $get_header = $this->create_header($key); $api_call = $this->run(array('call_method' => 'GET', 'api_url' => $api_url, 'header' => $get_header)); if ($api_call['http_code'] != 200) { //error message $request_array = json_decode(json_encode($api_call['data'])); $result = array( "status" => 'error', "http_code" => $api_call['http_code'], "msg" => json_decode($request_array)->Message, ); return $result; die(); } $zone_data = json_decode($api_call['data']); $a1 = array(); foreach ($zone_data as $k1 => $v1) { $arr_hostnames = array(); //--->get all the hostnames > start if ($v1->Hostnames) { foreach ($v1->Hostnames as $key => $v2) { array_push($arr_hostnames, $v2->Value); } } //--->get all the hostnames > end $d = array( "zone_id" => $v1->Id, "zone_name" => $v1->Name, "monthly_bandwidth_used" => $this->format_bytes($v1->MonthlyBandwidthUsed), "host_names" => $arr_hostnames, 'security_key' => $v1->ZoneSecurityKey ); array_push($a1, $d); } return array('status' => 'success', 'zone_smry' => $a1, "zone_details" => $zone_data); } public function GetZone($zone_id = '') { /* will get a user zone for the account */ if (!$this->api_key_account) { return array('status' => 'error', 'code' => 'api_key_account', 'msg' => 'missing acount api key'); die(); } if (!$zone_id) { return array('status' => 'error', 'code' => 'zone_id', 'msg' => 'missing zone id'); die(); } $key = $this->api_key_account; $api_url = $this->api_url['zone'] . '/pullzone/' . $zone_id; $get_header = $this->create_header($key); $post_data_array = array('id' => $zone_id); $api_call = $this->run(array('call_method' => 'GET', 'api_url' => $api_url, 'header' => $get_header, 'post_data_array' => $post_data_array)); if ($api_call['http_code'] != 200) { //error message $request_array = json_decode(json_encode($api_call['data'])); $result = array( "status" => 'error', "http_code" => $api_call['http_code'], "msg" => json_decode($request_array), ); return $result; die(); } $zone_data = json_decode($api_call['data']); $a1 = array(); $arr_hostnames = array(); //--->get all the hostnames > start if ($zone_data->Hostnames) { foreach ($zone_data->Hostnames as $key => $v1) { array_push($arr_hostnames, $v1->Value); } } //--->get all the hostnames > end $d = array( "zone_id" => $zone_data->Id, "zone_name" => $zone_data->Name, "monthly_bandwidth_used" => $this->format_bytes($zone_data->MonthlyBandwidthUsed), "host_names" => $arr_hostnames, ); array_push($a1, $d); return array('status' => 'success', 'zone_smry' => $a1, "zone_details" => $zone_data); die(); } /** * We'll default to high volume pricing */ public function CreateNewZone($zone_name = '', $zone_url = '', $type = 1) { /* will create a new zone for the account */ if (!$this->api_key_account) { return array('status' => 'error', 'code' => 'api_key_account', 'msg' => 'missing acount api key'); die(); } if (!$zone_name) { return array('status' => 'error', 'code' => 'zone_name', 'msg' => 'missing zone name'); die(); } if (!$zone_url) { return array('status' => 'error', 'code' => 'zone_url', 'msg' => 'missing zone url'); die(); } $key = $this->api_key_account; $api_url = $this->api_url['zone'] . '/pullzone'; $get_header = $this->create_header($key); $post_data_array = array('Name' => $zone_name, 'OriginUrl' => $zone_url, 'Type' => $type); $api_call = $this->run(array('call_method' => 'POST', 'api_url' => $api_url, 'header' => $get_header, 'post_data_array' => $post_data_array)); if ($api_call['http_code'] != 201) { //error message $request_array = json_decode(json_encode($api_call['data'])); $result = array( "status" => 'error', "http_code" => $api_call['http_code'], "msg" => json_decode($request_array), ); return $result; die(); } //convert to php array for data parsing $zone_data = json_decode($api_call['data']); //--->get all the hostnames > start $cdnurl = ''; if ($zone_data->Hostnames) { foreach ($zone_data->Hostnames as $key => $v1) { $cdnurl = $v1->Value; } } //--->get all the hostnames > end return array( 'status' => 'success', "zone_id" => $zone_data->Id, "zone_name" => $zone_data->Name, "origin_url" => $zone_data->OriginUrl, "cdn_url" => $cdnurl, "zone_details" => $zone_data ); die(); } public function UpdateZone($zone_id = '', $data) { if (!$this->api_key_account) { return array('status' => 'error', 'code' => 'api_key_account', 'msg' => 'missing acount api key'); die(); } if (!$zone_id) { return array('status' => 'error', 'code' => 'zone_id', 'msg' => 'missing zone id'); die(); } $key = $this->api_key_account; $api_url = $this->api_url['zone'] . '/pullzone/' . $zone_id; $get_header = $this->create_header($key); $api_call = $this->run(array('call_method' => 'POST', 'api_url' => $api_url, 'header' => $get_header, 'post_data_array' => (array) $data)); if ($api_call['http_code'] != 200) { //error message $request_array = json_decode(json_encode($api_call['data'])); $result = array( "status" => 'error', "http_code" => $api_call['http_code'], "msg" => json_decode($request_array), ); return $result; die(); } //convert to php array for data parsing $zone_data = json_decode($api_call['data']); //--->get all the hostnames > start $cdnurl = ''; if ($zone_data->Hostnames) { foreach ($zone_data->Hostnames as $key => $v1) { $cdnurl = $v1->Value; } } //--->get all the hostnames > end return array( 'status' => 'success', "zone_id" => $zone_data->Id, "zone_name" => $zone_data->Name, "origin_url" => $zone_data->OriginUrl, "cdn_url" => $cdnurl, "zone_details" => $zone_data ); die(); } public function DeleteZone($zone_id = '') { /* will delete a zone for the account */ if (!$this->api_key_account) { return array('status' => 'error', 'code' => 'api_key_account', 'msg' => 'missing acount api key'); die(); } if (!$zone_id) { return array('status' => 'error', 'code' => 'zone_id', 'msg' => 'missing zone id'); die(); } $key = $this->api_key_account; $api_url = $this->api_url['zone'] . '/pullzone/' . $zone_id; $get_header = $this->create_header($key); $api_call = $this->run(array('call_method' => 'DELETE', 'api_url' => $api_url, 'header' => $get_header,)); if ($api_call['http_code'] != 200 && $api_call['http_code'] != 302) { //error message $request_array = json_decode(json_encode($api_call['data'])); $result = array( "status" => 'error', "http_code" => $api_call['http_code'], "msg" => json_decode($request_array), ); return $result; die(); } return array( 'status' => 'success', "msg" => $api_call, ); //return $api_call; die(); } public function PurgeZoneCache($zone_id = '') { /* will purge cache for the whole zone */ if (!$this->api_key_account) { return array('status' => 'error', 'code' => 'api_key_account', 'msg' => 'missing acount api key'); die(); } if (!$zone_id) { return array('status' => 'error', 'code' => 'zone_id', 'msg' => 'missing zone id'); die(); } $key = $this->api_key_account; $api_url = $this->api_url['zone'] . '/pullzone/' . $zone_id . '/purgeCache'; $get_header = $this->create_header($key); $api_call = $this->run(array('call_method' => 'POST', 'api_url' => $api_url, 'header' => $get_header,)); if ($api_call['http_code'] != 200) { //error message $request_array = json_decode(json_encode($api_call['data'])); $result = array( "status" => 'error', "http_code" => $api_call['http_code'], "msg" => json_decode($request_array), ); return $result; die(); } return array( 'status' => 'success', "msg" => $api_call, ); die(); } public function AddHostName($zone_id = '', $host_name_url = '') { /* will add a host name for the zone */ if (!$this->api_key_account) { return array('status' => 'error', 'code' => 'api_key_account', 'msg' => 'missing acount api key'); die(); } if (!$zone_id) { return array('status' => 'error', 'code' => 'zone_id', 'msg' => 'missing zone id'); die(); } if (!$host_name_url) { return array('status' => 'error', 'code' => 'host_name_url', 'msg' => 'missing host name url'); die(); } $key = $this->api_key_account; $api_url = $this->api_url['zone'] . '/pullzone/addHostname'; $get_header = $this->create_header($key); $post_data_array = array('PullZoneId' => $zone_id, 'Hostname' => $host_name_url); $api_call = $this->run(array('call_method' => 'POST', 'api_url' => $api_url, 'header' => $get_header, 'post_data_array' => $post_data_array)); if ($api_call['http_code'] != 200) { //error message $request_array = json_decode(json_encode($api_call['data'])); $result = array( "status" => 'error', "http_code" => $api_call['http_code'], "msg" => json_decode($request_array), ); return $result; die(); } return array( 'status' => 'success', "msg" => $api_call, ); die(); } public function DeleteHostName($zone_id = '', $host_name_url = '') { /* will delete a host name for the zone */ if (!$this->api_key_account) { return array('status' => 'error', 'code' => 'api_key_account', 'msg' => 'missing acount api key'); die(); } if (!$zone_id) { return array('status' => 'error', 'code' => 'zone_id', 'msg' => 'missing zone id'); die(); } if (!$host_name_url) { return array('status' => 'error', 'code' => 'host_name_url', 'msg' => 'missing host name url'); die(); } $key = $this->api_key_account; $api_url = $this->api_url['zone'] . '/pullzone/deleteHostname?id=' . $zone_id . '&hostname=' . $host_name_url; $get_header = $this->create_header($key); $api_call = $this->run(array('call_method' => 'DELETE', 'api_url' => $api_url, 'header' => $get_header,)); if ($api_call['http_code'] != 200) { //error message $request_array = json_decode(json_encode($api_call['data'])); $result = array( "status" => 'error', "http_code" => $api_call['http_code'], "msg" => json_decode($request_array), ); return $result; die(); } return array( 'status' => 'success', "msg" => $api_call, ); die(); } public function AddBlockedIP($zone_id = '', $blocked_ip = '') { /* will add a blocked ip for the zone */ if (!$this->api_key_account) { return array('status' => 'error', 'code' => 'api_key_account', 'msg' => 'missing acount api key'); die(); } if (!$zone_id) { return array('status' => 'error', 'code' => 'zone_id', 'msg' => 'missing zone id'); die(); } if (!$blocked_ip) { return array('status' => 'error', 'code' => 'blocked_ip', 'msg' => 'missing blocked ip'); die(); } $key = $this->api_key_account; $api_url = $this->api_url['zone'] . '/pullzone/addBlockedIp'; $get_header = $this->create_header($key); $post_data_array = array('PullZoneId' => $zone_id, 'BlockedIp' => $blocked_ip); $api_call = $this->run(array('call_method' => 'POST', 'api_url' => $api_url, 'header' => $get_header, 'post_data_array' => $post_data_array)); if ($api_call['http_code'] != 200) { //error message $request_array = json_decode(json_encode($api_call['data'])); $result = array( "status" => 'error', "http_code" => $api_call['http_code'], "msg" => json_decode($request_array), ); return $result; die(); } return array( 'status' => 'success', "msg" => $api_call, ); die(); } public function RemoveBlockedIP($zone_id = '', $blocked_ip = '') { /* will remove a blocked ip for the zone */ if (!$this->api_key_account) { return array('status' => 'error', 'code' => 'api_key_account', 'msg' => 'missing acount api key'); die(); } if (!$zone_id) { return array('status' => 'error', 'code' => 'zone_id', 'msg' => 'missing zone id'); die(); } if (!$blocked_ip) { return array('status' => 'error', 'code' => 'blocked_ip', 'msg' => 'missing blocked ip'); die(); } $key = $this->api_key_account; $api_url = $this->api_url['zone'] . '/pullzone/removeBlockedIp'; $get_header = $this->create_header($key); $post_data_array = array('PullZoneId' => $zone_id, 'BlockedIp' => $blocked_ip); $api_call = $this->run(array('call_method' => 'POST', 'api_url' => $api_url, 'header' => $get_header, 'post_data_array' => $post_data_array)); if ($api_call['http_code'] != 200) { //error message $request_array = json_decode(json_encode($api_call['data'])); $result = array( "status" => 'error', "http_code" => $api_call['http_code'], "msg" => json_decode($request_array), ); return $result; die(); } return array( 'status' => 'success', "msg" => $api_call, ); die(); } public function PurgeURL($url = '') { /* will purge a url for the account */ if (!$this->api_key_account) { return array('status' => 'error', 'code' => 'api_key_account', 'msg' => 'missing acount api key'); die(); } if (!$url) { return array('status' => 'error', 'code' => 'url', 'msg' => 'missing url'); die(); } $key = $this->api_key_account; $api_url = $this->api_url['zone'] . '/purge?url=' . $url; $get_header = $this->create_header($key); //$post_data_array = array('PullZoneId' => $zone_id, 'BlockedIp' => $blocked_ip); $api_call = $this->run(array('call_method' => 'POST', 'api_url' => $api_url, 'header' => $get_header,)); if ($api_call['http_code'] != 200) { //error message $request_array = json_decode(json_encode($api_call['data'])); $result = array( "status" => 'error', "http_code" => $api_call['http_code'], "msg" => json_decode($request_array), ); return $result; die(); } return array( 'status' => 'success', "msg" => $api_call, ); die(); } public function Stats() { /* will get all the statistics for the account */ if (!$this->api_key_account) { return array('status' => 'error', 'code' => 'api_key_account', 'msg' => 'missing acount api key'); die(); } $key = $this->api_key_account; $api_url = $this->api_url['zone'] . '/statistics'; $get_header = $this->create_header($key); $api_call = $this->run(array('call_method' => 'GET', 'api_url' => $api_url, 'header' => $get_header,)); if ($api_call['http_code'] != 200) { //error message $request_array = json_decode(json_encode($api_call['data'])); $result = array( "status" => 'error', "http_code" => $api_call['http_code'], "msg" => json_decode($request_array), ); return $result; die(); } return array( 'status' => 'success', "msg" => json_decode(($api_call['data'])), ); die(); } public function Billing() { /* will get the billing information for the account */ if (!$this->api_key_account) { return array('status' => 'error', 'code' => 'api_key_account', 'msg' => 'missing acount api key'); die(); } $key = $this->api_key_account; $api_url = $this->api_url['zone'] . '/billing'; $get_header = $this->create_header($key); $api_call = $this->run(array('call_method' => 'GET', 'api_url' => $api_url, 'header' => $get_header,)); if ($api_call['http_code'] != 200) { //error message $request_array = json_decode(json_encode($api_call['data'])); $result = array( "status" => 'error', "http_code" => $api_call['http_code'], "msg" => json_decode($request_array), ); return $result; die(); } return array( 'status' => 'success', "msg" => json_decode(($api_call['data'])), ); die(); } public function ApplyCode($apply_code = '') { /* will apply a promo code to account to save money */ if (!$this->api_key_account) { return array('status' => 'error', 'code' => 'api_key_account', 'msg' => 'missing acount api key'); die(); } if (!$apply_code) { return array('status' => 'error', 'code' => 'apply_code', 'msg' => 'missing apply code'); die(); } $key = $this->api_key_account; $api_url = $this->api_url['zone'] . '/billing/applycode?couponCode=' . $apply_code; $get_header = $this->create_header($key); $api_call = $this->run(array('call_method' => 'GET', 'api_url' => $api_url, 'header' => $get_header,)); if ($api_call['http_code'] != 200) { //error message $request_array = json_decode(json_encode($api_call['data'])); $result = array( "status" => 'error', "http_code" => $api_call['http_code'], "msg" => json_decode($request_array), ); return $result; die(); } return array( 'status' => 'success', "msg" => $api_call, ); die(); } //--->account > end //--->storage > start public function Storage($api_key_storage = '') { if (!$api_key_storage) { return array('status' => 'error', 'code' => 'api_key_storage', 'msg' => 'missing storage api key'); die(); } $this->api_key_storage = $api_key_storage; return $this; } public function GetStorageZone($storage_path = '') { /* will get all of the files and subfolders for storage zone */ if (!$this->api_key_storage) { return array('status' => 'error', 'code' => 'api_key_storage', 'msg' => 'missing storage api key'); die(); } if (!$storage_path) { return array('status' => 'error', 'code' => 'missing_zone_id', 'msg' => 'missing zone id'); die(); } $key = $this->api_key_storage; $api_url = $this->fix_url($this->api_url['storage'] . $storage_path); $get_header = $this->create_header($key); $api_call = $this->run(array('call_method' => 'GET', 'api_url' => $api_url, 'header' => $get_header,)); if ($api_call['http_code'] != 200) { //error message $request_array = json_decode(json_encode($api_call['data'])); $result = array( "status" => 'error', "http_code" => $api_call['http_code'], "msg" => json_decode($request_array), ); return $result; die(); } $request_array = json_decode(json_encode($api_call['data'])); //convert to php array for data parsing $zone_data = json_decode(($api_call['data'])); //--->get all the hostnames > start $files = array(); $folders = array(); //--->get all the hostnames > start if ($zone_data) { foreach ($zone_data as $key => $v1) { $folder_path = str_replace('/' . $v1->StorageZoneName . '/', "/", $v1->Path); if (!$v1->IsDirectory) { //files only $d = array( "storage_zone_name" => $v1->StorageZoneName, "folder_path" => $folder_path, "file_name" => $v1->ObjectName, "file_zone_path" => $v1->Path . $v1->ObjectName, "file_dl_path" => $folder_path . $v1->ObjectName, ); array_push($files, $d); } else if ($v1->IsDirectory) { //folders only $d = array( "storage_zone_name" => $v1->StorageZoneName, "main_folder" => $v1->Path, "sub_folder" => $v1->ObjectName, "folder_path" => $v1->Path . $v1->ObjectName, ); array_push($folders, $d); } } } //--->get all the hostnames > end return array( 'status' => 'success', 'zone_smry' => array('folders' => $folders, 'files' => $files,), "zone_details" => json_decode($request_array), ); die(); } public function PutFile($local_upload_file_path = '', $storage_zone_path = '', $storage_zone_file_path = '') { /* will upload a file to storage zone */ if (!$this->api_key_storage) { return array('status' => 'error', 'code' => 'api_key_storage', 'msg' => 'missing storage api key'); die(); } if (!$local_upload_file_path) { return array('status' => 'error', 'code' => 'local_upload_file_path', 'msg' => 'missing file path'); die(); } if (!$storage_zone_file_path) { return array('status' => 'error', 'code' => 'storage_zone_file_path', 'msg' => 'missing storage zone file path'); die(); } //file variables //make folder and file name seo friendly to ensure no problem happen $cdn_file_path = $this->seo_file_name($storage_zone_file_path); $path_info = pathinfo($cdn_file_path); //will get folders path $info_dir_name = strtolower($path_info['dirname']); //will get file name with ext $info_file_name = $path_info['basename']; //$info_file_name = $path_info['filename']; $info_file_ext = $path_info['extension']; $storage_file_path = $storage_zone_path . $cdn_file_path; $key = $this->api_key_storage; $api_url = $this->fix_url($this->api_url['storage'] . $storage_file_path); $get_header = $this->create_header($key); // Open the file $file = $local_upload_file_path; $fileStream = fopen($file, "r") or die("Unable to open file!"); $dataLength = filesize($file); // Initialize and configure curl $curl = curl_init(); curl_setopt_array( $curl, array( CURLOPT_CUSTOMREQUEST => 'PUT', CURLOPT_URL => $api_url, CURLOPT_RETURNTRANSFER => 1 // means output will be a return value from curl_exec() instead of simply echoed , CURLOPT_TIMEOUT => 60000 // in case you are uploading a really BIG file!! , CURLOPT_FOLLOWLOCATION => 0 // don't follow any Location headers, use only the CURLOPT_URL, this is for security , CURLOPT_FAILONERROR => 0 // do not fail verbosely fi the http_code is an error, this is for security , CURLOPT_SSL_VERIFYPEER => 1 // do verify the SSL of CURLOPT_URL, this is for security , CURLOPT_VERBOSE => 0 // don't output verbosely to stderr, this is for security , CURLOPT_INFILE => $fileStream, CURLOPT_INFILESIZE => $dataLength, CURLOPT_UPLOAD => 1, CURLOPT_HTTPHEADER => array( 'AccessKey: ' . $key ) ) ); // Send the request $response = curl_exec($curl); $http_code = curl_getinfo($curl, CURLINFO_HTTP_CODE); // Cleanup curl_close($curl); fclose($fileStream); if ($http_code != 201) { //error message $request_array = json_decode(json_encode($response)); $result = array( "status" => 'error', "http_code" => $http_code, "msg" => json_decode($request_array), ); return $result; die(); } return array( 'status' => 'success', 'file_name' => $info_file_name, 'storage_file_path' => $storage_file_path, 'cdn_file_path' => $cdn_file_path, 'msg' => $response, ); die(); } public function GetFile($storage_path = '') { /* will get a file from the storage zone */ if (!$storage_path || !$this->api_key_storage) { return array('status' => 'error', 'code' => 'missing_api_key_storage', 'msg' => 'missing storage missing api'); die(); } $key = $this->api_key_storage; $api_url = $this->fix_url($this->api_url['storage'] . $storage_path); $accessKey = $this->api_key_storage; $get_header = $this->create_header($key); $api_call = $this->run(array('call_method' => 'GET', 'api_url' => $api_url, 'header' => $get_header)); if ($api_call['http_code'] != 200) { //error message $request_array = json_decode(json_encode($api_call['data'])); $result = array( "status" => 'error', "http_code" => $api_call['http_code'], "msg" => json_decode($request_array), ); return $result; die(); } $path_info = pathinfo($storage_path); $file_name = $path_info['basename']; $file = $api_call['data']; header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename=$file_name"); //will force to download... echo $file; } public function DeleteFile($storage_path = '') { /* will delete a file from the storage zone */ if (!$storage_path || !$this->api_key_storage) { return array('status' => 'error', 'code' => 'missing_api_key_storage', 'msg' => 'missing storage missing api'); die(); } $key = $this->api_key_storage; $api_url = $this->fix_url($this->api_url['storage'] . $storage_path); $accessKey = $this->api_key_storage; $get_header = $this->create_header($key); $api_call = $this->run(array('call_method' => 'DELETE', 'api_url' => $api_url, 'header' => $get_header)); if ($api_call['http_code'] != 200) { //error message $request_array = json_decode(json_encode($api_call['data'])); $result = array( "status" => 'error', "http_code" => $api_call['http_code'], "msg" => json_decode($request_array), ); return $result; die(); } return array( 'status' => 'success', 'msg' => $api_call, ); die(); } public function SecureLink($host_name = '', $security_key = '', $file_path = '', $expiry_hr = 24) { $securityKey = $security_key; $path = $file_path; // Set the time of expiry to one hour from now $expires = (time() + 3600) * $expiry_hr; // Generate the token $hashableBase = $securityKey . $path . $expires; // If using IP validation // $hashableBase .= "146.14.19.7"; $token = md5($hashableBase, true); $token = base64_encode($token); $token = strtr($token, '+/', '-_'); $token = str_replace('=', '', $token); // Generate the URL $url = "$host_name$file_path?token={$token}&expires={$expires}"; return $url; } //--->storage > end public function DownloadFile($file_url = '', $oupt_file_name = '') { //this is a fast way to download a file //remove any query string data if (isset($oupt_file_name)) { $file_name = $oupt_file_name; } if (empty($oupt_file_name)) { $file_name = preg_replace('/\?.*/', '', basename($file_url)); } header("Content-Type: application/octet-stream"); header("Content-Transfer-Encoding: Binary"); header("Content-disposition: attachment; filename=$file_name"); readfile($file_url); } public function DownloadFile1($file_url) { /* this is a slow way to download a file will allow you to download a remote file from any server that is accessible */ $filename = $file_url; $filedata = @file_get_contents($filename); // SUCCESS if ($filedata) { // GET A NAME FOR THE FILE //remove any query string data $basename = preg_replace('/\?.*/', '', basename($file_url)); //$basename = basename($filename); // THESE HEADERS ARE USED ON ALL BROWSERS header("Content-Type: application-x/force-download"); header("Content-Disposition: attachment; filename=$basename"); header("Content-length: " . (string)(strlen($filedata))); header("Expires: " . gmdate("D, d M Y H:i:s", mktime(date("H") + 2, date("i"), date("s"), date("m"), date("d"), date("Y"))) . " GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // THIS HEADER MUST BE OMITTED FOR IE 6+ if (FALSE === strpos($_SERVER["HTTP_USER_AGENT"], 'MSIE ')) { header("Cache-Control: no-cache, must-revalidate"); } // THIS IS THE LAST HEADER header("Pragma: no-cache"); // FLUSH THE HEADERS TO THE BROWSER flush(); // CAPTURE THE FILE IN THE OUTPUT BUFFERS - WILL BE FLUSHED AT SCRIPT END ob_start(); echo $filedata; } // FAILURE else { die("ERROR: UNABLE TO OPEN $filename"); } } public function Logs($zone_id = '', $log_date = '') { /* will get log for the zone */ if (!$this->api_key_account) { return array('status' => 'error', 'code' => 'api_key_account', 'msg' => 'missing acount api key'); die(); } if (!$log_date) { $date = new DateTime(); //today minus 1 day... if today(2019-03-29), then date is: 2019-03-28 $date = $date->modify("-1 day"); $date = $date->format('m-d-y'); $log_dt = $date; } else if ($log_date) { $date = new DateTime($log_date); $date = $date->format('m-d-y'); $log_dt = $date; } $key = $this->api_key_account; //$api_url = 'https://logging.bunnycdn.com/{mm}-{dd}-{yy}/{pull_zone_id}.log'; $api_url = 'https://logging.bunnycdn.com/' . $log_dt . '/' . $zone_id . '.log'; $get_header = $this->create_header($key); $api_call = $this->run(array('call_method' => 'GET', 'api_url' => $api_url, 'header' => $get_header,)); if ($api_call['http_code'] != 200) { //error message $request_array = json_decode(json_encode($api_call['data'])); $result = array( "status" => 'error', "http_code" => $api_call['http_code'], "msg" => ($request_array), ); return $result; //die(); } else if (strlen($api_call['data']) < 1) { $result = array( "status" => 'error', "http_code" => 800, 'msg' => 'Ran successfully but no log data returned for the current selection.', ); return $result; //die(); } else if ($api_call['http_code'] == 200) { //convert/parse it to line break $t1 = explode("\n", $api_call['data']); $a1 = array(); foreach ($t1 as $v1) { if (isset($v1) && strlen($v1) > 0) { //parse "|" $t2 = explode("|", $v1); //divide it by 1000 to convert it to php unix time $time = round($t2[2] / 1000, 0); $a2 = array( 'cache_hit' => $t2[0], 'status' => $t2[1], 'status_code' => $this->get_http_status_code($t2[1]), 'time_js' => $t2[2] * 1, 'time_unix' => $time, 'time_dttm' => date('Y-m-d H:i:s', $time), 'time_dt' => date('Y-m-d', $time), 'bytes' => $t2[3], 'bytes_format' => $this->format_bytes($t2[3]), 'zone_id' => $t2[4], 'remote_ip' => $t2[5], 'referer_url' => strlen($t2[6]) > 1 ? ($t2[6]) : 'direct', 'referer_url_raw' => $t2[6], 'file_url' => $t2[7], 'cdn_datacenter_loc' => $t2[8], 'user_agent' => $t2[9], 'request_id' => $t2[10], 'country' => $t2[11], 'country_name' => $this->get_country_name($t2[11]), ); array_push($a1, $a2); } } $get_stats = $this->Account($key)->GetZone($zone_id)['zone_smry'][0]; return array( 'status' => 'success', "log" => $a1, 'zone_current_monthly_bandwidth_used' => $get_stats['monthly_bandwidth_used'], 'zone_name' => $get_stats['zone_name'], ); } } //--->process functions > start private function create_header($api_key) { $header = array('Content-Type:application/json', 'accesskey:' . $api_key . ''); return $header; } private function run($call_arr = array('call_method' => 'GET', 'api_url' => 'api_url', 'header' => array(), 'post_data_array' => array(),)) { $call_method = isset($call_arr['call_method']) ? $call_arr['call_method'] : 'GET'; $api_url = isset($call_arr['api_url']) ? $call_arr['api_url'] : 'api_url'; $header = isset($call_arr['header']) ? $call_arr['header'] : ''; $post_data_array = isset($call_arr['post_data_array']) ? $call_arr['post_data_array'] : ''; $post_data = json_encode($post_data_array); $curl = curl_init($api_url); curl_setopt($curl, CURLOPT_HTTPHEADER, $header); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $call_method); curl_setopt($curl, CURLOPT_URL, $api_url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data); $result = curl_exec($curl); $http_code = curl_getinfo($curl, CURLINFO_HTTP_CODE); curl_close($curl); //For error checking if ($result === false) { return array('status' => 'error', 'code' => 'curl_error', 'result' => curl_error($curl),); die(); } return array('http_code' => $http_code, 'data' => $result,); } //--->process functions > end //--->private functions > start private function fix_url($url = '') { return str_replace("\\", "/", $url); } private function format_bytes($bytes, $force_unit = NULL, $format = NULL, $si = TRUE) { // Format string $format = ($format === NULL) ? '%01.2f %s' : (string) $format; // IEC prefixes (binary) if ($si == FALSE or strpos($force_unit, 'i') !== FALSE) { $units = array('B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB'); $mod = 1024; } // SI prefixes (decimal) else { $units = array('B', 'kB', 'MB', 'GB', 'TB', 'PB'); $mod = 1000; } // Determine unit to use if (($power = array_search((string) $force_unit, $units)) === FALSE) { $power = ($bytes > 0) ? floor(log($bytes, $mod)) : 0; } return sprintf($format, $bytes / pow($mod, $power), $units[$power]); } private function seo_file_name($file_name) { /* will convert file name into seo url file name i.e. $file_name = 'code with mark !@#$%^*()_+~ $$%& _03e05 122-9****.mp4'; //output will be code-with-mark-03e05-122-9.mp4 Note only use this for file names and not for folder names!!! */ $path_info = pathinfo($file_name); $info_dir_name = preg_replace("/[\s]/", "-", strtolower($path_info['dirname'])); $info_file_name = $path_info['filename']; $info_file_ext = $path_info['extension']; $string = $info_file_name; $src = 'àáâãäçèéêëìíîïñòóôõöøùúûüýÿßÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖØÙÚÛÜÝ'; $rep = 'aaaaaceeeeiiiinoooooouuuuyysAAAAACEEEEIIIINOOOOOOUUUUY'; // strip off accents (assuming utf8 PHP - note strtr() requires single-byte) $string = strtr(utf8_decode($string), utf8_decode($src), $rep); // convert to lower case $string = strtolower($string); // strip all but alphanumeric, whitespace, dot, underscore, hyphen $string = preg_replace("/[^a-z0-9\s._-]/", "", $string); // merge multiple consecutive whitespaces, dots, underscores, hyphens $string = preg_replace("/[\s._-]+/", " ", $string); // convert whitespaces to hyphens $string = preg_replace("/[\s]/", "-", $string); if (substr($info_dir_name, 1)) { $file_path = $info_dir_name . "/" . $string . '.' . $info_file_ext; } else { $file_path = "/" . $string . '.' . $info_file_ext; } return $file_path; } private function get_country_name($country_code) { $country_name = array( "A1" => "Anonymous Proxy", "A2" => "Satellite Provider", "O1" => "Other Country", "AD" => "Andorra", "AE" => "United Arab Emirates", "AF" => "Afghanistan", "AG" => "Antigua and Barbuda", "AI" => "Anguilla", "AL" => "Albania", "AM" => "Armenia", "AO" => "Angola", "AP" => "Asia/Pacific Region", "AQ" => "Antarctica", "AR" => "Argentina", "AS" => "American Samoa", "AT" => "Austria", "AU" => "Australia", "AW" => "Aruba", "AX" => "Aland Islands", "AZ" => "Azerbaijan", "BA" => "Bosnia and Herzegovina", "BB" => "Barbados", "BD" => "Bangladesh", "BE" => "Belgium", "BF" => "Burkina Faso", "BG" => "Bulgaria", "BH" => "Bahrain", "BI" => "Burundi", "BJ" => "Benin", "BL" => "Saint Bartelemey", "BM" => "Bermuda", "BN" => "Brunei Darussalam", "BO" => "Bolivia", "BQ" => "Bonaire, Saint Eustatius and Saba", "BR" => "Brazil", "BS" => "Bahamas", "BT" => "Bhutan", "BV" => "Bouvet Island", "BW" => "Botswana", "BY" => "Belarus", "BZ" => "Belize", "CA" => "Canada", "CC" => "Cocos (Keeling) Islands", "CD" => "Congo, The Democratic Republic of the", "CF" => "Central African Republic", "CG" => "Congo", "CH" => "Switzerland", "CI" => "Cote d'Ivoire", "CK" => "Cook Islands", "CL" => "Chile", "CM" => "Cameroon", "CN" => "China", "CO" => "Colombia", "CR" => "Costa Rica", "CU" => "Cuba", "CV" => "Cape Verde", "CW" => "Curacao", "CX" => "Christmas Island", "CY" => "Cyprus", "CZ" => "Czech Republic", "DE" => "Germany", "DJ" => "Djibouti", "DK" => "Denmark", "DM" => "Dominica", "DO" => "Dominican Republic", "DZ" => "Algeria", "EC" => "Ecuador", "EE" => "Estonia", "EG" => "Egypt", "EH" => "Western Sahara", "ER" => "Eritrea", "ES" => "Spain", "ET" => "Ethiopia", "EU" => "Europe", "FI" => "Finland", "FJ" => "Fiji", "FK" => "Falkland Islands (Malvinas)", "FM" => "Micronesia, Federated States of", "FO" => "Faroe Islands", "FR" => "France", "GA" => "Gabon", "GB" => "United Kingdom", "GD" => "Grenada", "GE" => "Georgia", "GF" => "French Guiana", "GG" => "Guernsey", "GH" => "Ghana", "GI" => "Gibraltar", "GL" => "Greenland", "GM" => "Gambia", "GN" => "Guinea", "GP" => "Guadeloupe", "GQ" => "Equatorial Guinea", "GR" => "Greece", "GS" => "South Georgia and the South Sandwich Islands", "GT" => "Guatemala", "GU" => "Guam", "GW" => "Guinea-Bissau", "GY" => "Guyana", "HK" => "Hong Kong", "HM" => "Heard Island and McDonald Islands", "HN" => "Honduras", "HR" => "Croatia", "HT" => "Haiti", "HU" => "Hungary", "ID" => "Indonesia", "IE" => "Ireland", "IL" => "Israel", "IM" => "Isle of Man", "IN" => "India", "IO" => "British Indian Ocean Territory", "IQ" => "Iraq", "IR" => "Iran, Islamic Republic of", "IS" => "Iceland", "IT" => "Italy", "JE" => "Jersey", "JM" => "Jamaica", "JO" => "Jordan", "JP" => "Japan", "KE" => "Kenya", "KG" => "Kyrgyzstan", "KH" => "Cambodia", "KI" => "Kiribati", "KM" => "Comoros", "KN" => "Saint Kitts and Nevis", "KP" => "Korea, Democratic People's Republic of", "KR" => "Korea, Republic of", "KW" => "Kuwait", "KY" => "Cayman Islands", "KZ" => "Kazakhstan", "LA" => "Lao People's Democratic Republic", "LB" => "Lebanon", "LC" => "Saint Lucia", "LI" => "Liechtenstein", "LK" => "Sri Lanka", "LR" => "Liberia", "LS" => "Lesotho", "LT" => "Lithuania", "LU" => "Luxembourg", "LV" => "Latvia", "LY" => "Libyan Arab Jamahiriya", "MA" => "Morocco", "MC" => "Monaco", "MD" => "Moldova, Republic of", "ME" => "Montenegro", "MF" => "Saint Martin", "MG" => "Madagascar", "MH" => "Marshall Islands", "MK" => "Macedonia", "ML" => "Mali", "MM" => "Myanmar", "MN" => "Mongolia", "MO" => "Macao", "MP" => "Northern Mariana Islands", "MQ" => "Martinique", "MR" => "Mauritania", "MS" => "Montserrat", "MT" => "Malta", "MU" => "Mauritius", "MV" => "Maldives", "MW" => "Malawi", "MX" => "Mexico", "MY" => "Malaysia", "MZ" => "Mozambique", "NA" => "Namibia", "NC" => "New Caledonia", "NE" => "Niger", "NF" => "Norfolk Island", "NG" => "Nigeria", "NI" => "Nicaragua", "NL" => "Netherlands", "NO" => "Norway", "NP" => "Nepal", "NR" => "Nauru", "NU" => "Niue", "NZ" => "New Zealand", "OM" => "Oman", "PA" => "Panama", "PE" => "Peru", "PF" => "French Polynesia", "PG" => "Papua New Guinea", "PH" => "Philippines", "PK" => "Pakistan", "PL" => "Poland", "PM" => "Saint Pierre and Miquelon", "PN" => "Pitcairn", "PR" => "Puerto Rico", "PS" => "Palestinian Territory", "PT" => "Portugal", "PW" => "Palau", "PY" => "Paraguay", "QA" => "Qatar", "RE" => "Reunion", "RO" => "Romania", "RS" => "Serbia", "RU" => "Russian Federation", "RW" => "Rwanda", "SA" => "Saudi Arabia", "SB" => "Solomon Islands", "SC" => "Seychelles", "SD" => "Sudan", "SE" => "Sweden", "SG" => "Singapore", "SH" => "Saint Helena", "SI" => "Slovenia", "SJ" => "Svalbard and Jan Mayen", "SK" => "Slovakia", "SL" => "Sierra Leone", "SM" => "San Marino", "SN" => "Senegal", "SO" => "Somalia", "SR" => "Suriname", "SS" => "South Sudan", "ST" => "Sao Tome and Principe", "SV" => "El Salvador", "SX" => "Sint Maarten", "SY" => "Syrian Arab Republic", "SZ" => "Swaziland", "TC" => "Turks and Caicos Islands", "TD" => "Chad", "TF" => "French Southern Territories", "TG" => "Togo", "TH" => "Thailand", "TJ" => "Tajikistan", "TK" => "Tokelau", "TL" => "Timor-Leste", "TM" => "Turkmenistan", "TN" => "Tunisia", "TO" => "Tonga", "TR" => "Turkey", "TT" => "Trinidad and Tobago", "TV" => "Tuvalu", "TW" => "Taiwan", "TZ" => "Tanzania, United Republic of", "UA" => "Ukraine", "UG" => "Uganda", "UM" => "United States Minor Outlying Islands", "US" => "United States", "UY" => "Uruguay", "UZ" => "Uzbekistan", "VA" => "Holy See (Vatican City State)", "VC" => "Saint Vincent and the Grenadines", "VE" => "Venezuela", "VG" => "Virgin Islands, British", "VI" => "Virgin Islands, U.S.", "VN" => "Vietnam", "VU" => "Vanuatu", "WF" => "Wallis and Futuna", "WS" => "Samoa", "YE" => "Yemen", "YT" => "Mayotte", "ZA" => "South Africa", "ZM" => "Zambia", "ZW" => "Zimbabwe", ); //return $country_name[$country_code]; foreach ($country_name as $k1 => $v1) { if ($k1 == $country_code) { return $v1; } } } private function get_http_status_code($code) { $status_code = array( // 1XX "100" => "Continue", "101" => "Switching Protocols", "102" => "Processing", "103" => "Early Hints", // 2XX "200" => "OK", "201" => "Created", "202" => "Accepted", "203" => "Non-Authoritative Information", "204" => "No Content", "206" => "Partial Content", "207" => "Multi-Status", "208" => "Already Reported", "226" => "IM Used", // 3XX "300" => "Multiple Choices", "301" => "Moved Permanently", "302" => "Found", "303" => "See Other", "304" => "Not Modified", "305" => "Use Proxy", "306" => "Switch Proxy", "307" => "Temporary Redirect", "308" => "Permanent Redirect", // 4XX "400" => "Bad Request", "401" => "Unauthorized", "402" => "Payment Required", "403" => "Forbidden", "404" => "Not Found", "405" => "Method Not Allowed", "406" => "Not Acceptable", "407" => "Proxy Authentication Required", "408" => "Request Timeout", "409" => "Conflict", "410" => "Gone", "411" => "Length Required", "412" => "Precondition Failed", "413" => "Payload Too Large", "414" => "URI Too Long", "415" => "Unsupported Media Type", "416" => "Range Not Satisfiable", "417" => "Expectation Failed", "418" => "I'm a teapot", "421" => "Misdirected Request", "422" => "Unprocessable Entity", "423" => "Locked", "424" => "Failed Dependency", "426" => "Upgrade Required", "428" => "Precondition Required", "429" => "Too Many Requests", "431" => "Request Header Fields Too Large", "451" => "Unavailable For Legal Reasons", // 5XX "500" => "Internal Server Error", "501" => "Not Implemented", "502" => "Bad Gateway", "503" => "Service Unavailable", "504" => "Gateway Timeout", "505" => "HTTP Version Not Supported", "506" => "Variant Also Negotiates", "507" => "Insufficient Storage", "508" => "Loop Detected", "510" => "Not Extended", "511" => "Network Authentication Required", ); foreach ($status_code as $k1 => $v1) { if ($k1 == $code) { return $v1; } } } //--->private functions > end }