Ich kann keinen Weg finden, der mir einfach erlaubt, eine neue Datei zu erstellen, sie als INI-Datei zu behandeln (nicht php.ini oder ähnliches ... eine separate INI-Datei pro Benutzer), und erstellen/löschen Sie Werte mit PHP. PHP scheint keine einfache Möglichkeit zu bieten, eine INI-Datei zu erstellen und Werte zu lesen/schreiben/löschen. Bisher wurde alles nur "gelesen" - nichts über das Erstellen von Einträgen oder die Manipulation von Schlüsseln/Werten.Ini-Datei erstellen, Werte in PHP schreiben
Antwort
folgende Code-Schnipsel gefunden aus den Kommentaren der PHP-Dokumentation:
function write_ini_file($assoc_arr, $path, $has_sections=FALSE) {
$content = "";
if ($has_sections) {
foreach ($assoc_arr as $key=>$elem) {
$content .= "[".$key."]\n";
foreach ($elem as $key2=>$elem2) {
if(is_array($elem2))
{
for($i=0;$i<count($elem2);$i++)
{
$content .= $key2."[] = \"".$elem2[$i]."\"\n";
}
}
else if($elem2=="") $content .= $key2." = \n";
else $content .= $key2." = \"".$elem2."\"\n";
}
}
}
else {
foreach ($assoc_arr as $key=>$elem) {
if(is_array($elem))
{
for($i=0;$i<count($elem);$i++)
{
$content .= $key."[] = \"".$elem[$i]."\"\n";
}
}
else if($elem=="") $content .= $key." = \n";
else $content .= $key." = \"".$elem."\"\n";
}
}
if (!$handle = fopen($path, 'w')) {
return false;
}
$success = fwrite($handle, $content);
fclose($handle);
return $success;
}
Verbrauch:
$sampleData = array(
'first' => array(
'first-1' => 1,
'first-2' => 2,
'first-3' => 3,
'first-4' => 4,
'first-5' => 5,
),
'second' => array(
'second-1' => 1,
'second-2' => 2,
'second-3' => 3,
'second-4' => 4,
'second-5' => 5,
));
write_ini_file($sampleData, './data.ini', true);
Viel Glück!
Nach 'if (! Fwrite ($ handle, $ content)) {' sollte der Datei-Handle geschlossen werden. –
Auch gibt es einen Fehler im Code, wenn Abschnitte nicht verwendet wird, sollte die Variable $ key2 $ Schlüssel sein – kjetilh
Dies ist keine offizielle Lösung, nur wie Ihr Kommentar ist kein offizieller Kommentar von Stack-Überlauf. –
Ich kann nicht verbürgen, wie gut es funktioniert, aber es gibt einige Vorschläge für die Umsetzung das Gegenteil von dem parse_ini_file()
(d write_ini_file
, die Funktion nicht ein Standard PHP ist) auf der Dokumentationsseite für parse_ini_file
.
können Sie write_ini_file
verwenden, um die Werte in eine Datei zu senden, parse_ini_file
sie zurück in lesen - ändern Sie das assoziative Array, dass parse_ini_file
zurückkehrt und dann die modifizierte Array mit write_ini_file
in die Datei schreiben zurück.
Funktioniert das für Sie?
in diesem Teil des Codes:
else {
foreach ($assoc_arr as $key=>$elem) {
if(is_array($elem))
{
for($i=0;$i<count($elem);$i++)
{
$content .= $key2."[] = \"".$elem[$i]."\"\n";
}
}
else if($elem=="") $content .= $key2." = \n";
else $content .= $key2." = \"".$elem."\"\n";
}
}
$ key2 muss von $ key ersetzt werden oder würden Sie leere Schlüssel in Ihrem ini
+1, Ja, Sie haben Recht –
PEAR hat zwei (Einheit getestet) Pakete, die das tun, finden Aufgabe, die Sie sehnen sich nach:
- Config_Lite - ideal, wenn Sie nur wollen
.ini
Dateien - Config - liest auch
.php
und.xml
Dateien
Ich würde eher gut getesteten Code verwenden als mein eigenes Schreiben.
+1 für getestete/unterstützte Lösung –
Ich benutze dies, und es scheint
function listINIRecursive($array_name, $indent = 0)
{
global $str;
foreach ($array_name as $k => $v)
{
if (is_array($v))
{
for ($i=0; $i < $indent * 5; $i++){ $str.= " "; }
$str.= " [$k] \r\n";
listINIRecursive($v, $indent + 1);
}
else
{
for ($i=0; $i < $indent * 5; $i++){ $str.= " "; }
$str.= "$k = $v \r\n";
}
}
}
es gibt den Text zu arbeiten, zu einer INI-Datei
Ihr Snippet schlägt fehl, wenn $ array_name ein mehrdimensionales Array enthält. Das heißt, wenn das übergeordnete Array eine Tiefe von 3 oder mehr aufweist. – Tivie
auf der Grundlage der oben genannten Antworten schreiben ich diese Klasse geschrieben, die nützlich sein könnten. Für PHP 5.3 kann aber leicht an frühere Versionen angepasst werden.
class Utils
{
public static function write_ini_file($assoc_arr, $path, $has_sections)
{
$content = '';
if (!$handle = fopen($path, 'w'))
return FALSE;
self::_write_ini_file_r($content, $assoc_arr, $has_sections);
if (!fwrite($handle, $content))
return FALSE;
fclose($handle);
return TRUE;
}
private static function _write_ini_file_r(&$content, $assoc_arr, $has_sections)
{
foreach ($assoc_arr as $key => $val) {
if (is_array($val)) {
if($has_sections) {
$content .= "[$key]\n";
self::_write_ini_file_r(&$content, $val, false);
} else {
foreach($val as $iKey => $iVal) {
if (is_int($iKey))
$content .= $key ."[] = $iVal\n";
else
$content .= $key ."[$iKey] = $iVal\n";
}
}
} else {
$content .= "$key = $val\n";
}
}
}
}
- 1. Schreiben Subscript Werte In VBA
- 2. Jsoncpp Float Werte falsch schreiben
- 3. Schreiben Integer-Werte in binäre Datei
- 4. Werte in Datei nach Spalten schreiben
- 5. Kann TRegistry REG_NONE-Werte schreiben?
- 6. PHP Validieren WKT-Werte
- 7. PHP Arrays Werte
- 8. PHP-Skript nicht erstellen und eine JSON-Datei schreiben
- 9. Schreiben von PHP-Funktionen
- 10. PHP Objekte inline schreiben
- 11. Schreiben Sie eine PHP-Datei in eine PHP
- 12. PHP Lesen Schreiben Datei
- 13. PHP - fehlgeschlagen schreiben
- 14. PHP $ _POST Werte
- 15. Doppelte Werte in PHP Array
- 16. Globale/sitzungsbezogene Werte in PHP
- 17. Werte von Radiobutton in PHP
- 18. $ _POST Werte in PHP auslesen
- 19. Sitemap mit PHP schreiben
- 20. Schreiben Sie eine .htaccess-Datei in PHP?
- 21. So schreiben Sie in Fehlerprotokolldatei in PHP
- 22. Werte in PHP von JavaScript erhalten
- 23. Werte in mysql Trigger mit PHP ändern?
- 24. iOS Metal - Lesen alter Werte beim Schreiben in Textur
- 25. Werte in der JSON-Datei ändern (Dateien schreiben)
- 26. Verhindern, dass PHPExcel beim Schreiben in Datei Werte berechnet
- 27. Kann keine Werte in ein globales PHP-Array von einer Klassenmethode schreiben
- 28. PHP Werte von JSON
- 29. PHP - In Datei schreiben funktioniert nicht
- 30. schreiben einfügen Anweisung für Bild in PHP
Wenn Sie sagen "pro Benutzer", was meinst du? Per Verwendung der PHP-Anwendung? –
Warum benötigen Sie eine INI-Datei pro Benutzer? sollte diese Art von Information nicht in einer Datenbank gespeichert werden? – Omnipresent
Nun, ich meinte, ich möchte eine Ini-Datei für jeden Benutzer der gleichen PHP-Anwendung festgelegt. Zum Beispiel, chad.ini, jeff.ini, mary.ini, anne.ini – netrox