EndpointConfig.php 2.1KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <?php
  2. namespace Aliyun\Core\Regions;
  3. class EndpointConfig {
  4. private static $loaded = false;
  5. public static function load() {
  6. if(self::$loaded) {
  7. return;
  8. }
  9. $endpoint_filename = dirname(__FILE__) . DIRECTORY_SEPARATOR . "endpoints.xml";
  10. $xml = simplexml_load_string(file_get_contents($endpoint_filename));
  11. $json = json_encode($xml);
  12. $json_array = json_decode($json, TRUE);
  13. $endpoints = array();
  14. foreach ($json_array["Endpoint"] as $json_endpoint) {
  15. # pre-process RegionId & Product
  16. if (!array_key_exists("RegionId", $json_endpoint["RegionIds"])) {
  17. $region_ids = array();
  18. } else {
  19. $json_region_ids = $json_endpoint['RegionIds']['RegionId'];
  20. if (!is_array($json_region_ids)) {
  21. $region_ids = array($json_region_ids);
  22. } else {
  23. $region_ids = $json_region_ids;
  24. }
  25. }
  26. if (!array_key_exists("Product", $json_endpoint["Products"])) {
  27. $products = array();
  28. } else {
  29. $json_products = $json_endpoint["Products"]["Product"];
  30. if (array() === $json_products or !is_array($json_products)) {
  31. $products = array();
  32. } else if (array_keys($json_products) !== range(0, count($json_products) - 1)) {
  33. # array is not sequential
  34. $products = array($json_products);
  35. } else {
  36. $products = $json_products;
  37. }
  38. }
  39. $product_domains = array();
  40. foreach ($products as $product) {
  41. $product_domain = new ProductDomain($product['ProductName'], $product['DomainName']);
  42. array_push($product_domains, $product_domain);
  43. }
  44. $endpoint = new Endpoint($region_ids[0], $region_ids, $product_domains);
  45. array_push($endpoints, $endpoint);
  46. }
  47. EndpointProvider::setEndpoints($endpoints);
  48. self::$loaded = true;
  49. }
  50. }