Autor Zpráva
lopikol
Profil
Řeším rozlišení připojení. Funguje to jen částečně, jelikož když se připojim přes $production, tak web sice jede jak má, ale vypíše mi to zprávu: Warning: mysql_connect():. Jak se jí zbavit, případně jak by jste to řešili? Řešení přes $_SERVER['SERVER_NAME'] nemohu použít, kvůli automatizaci.

  $development = array( 'localhost', 'root', 'pwd', 'db' );
  
  $production = array( 'localhost', 'root2', 'pwd2', 'db2' );


  if (mysql_connect($development['0'], $development['1'], $development['2'])){
  
      define('DEVELOPMENT_ENVIRONMENT', FALSE);
  
  }elseif (mysql_connect($production['0'], $production['1'], $production['2'])){
  
      define('DEVELOPMENT_ENVIRONMENT', TRUE);
  
  }else{
  
      throw new Exception('Can not connect to the database!');
  
  }
Tori
Profil
lopikol:
Řešení přes $_SERVER['SERVER_NAME'] nemohu použít
Jakžto? Na localhostu si přece můžete ServerName nastavit jak potřebujete, ne?

Jinak mně zatím vždycky stačilo tohle:
$CFG['server'] = ($_SERVER['SERVER_NAME'] == 'localhost' || substr($_SERVER['SERVER_NAME'],0,3) == '127') ? 'devel' : 'production';
Od toho se pak odvíjí nastavení přístupových údajů, logování, error_reporting apod.
YoSarin
Profil
Nechápu jak nastavuješ ty konstanty - při připojení k devel db nastavíš že nejsi v DEVELOPMENT_ENVIROMENT (což podle mě není pravda :) ).
Chybu to vypíše proto, že první pokus o připojení (ten k devel db) selže, protože devel db není na produkci dostupná. Můžeš potlačit výpis chyb (přes @), ale nedoporučuju to - zaděláš si tím na víc problémů...

Spíš bych se vydal cestou lokálních configů, které budou obsahovat definici větve a odpovídající nastavení. Nevýhodou je, že lokální config pak nemůže být součástí SVN, ale zase obsahuje jen minimum informací a neměl by být problém vytvořit ho znovu.
lopikol
Profil
Tori: JJ použít to mohu, ale $_SERVER['SERVER_NAME'] někde se připojuji na localhost, jinde to je 127.x.x.... jinde zase ip serveru (192.xxxxx) atd, takže bych potřeboval rozlišovat podle připojení k db.

YoSarin: Pravda, mám to prohozené, ale to není problém (zatím).

Chci mít nastavené dvě připojení > localhost a když bude kod na webu.

Když se bude připojovat k db, tak se definuje DEVELOPMENT_ENVIRONMENT, které pak určuje vypisování chyb.
Pokud jsem na localhostu, tak to vypíše jméno chyby, soubor a číslo řádku.
Pokud jsem na webu, tak se error uloží do logu a stránka se např přesměruje na error 500.

Jestli znáte Nette, tak tam to takhle funguje > inspirace, ale prohledával jsem kod a nenašel jsem nic, čeho bych se chytl.
Tori
Profil
lopikol:
Tak zrovna Nette to taky řeší buď autodetekcí podle několika běžných IP, nebo ručním nastavením.
YoSarin
Profil
lopikol:
Jak říkám - mě se tohle osvědčilo řešit globálním a lokálními configy:
config.ini (globální):
promenna = "hodnota"
druha_promenna = "druha hodnota"

Lokální config pro development (config.local.ini):
enviroment = "devel"

db.host = "deve_db_host"
db.user = "devel_user"
db.port = "devel_port"
db.pass = "devel_pass"
db.name = "devel_db_name"

Lokální config pro production (config.local.ini): (analogický k develovému, ale s jinými údaji).
V php to pak provedeš cca takhle:
  $config = parse_ini_file('config.ini');
  if (file_exist('config.local.ini')) {
    $local = parse_ini_file('config.local.ini');
    $config = array_merge($config, $local);
  }
  
  mysql_connect($config['db']['host'], $config['db']['user'], $config['db']['password'], $config['db']['name']);
  define('ENVIRONMENT', $config['enviroment']);
lopikol
Profil
YoSarin:
Díky to je dobrej nápad, ale ještě jeden problém. Tvůj příklad znamené, že budu muset bud mazat nebo vytvářet config.local.ini, což moc automatické není :(
lopikol
Profil
Prosim vás. Vysvětlí mi někdo co znamenaní ty : a ?
$addrs[] = isset($_SERVER['SERVER_ADDR']) ? $_SERVER['SERVER_ADDR'] : $_SERVER['LOCAL_ADDR'];


Děkuji
Tori
Profil
To je zkrácený zápis if - else, Odkaz
YoSarin
Profil
lopikol:
Mazat nebo vytvářet - na devel stroji/virtualhostu budeš mít jedno nastavení, na produkčním stroji/virtualhostu druhé. Obojí vytvoříš jen jednou...

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0