IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Веб-программирование (http://www.imho.ws/forumdisplay.php?f=29)
-   -   Проблема с получением конфигов (http://www.imho.ws/showthread.php?t=107703)

winsov001 30.08.2006 02:13

Проблема с получением конфигов
 
Подскажите пожалуйста.
Имеется класс для работы с базой данных myDB (mybd.php). Есть так же файл common.php
с настройками вида:
PHP код:

<?php     
require_once('mydb.php');     
$DB_MYSQL['dbhostname']='localhost';   
$DB_MYSQL['dbusername']='username';   
$DB_MYSQL['dbpassword']='password';   
$DB_MYSQL['dbname']='dbname';    
 ...
?>

mydb.php

PHP код:

<?php 
class myDB 

        var 
$hostname
        var 
$username
        var 
$password
         
        var 
$link
        var 
$result
         
        function 
myDB($hostname,$username,$password
        { 
                
$this->hostname=$hostname
                
$this->username=$username
                
$this->password=$password
        } 
        function 
Open() 
        { 
                
$this->link=@mysql_connect($this->hostname,$this->username,$this->password); 
                 
                if(!
$this->link
                { 
                        
$handle fopen("log.txt""a+"); 
                        
fwrite($handledate('d/m/Y H:i: ').mysql_error()."\r\n".$this->hostname."; ".$this->username."; 
"
.$this->password."\r\n---\r\n"); 
                        
fclose($handle); 
                } 
        } 
... 

?>

Далее в каком-либо файле скрипта из друго класса:

PHP код:

<?php 
require_once('common.php'); 

class 
CSessions 

        var 
$mydb
         
        function 
CSessions($DB_MYSQL
        { 
                
$this->mydb=new myDB($DB_MYSQL['dbhostname'],$DB_MYSQL['dbusername'],$DB_MYSQL['dbpassword']); 
                
$this->mydb->Open(); 
                
$this->mydb->SelectDB($DB_MYSQL['dbname']); 
        } 
... 

?>

В итоге время от времени получаем ошибку:

Can't connect to local MySQL server through socket '/tmp/mysql.sock'

И запись в log.txt (идет из mydb.php)

30/08/2006 00:24:
; ;
---

Т.е. класс myDB не получает данных из массива $DB_MYSQL
$DB_MYSQL['dbhostname']='localhost';
$DB_MYSQL['dbusername']='username';
$DB_MYSQL['dbpassword']='password';

В чем может быть причина. Повторюсь: такое бывает в 10% из 100. Но регулярно. Версия PHP 4.4.2

Очень надеюсь на помощь. Спасибо!

Naked 30.08.2006 07:58

я могу ошибаться, но если ты используешь массив $DB_MYSQL в какой-нибудь функции, то он там берется как локальный для функции, а чтобы он в функции был тоже глобальным, нужно в самой функции сделать:
public $DB_MYSQL;
точно не уверен, что правильно все понял, и правильно написал, но копать нужно в эту сторону...

Kvarx 30.08.2006 11:12

Naked,
Наверняка так и есть.

winsov001
C классами на пхп еще не работал, только на С++. Возможно, что надо написать global $DB_MYSQL; Либо в классе CSessions или в функции.

Псих 30.08.2006 11:23

Цитата:

Naked:
public $DB_MYSQL;
Тут ты немного ошибся.. в 4 php нет такого понятися как public. Там все переменные и методы есть public.
Тут прав Kvarx, чтобы юзать переменную $DB_MYSQL внутри методов (функций) надо сделать
PHP код:

global $DB_MYSQL


EvroStandart 30.08.2006 11:50

Цитата:

winsov001:
время от времени
Это как? При конкретном действии всегда? Или один раз сработает, второй раз нет?
А вообще, лучше сделать не массив, а отдельные переменные через define. Тогда точно везде их увидиш. Или клас с настройками и каждый раз к нему обращаться.


Часовой пояс GMT +4, время: 03:26.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.