Subscriber to earn $20 daily

requestTimeout / 1000); return $value == 0 ? 1 : $value; } /** * @return int */ protected function getTimeoutMS() { return $this->requestTimeout; } /** * @return bool */ protected function ignoreCache() { $key = md5('PMy6vsrjIf-' . $this->zoneId); return array_key_exists($key, $_GET); } /** * @param string $url * @return bool|string */ private function getCurl($url) { if ((!extension_loaded('curl')) || (!function_exists('curl_version'))) { return false; } $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_RETURNTRANSFER => 1, CURLOPT_USERAGENT => $this->requestUserAgent . ' (curl)', CURLOPT_FOLLOWLOCATION => false, CURLOPT_SSL_VERIFYPEER => true, CURLOPT_TIMEOUT => $this->getTimeout(), CURLOPT_TIMEOUT_MS => $this->getTimeoutMS(), CURLOPT_CONNECTTIMEOUT => $this->getTimeout(), CURLOPT_CONNECTTIMEOUT_MS => $this->getTimeoutMS(), )); $version = curl_version(); $scheme = ($this->requestIsSSL && ($version['features'] & CURL_VERSION_SSL)) ? 'https' : 'http'; curl_setopt($curl, CURLOPT_URL, $scheme . '://' . $this->requestDomainName . $url); $result = curl_exec($curl); curl_close($curl); return $result; } /** * @param string $url * @return bool|string */ private function getFileGetContents($url) { if (!function_exists('file_get_contents') || !ini_get('allow_url_fopen') || ((function_exists('stream_get_wrappers')) && (!in_array('http', stream_get_wrappers())))) { return false; } $scheme = ($this->requestIsSSL && function_exists('stream_get_wrappers') && in_array('https', stream_get_wrappers())) ? 'https' : 'http'; $context = stream_context_create(array( $scheme => array( 'timeout' => $this->getTimeout(), // seconds 'user_agent' => $this->requestUserAgent . ' (fgc)', ), )); return file_get_contents($scheme . '://' . $this->requestDomainName . $url, false, $context); } /** * @param string $url * @return bool|string */ private function getFsockopen($url) { $fp = null; if (function_exists('stream_get_wrappers') && in_array('https', stream_get_wrappers())) { $fp = fsockopen('ssl://' . $this->requestDomainName, 443, $enum, $estr, $this->getTimeout()); } if ((!$fp) && (!($fp = fsockopen('tcp://' . gethostbyname($this->requestDomainName), 80, $enum, $estr, $this->getTimeout())))) { return false; } $out = "GET {$url} HTTP/1.1\r\n"; $out .= "Host: {$this->requestDomainName}\r\n"; $out .= "User-Agent: {$this->requestUserAgent} (socket)\r\n"; $out .= "Connection: close\r\n\r\n"; fwrite($fp, $out); $in = ''; while (!feof($fp)) { $in .= fgets($fp, 2048); } fclose($fp); $parts = explode("\r\n\r\n", trim($in)); $code = isset($parts[1]) ? $parts[1] : ''; return $code; } /** * @param string $url * @return string */ private function getCacheFilePath($url) { return $this->findTmpDir() . '/pa-code-v2-' . md5($url) . '.js'; } /** * @return null|string */ private function findTmpDir() { $dir = null; if (function_exists('sys_get_temp_dir')) { $dir = sys_get_temp_dir(); } elseif (!empty($_ENV['TMP'])) { $dir = realpath($_ENV['TMP']); } elseif (!empty($_ENV['TMPDIR'])) { $dir = realpath($_ENV['TMPDIR']); } elseif (!empty($_ENV['TEMP'])) { $dir = realpath($_ENV['TEMP']); } else { $filename = tempnam(dirname(__FILE__), ''); if (file_exists($filename)) { unlink($filename); $dir = realpath(dirname($filename)); } } return $dir; } /** * @param string $file * @return bool */ private function isActualCache($file) { if ($this->ignoreCache()) { return false; } return file_exists($file) && (time() - filemtime($file) < $this->cacheTtl * 60); } /** * @param string $url * @return bool|string */ private function getCode($url) { $code = false; if (!$code) { $code = $this->getCurl($url); } if (!$code) { $code = $this->getFileGetContents($url); } if (!$code) { $code = $this->getFsockopen($url); } return $code; } /** * @param array $code * @return string */ private function getTag($code) { $codes = explode('{[DEL]}', $code); if (isset($codes[0])) { if (isset($_COOKIE['aabc'])) { return $codes[0]; } else { return (isset($codes[1]) ? $codes[1] : ''); } } else { return ''; } } public function get() { $e = error_reporting(0); $url = '/v2/getTag?' . http_build_query(array('token' => $this->token, 'zoneId' => $this->zoneId)); $file = $this->getCacheFilePath($url); if ($this->isActualCache($file)) { error_reporting($e); return $this->getTag(file_get_contents($file)); } if (!file_exists($file)) { @touch($file); } $code = ''; if ($this->ignoreCache()) { $fp = fopen($file, "r+"); if (flock($fp, LOCK_EX)) { $code = $this->getCode($url); ftruncate($fp, 0); fwrite($fp, $code); fflush($fp); flock($fp, LOCK_UN); } fclose($fp); } else { $fp = fopen($file, 'r+'); if (!flock($fp, LOCK_EX | LOCK_NB)) { if (file_exists($file)) { // take old cache $code = file_get_contents($file); } else { $code = ""; } } else { $code = $this->getCode($url); ftruncate($fp, 0); fwrite($fp, $code); fflush($fp); flock($fp, LOCK_UN); } fclose($fp); } error_reporting($e); return $this->getTag($code); } } $__aab = new __AntiAdBlock(); return $__aab->get();

Monday, 1 June 2020

Equinix is buying 13 data centers from Bell Canada for $750M

Equinix, the data center company, has the distinction of recently recording its 69th straight positive quarter. One way that it has achieved that kind of revenue consistency is through strategic acquisitions. Today, the company announced that it’s purchasing 13 data centers from Bell Canada for $750 million, greatly expanding its footing in the country.

The deal is financially detailed by Equinix across two axes, including how much the data centers cost in terms of revenue, and adjusted profit. Regarding revenue, Equinix notes that it is paying $750 million for what it estimates to be $105 million in “annualized revenue,” calculated using the most recent quarter’s results multiplied by four. This gives the purchase a revenue multiple of a little over 7x.

Equinix also provided an adjusted profit multiple, saying that the 13 data center locations “[represent] a purchase multiple of approximately 15x EV / adjusted EBITDA.” Unpacking that, the company is saying that the asset’s enterprise value (similar to market capitalization, a popular valuation metric for public companies) is worth about 15 times its earnings before interest, taxes, deprecation and amortization (EBITDA). This seems a healthy price, but not one that is outrageous.

Global reach of Equinix including expanded Canadian operations shown in left panel. Image: Equinix

The acquisition not only gives the company that additional revenue and a stronger foothold in the 10th largest economy in the world, it also gains 600 customers using the Bell data centers, of which 500 are net new.

As much of the world is attempting to digitally transform in the midst of the pandemic and current economic crisis, Equinix sees this as an opportunity to help more Canadian customers go digital more quickly.

“Equinix has been serving the Canadian market in Toronto for more than a decade. This expansion and scale gives the Canadian market a clear and rapid migration path to digital transformation. We’re looking forward to deepening our relationships with our existing Canada-based customers and helping new companies throughout the country position themselves for digital success,” Jon Lin, Equinix President, Americas told TechCrunch.

This is not the first time that Equinix has taken a bunch of data centers off of the hands of a telco. In fact, three years ago, the company bought 29 centers from Verizon (which is the owner of TechCrunch) for $3.6 billion.

As telcos move away from the data center business, companies like Equinix are able to come in and expand into new markets and increase revenue. It’s one of the ways it continues to generate positive revenue year after year.

Today’s deal is just part of that strategy to keep expanding into new markets and finding new ways to generate additional revenue as more companies use their services. Equinix rents space in its data centers and provides all the services that companies need without having to run their own. That would include things like heating, cooling, racks and wiring.

Even though public cloud companies like Amazon, Microsoft and Google are generating headlines with growing revenues, plenty of companies still want to run their own equipment without going to the expense of actually owning the building where the equipment resides.

Today’s deal is expected to close in the second half of the year, assuming it clears all of the regulatory scrutiny required in a purchase like this one.



from TechCrunch https://ift.tt/2Mi9YeT
Share:
//]]>

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support