File "BunnyCDN.php"
Full Path: /home/tekvhqgl/public_html/dev2024_old_skip/wp-content/plugins/presto-player/inc/Libraries/BunnyCDN.php
File size: 53.01 KB
MIME-type: text/x-php
Charset: utf-8
<?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
}