webserver çapında kurulacak Google Maps API tuşları, (env var gibi? içeride apache?)

3 Cevap php

Ben birçok sanal konaklar ve her birkaç etki alanı adları ile kayıtlı olan bir web sitesi var (biten. Org,. De), site1.mysite.de, site2.mysite.org

Sonra web sunucusu üzerinde kullanılan birkaç programlama dilleri (perl ve php) göre farklı çiftleşmiş sistemleri var.

Google Maps Api her sankon için benzersiz bir Google Maps API anahtarı gerektirir.

Benim kod içeriden arayabileceğiniz bir web sunucusu geniş değişken $ goomapkey gibi bir şey olmasını istiyorum.

PHP kodu, Şimdi ben gibi kıytırık vaka analizi çözüm var

 $domain = substr($_SERVER['SERVER_NAME'], -3);
 if (".de" == $domain){
   //if ("xxxxxx" eq substr($ENV{SERVER_NAME}, 0, 5)){

   //  $gookey = "ABQIAAA...";
   //} else {
     //site1.de   
     $gookey = "ABQIAAAA1Js...";
   //}
 } elseif ("dev" == substr($_SERVER['SERVER_NAME'], 0, 3)){
   //dev.mysite.org
   $gookey = "ABQIAAAA1JsSb...";
 } else {
   //www.mysite.org
   $gookey = "ABQIAAAA1JsS...";
   //TODO: Add more keys for each virtual host, for my.machinename.de, IP-address based URL, ...
 }

... Benim php tabanlı CMS içeride. A-olmayan ideal bir çözüm, çünkü öyle, php-sadece, ve ben hala CMS içinde çeşitli html şablonları ayarlamak zorunda ve çok sayıda vaka vardır.

Ben Google Maps API anahtarı herhangi bir php sayfa şablonu kod inşa ve değerlendirilmeden önce * erken isteği döngüde isteği inceler Apache web sunucusu tarafından belirlenen olmak istiyorum.

  • bir ortam değişkeni iyi bir çözümdür?

  • hangi teknolojinin $ goomapkey değişkeni ayarlamak için kullanılmalıdır?

Ben mod_perl2 Apache isteği işleyicisi tercih ediyorum, ama belgeleri (geçmişte birçok API değişiklik) karıştırıyor. Hangi Apache modülü ben kullanabilir miyim?

  • Bir Apache yerleşik modül olduğunu aynı şeyi yapar?

3 Cevap

Elbette bu sadece bir kaç etki için biraz overkill? Yani, tabii ki her etki alanı için bir anahtar için başvuru sürecinde gitmek zorunda kalmıştım, neden sadece bağımsız olarak her projede her tuşa kullanmak değil mi?

En zarif çözüm artık bir API anahtarı gerektirir Google Maps API v3, geçiş yapmak olacaktır.

Bir ortam değişkeni iyi bir çözüm var mı?

Ben API tuşları (kimse "görünüm kaynağı" ile görebilirsiniz) gizli değildir, bu yüzden belli belirsiz mantıklı görünüyor dışında, bir "anahtar" saklamak için ortam değişkenleri kullanmakta tereddüt ediyorum.

Eğer "iyi" bir fikir farklı bir konudur bence olsun - bir katman ihlali, ama böylece her şey bulunuyor. Web framework (veya her ne kullanıyorsanız) sitesinde config çeşit varsa, bu koymak için açık bir yerdir. Eğer yapılandırma kodu ortam değişkeni yüklemek olabilir, ama config tutarsanız o zaman daha sonra değiştirmek çok daha kolay

Gibi bir şey tercih ederim

$apikeys = array(
  "site1.de" => "...",
  "dev.mysite.org" => "...", 
  "www.mysite.org" => "...",
  "" => "...", // default
);

Ardından kod, dizinin üzerinde döngü uzun eki eşleşme bulur ve ilgili anahtarı kullanır. O (hatta gmapapikeys.php yazıyor hangi genapikeys.pl yazabilirsiniz) farklı dil arasında bağlantı noktasına kolay bir avantaja sahiptir. Ben de bir varsayılan anahtarı olan herhangi bir nokta var sanmıyorum - tuşu "Referer" eşleşmiyor, IIRC Google Maps isteğinizi reddeder.

Daha genel bir çözüm hostname (yani de.site1, org.mysite.www) ters olacaktır; Eğer "com.hostingcompany.www / sitem /" olabilir.

Tabii ki, IP adresleri tersten, ve IPv6 eğlenceli bir yüktür. Ama, ya API tuşları desteği varsa emin değilim, bu yüzden alakasız olabilir.

Eğer mod_perl2 yoluyla değişken doldurmak için çalışırsanız, o zaman PHP mevcut olmayacaktır - benzer, PHP dosyaları PERL'de mevcut değildir içerir.

Bir çevre değişkeni iyi bir uzlaşma gibi görünüyor - Zaten veri dosyaları / bir veritabanından comon veri yükleme sürece.

Bir Apache yerleşik modül olduğunu aynı şeyi yapar?

Evet - mod_env ve SetEnv yönergesi

C.