2014-12-15 3 views
8

Ich habe eine benutzerdefinierte Konfigurationsdatei in meiner CI-Anwendung. Im Admin-Panel meiner Webanwendung möchte ich ein Formular haben, mit dem ich die Werte des Konfigurationsarrays der benutzerdefinierten Datei ändern kann. Mein Problem ist jetzt, dass die Funktion write_file immer false zurückgibt und ich weiß nicht warum. Ich bin ziemlich sicher, dass ich den Pfad in der Funktion richtig schreibe und das Konfigurationsverzeichnis nicht schreibgeschützt ist (das ist wamp, also windows). Die Datei existiert definitiv. Was mache ich falsch?Warum ist die Datei, die ich versuche zu schreiben, "nicht vorhanden"?

Dies ist application/controllers/config/assets.php

$file = FCPATH . 'application\config\assets_fe.php'; 
if(is_writable($file)) { 
    $open = fopen($file, 'W'); 
    if(!fwrite($open, $frontend)){ 
     echo "Could not write file!"; 
    } else { 
     echo "File written!"; 
    } 
} else { 
    echo "File not writable!"; 
} 

Dies ist ein Screenshot der Datei in seiner Lage in dem Windows Explorer. config folder

Ich habe die folgenden Dateipfade in der write_file Funktion versucht:

write_file(FCPATH.'application/config/assets_fe.php', $frontend, 'W'); 
write_file('application/config/assets_fe.php', $frontend, 'W'); 
write_file('./application/config/assets_fe.php', $frontend, 'W'); 

Keine der oben genannten Dateipfade gearbeitet haben ... es etwas anderes sein könnte?

FYI: FCPATH = "W: \ wamp \ www \ zeus \" und es wird von CI Front Controller definiert, um den Pfad dieser Datei zurückzugeben.

Update: Ich habe versucht, nur die native PHP-Version und es heißt, dass die Datei oder das Verzeichnis nicht existiert. Vielleicht benutze ich den falschen Weg. Was sollte es sein?

+1

config schreibbar? –

+1

Ja, Config ist beschreibbar. – ShoeLace1291

+1

Bitte korrigieren Sie den Code in Ihrer Frage. –

Antwort

6

Die Antwort ist einfach, Sie übergeben einen ungültigen Modus, Captial W, zu fopen. Es sollte ein Kleinbuchstabe w sein. Was passiert, ist gibt false zurück, dann übergeben Sie das an fwrite anstelle einer Ressource, wodurch es false zurückgibt.

$open = fopen($file, 'W'); 
Ändern Sie einfach

zu

$open = fopen($file, 'w'); 

Sie auch das Ergebnis der fopen

if(!$open) 
    echo 'Could not open file'; 

Sie auch file_put_contents könnten versuchen, testen könnte, da Sie etwas nicht tun, sonst w/das Dateihandle.

$file = FCPATH.'application\config\assets_fe.php'; 
if(is_writable($file)){ 
    if(!file_put_contents($file, $frontend)) { 
     echo "Could not write file!"; 
    } else { 
     echo "File written!"; 
    } 
} else { 
    echo "File not writable!"; 
} 
+1

Oh, übergeben "W" in der Tat produziert die falsche Fehlermeldung '" Fehler beim Öffnen des Streams: Keine solche Datei oder Verzeichnis in "'. –

0

Sie müssen set_item verwenden, um in die Konfigurationsdatei zu schreiben.

$this->config->set_item('item_name', 'item_value'); 

für Arrays:

$this->config->set_item('ftp_frontend', array(...)); 

hier Sein in config.

+2

Aber das wird nicht die eigentliche Datei speichern, die Sie einfach weiter unten im Skript verwenden können. – ShoeLace1291

0

Ich glaube nicht, dass Sie in der Datei config.php schreiben müssen.Statt in config.php Datei von writting, Sie Benutzer CI Konfigurationsklasse kann wie Wert von Konfigurationsdatei außer Kraft zu setzen unter

für einen Artikel

$this->config->set_item('item_name', 'item_value'); 

Für Array Artikel

$this->config->set_item('item_array', array(...)); 
Verwandte Themen