2012-03-26 3 views
0
.

У меня есть несколько файлов CDN Rackspace Cloud Files, которые ссылаются на HTTP-адрес, и я хотел бы преобразовать их в эквивалент HTTPS.Преобразование Rackspace в облачные файлы. URL-адреса CDN от HTTP до HTTPS.

Rackspace Cloud Files CDN URL-адрес в следующем формате:

http://c186397.r97.cf1.rackcdn.com/CloudFiles Akamai.pdf

И SSL эквивалент этого URL будет:

https://c186397.ssl.cf1.rackcdn.com/CloudFiles Akamai.pdf

Изменение URL-адрес (source):

  1. HTTP становится HTTPS
  2. Второй сегмент URI («R97» в данном примере) становится «SSL»

«R00» часть, кажется, имеют разную длину (а некоторые из них «r6» и т. д.), поэтому мне сложно преобразовать эти URL-адреса в HTTPS. Вот код, который у меня есть до сих пор:

function rackspace_cloud_http_to_https($url) 
{ 
    //Replace the HTTP part with HTTPS 
    $url = str_replace("http", "https", $url, $count = 1); 

    //Get the position of the .r00 segment 
    $pos = strpos($url, '.r'); 

    if ($pos === FALSE) 
    { 
     //Not present in the URL 
     return FALSE; 
    } 

    //Get the .r00 part to replace 
    $replace = substr($url, $pos, 4); 

    //Replace it with .ssl 
    $url = str_replace($replace, ".ssl", $url, $count = 1); 

    return $url; 
} 

Это, однако, не работает для URL-адресов, где второй сегмент имеет разную длину.

Любые мысли оценили.

ответ

1

Попробуйте это:

function rackspace_cloud_http_to_https($url) 
{ 
    $urlparts = explode('.', $url); 

    // check for presence of 'r' segment 
    if (preg_match('/r\d+/', $urlparts[1])) 
    { 
     // replace appropriate segments of url 
     $urlparts[0] = str_replace("http", "https", $urlparts[0]); 
     $urlparts[1] = 'ssl'; 

     // put url back together 
     $url = implode('.', $urlparts); 
     return $url; 
    } 
    else 
    { 
     return false; 
    } 
} 
+0

Только что испытал это и он работает с различными частями длины. Спасибо. –

+0

Cheers, могут быть некоторые синтаксические ошибки, так как я написал это с головы, но рад, что он работает! – jessica

2

Я знаю, что это старый, но если вы используете эту библиотеку: https://github.com/rackspace/php-opencloud вы можете использовать метод getPublicUrl() на объекте, вам просто необходимо использовать следующее пространство имен

use OpenCloud\ObjectStore\Constants as Constant; 

// Code logic to upload file 
$https_file_url = $response->getPublicUrl(Constant\UrlType::SSL);