fread() - Array bilden?

Major Gorth

Mitglied
Hallo.

Wie ich in einem anderen Thread schrieb, arbeite ich an einem Chat.

Ich möchte die Konfiguration in einer Datei "g7chat.conf" speichern, die dann in $main->settings gespeichert wird.

Lesender Code:
PHP:
$settingsFile=fopen('g7chat.conf','r+');
$this->settings=fread($settingsFile,filesize('g7chat.conf'));

In der g7chat.conf:

PHP:
array(
	'actions'=>array(
		'chat' => 'actions/chat.action.php'
		);
	'commands'=>array(
			);
	'custom'=>array(
		);
	'dbServer' => 'xxx',
	'dbUser' => 'xxx',
	'dbPass' => 'xxx',
	'dbName' => 'xxx'
);

Es wird aber kein Array $main->settings[] gebildet.

Ich habe vor $main->settings['actions'][x] zugänglich für die Addonentwickler zu machen (wie andere Sachen in der Kernklasse).

Wieso funktioniert das nicht und gibt es einen Workaround?
 
PHP:
$config = array(
    'actions'=>array(
        'chat' => 'actions/chat.action.php'
        );
    'commands'=>array(
            );
    'custom'=>array(
        );
    'dbServer' => 'xxx',
    'dbUser' => 'xxx',
    'dbPass' => 'xxx',
    'dbName' => 'xxx'
);

return $config;

PHP:
# [...]
$this->settings = include_once('config.php');
# [...]

So sollte es funktionieren.

[phpf]fread[/phpf] liest zwar den Inhalt ein, wird ihn aber nicht ausführen.
 
Eine andere Möglichkeit wäre, die Konfigurationen in einer Konfigurationsdatei (.ini) zu speichern und dann mit parse_ini_file() auszuwerten.
Auf der verlinkten Seite ist auch ein anschauliches Beispiel vorhanden.
 
Bei der von Loomes genannten Variante solltest du aber dafür sorgen, dass man von außen nicht auf die ini Datei zugreifen kann, da diese im Klartext ausgeliefert wird.

Das heißt Zugriff per htaccess verweigern oder außerhalb das Document Root lagern.
 
Ich danke für die vielen Lösungen. ;)

Ich werde mich für die include-Methode entscheiden. :D

PS: Gibt es nicht evtl. eine Methode, wo PHP dann den per fread() eingelesenen Inhalt auch als PHP parst?
 
Ich würde auch eher auf die Funktion parse_ini-file zurückgreifen. Kannst um sie zu schützen ja eine config.ini.php draus machen und in den Kopf folgendes schreiben:
PHP:
; <?php die('Immer diese Hacker!'); ?>
Versucht nun jemand auf diese Datei zuzugreifen werden alle aktionen abgebrochen und dr nette kleine Spruch ausgegeben.
MfG, Andy

PS: Das Semikolon am Anfang wird von parse_ini_file() als Kommentar behandelt.
 
Danke.

Der Fehler ist beseitigt, allerdings wird beim Verbindungsaufbau nicht mein übergebener Parameter $this->settings['dbServer'] usw. zur Verbindung benutzt, sondern 'www-data'.
Passwort-Parameter wird von mir auch übergeben, aber nicht geparst.

Bzw. es werden gar keine Parameter geparst.

Kann das daran liegen, dass mysql_connect keine Variablen als Parameter annimmt?
 
Doch tut es. Könntest du mal deinen Quelltext zeigen? Dann könnten wir weiterschauen.
 
Auszug aus der Database.class.php (Konstruktor):
PHP:
    public function __construct($dbServer,$dbUser,$dbPass,$dbName)
    {
        $this->connection=mysql_connect($dbServer,$dbUser,$dbPass,true);
        $this->DB=mysql_select_db($dbName,$this->connection);
    }

In der Core.class.php übergebene Parameter:
PHP:
    public function initDB()
    {
        self::$DBObj=new Database($this->settings['dbServer'],$this->settings['dbUser'],$this->settings['dbPass'],$this->settings['dbName']);
    }
 
PHP:
public function initDB()
    {
        echo '<pre>'.print_r($this->settings, true).'</pre>';
        self::$DBObj=new Database($this->settings['dbServer'],$this->settings['dbUser'],$this->settings['dbPass'],$this->settings['dbName']);
    }

Teste mal auf diese Weise ob die Variablen überhaupt gefüllt sind.
 
Zurück