2014-12-15 16 views
8

Ho un file di configurazione personalizzato nella mia applicazione CI. Nel pannello di amministrazione della mia applicazione Web, voglio avere un modulo che posso usare per modificare i valori della matrice di configurazione del file personalizzato. Il mio problema adesso è che la funzione write_file restituisce sempre false e non so perché. Sono abbastanza sicuro che sto scrivendo il percorso nella funzione correttamente e la directory di configurazione non è di sola lettura (questo è wamp, quindi windows). Il file esiste sicuramente. Che cosa sto facendo di sbagliato?Perché il file che sto tentando di scrivere "non esistente"?

Questa è application/controller/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!"; 
} 

Questo è uno screenshot del file nella sua posizione in Windows Explorer. config folder

ho provato i seguenti percorsi di file nella funzione write_file:

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'); 

Nessuno dei percorsi dei file di cui sopra hanno lavorato ... potrebbe essere qualcosa d'altro?

FYI: FCPATH = 'W: \ wamp \ www \ zeus \' ed è definito dal front controller di CI per restituire il percorso di quel file.

Aggiornamento: Ho provato ad utilizzare solo la versione nativa di PHP e sta dicendo che il file o la directory non esiste. Forse sto usando la strada sbagliata. Cosa dovrebbe essere?

+1

config è scrivibile? –

+1

sì, la configurazione è scrivibile. – ShoeLace1291

+1

Per favore, correggi il codice nella tua domanda. –

risposta

6

La risposta è semplice, si passa una modalità non valida, captial W, a fopen. Dovrebbe essere un minuscolo w. Quindi, quello che sta succedendo è che fopen restituisce false, quindi lo passi a fwrite invece che a una risorsa, provocando la restituzione di false.

Basta cambiare

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

a

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

Si potrebbe anche verificare il risultato di fopen

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

Si potrebbe anche provare file_put_contents dal momento che non fai niente altro w/l'handle del file.

$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, passando '" W "' infatti genera il messaggio di errore errato '" impossibile aprire lo stream: nessun file o directory in "". –

0

È necessario utilizzare set_item per scrivere nel file di configurazione.

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

per gli array:

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

La sua qui in config.

+2

Ma questo non salverà il file vero e proprio, ti permetterà di usarlo più avanti nello script. – ShoeLace1291

0

Non penso che sia necessario scrivere nel file config.php.Invece di scrittura in config.php file, è possibile utente classe di configurazione CI di sovrascrivere il valore del file di configurazione, come di seguito

di un singolo articolo

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

Per elemento dell'array

$this->config->set_item('item_array', array(...)); 
Problemi correlati