Creare un file PHP con PHP

  • Creatore Discussione Creatore Discussione Monital
  • Data di inizio Data di inizio

Monital

Utente Attivo
15 Apr 2009
778
2
18
Salve,

devo fare una cosa particolare. Sto creando un file install dove inserendo dei dati in un form(i dati della connesione ald atabase) mi rei il file connect.php

sto usando fopen però ovvaimente il nome delle input me le riconosce come variabili e non mi prende i tag html. come si fa sta cosa? Strnamanete non sono risucito a trovare niente in giro.

posto la bozza del codice

PHP:
if(isset($_POST['Invia']) && !empty($_POST['Invia'])){
$file="connect.php";
$apro=fopen($file,"w");
$stringa="<?php <br> $DBhost = ".$_POST['DBhost'];
fwrite($apro,$stringa);
fclose($apro);
echo "Creato";
}

il file me lo crea ma non come vorrei il file connect.php deve crearsi così

PHP:
<?php
$DBhost=//qua il $_POST['host']
$DBuser=//qua $_POST['host']
//etc....
?>
 
Codice:
if(isset($_POST['Invia']) && !empty($_POST['Invia'])){
$file="connect.php";
$stringa="
<?php
\$DBhost = {$_POST['DBhost']};
\$DBuser = {$_POST['DBuser']};
//etc...
";
file_put_contents($file,$stringa);
echo "Creato";
}
Così? Se non è per uso privato devi filtrare le variabili perché altrimenti si puo inniettare codice php
 
Ultima modifica:
Codice:
if(isset($_POST['Invia']) && !empty($_POST['Invia'])){
$file="connect.php";
$stringa="
<?php
\$DBhost = {$_POST['DBhost']};
\$DBuser = {$_POST['DBuser']};
//etc...
";
file_put_contents($file,$stringa);
echo "Creato";
}
Così? Se non è per uso privato devi filtrare le variabili perché altrimenti si puo inniettare codice php

è un file install per una patch di uno script distribuito free, quindi non viene eseguita sul mio di server ma sul server di chi si vuole installare la patch. cmq si ci metto poco a filtrare la variabile, era per capire come si crea o modifica un file php già esistenste con un istruzione php
 
ok ci sono arrivato

basta usare l'apice singolo
questo epr crearlo da 0.
ho capito anche come sostituire una riga trattandolo come file di testo ed usando questo codice

PHP:
<?php
$nomeFile = 'connect.php';
$file = file($nomeFile,FILE_IGNORE_NEW_LINES);
var_dump($file);
$rigaDaSostituire = '$DBhost = "localhost";';
$rigaDiSostituzione = '$DBhost = "localhost";$DBhost = "pippo";';
$file = array_replace( $file, array_fill_keys(array_keys($file,$rigaDaSostituire),$rigaDiSostituzione) );
file_put_contents($nomeFile,implode("\n",$file));
?>

però ho un problema, non riescoa d andare a capo ne usando <br> ne usando \n e qusto ovviamente perchè sono codici html mentre il testo all'interno del file è php

come posso risolvere?

$DBhost = "pippo";

si deve piazzare dopo

$DBhost = "localhost";
 
Prova con \r\n oppure PHP_EOL
PHP:
$rigaDaSostituire = "\$DBhost = 'localhost';";
$rigaDiSostituzione = "\$DBhost = 'localhost';\r\n\$DBhost = 'pippo';";
 
ok funziona.
però se uso \r\n mi metyte una riga vuota in mezzo, invece basta usare\r .

sbagliavo la sintassi degli apici in sostanza.

Thank!!
 
premetto che sono quasi certo di sbagliare metodo. ho letto qualcosa al volo al riguardo dei file xml che probabilemente è il metodo giusto per fare quello che voglio, ma.................non ho molta testa per imparare questo se non necessario.

questo sistema di sostiuire le righe funziona con una riga semplice ma ad esempio se ho un file scritto cosi

puramente per esempio

PHP:
<?php
if(x=o){
$host='localhost';
}

e voglio aggiungere un altra ipotesi

PHP:
<?php
if(x==o){
$host='localhost';
}
if($x==1){
$host='pippo';
}

non so come fargli capire che dopo aver trovato $host='locahost' deve saltare una riga (dove è presente la graffa che chiude) e scrivere la riga dopo la graffa

non so se mi sono spiegato
 
Se non vuoi complicarti le cose aggiungi semplicemente un identificatore quando lo vai a sostituire

Se per esempio vuoi sostituire il primo aggiungi 0){ se il secondo 1){

esempio grezzo
PHP:
$rigaDaSostituire = "
if(\$x==0){
\$host='localhost';
}
if(\$x==1){
\$host='pippo';
}";

echo str_replace("1){\r\n\$host='pippo';","1){\r\n\$host='lol';",$rigaDaSostituire);
 
Ultima modifica:
Nefyt grazei delle risposte ma dato che non sono un seguace del copia incolla, mi fai capire questo passo?

non ci ho capito molto, cosa identifica lo 0 e l'1?
 
Nefyt grazei delle risposte ma dato che non sono un seguace del copia incolla, mi fai capire questo passo?

non ci ho capito molto, cosa identifica lo 0 e l'1?
Per identificatore intendo qualcosa di unico che si trova in quella linea per poter sostituire cosa c'è dopo, non è difficile da capire
 
detta cosi questa frase non mi suona molto bene ma quasi offensiva


comunque sia se leggevi bene quello che ho postato io devo inserire il codice dopo la parentesi graffa che va a capo dopo una riga di codice ed in quella pagina ho dozzine di parentesi graffe che vannoa capo. quindi identificare la riga diventa impossibile.

Dovrei prendere due righe quella con l'istruzione e quella con la graffa. o trovare la riga dell'istruzione e prima di aggiungere fargli saltare una riga.

Comunque ti ringrazio delle risposte ma non mi piace farmi dare dello scemo quindi tranquillo che me la trovo da me la risposta.

Grazie ugualmente.

Salud
 
detta cosi questa frase non mi suona molto bene ma quasi offensiva


comunque sia se leggevi bene quello che ho postato io devo inserire il codice dopo la parentesi graffa che va a capo dopo una riga di codice ed in quella pagina ho dozzine di parentesi graffe che vannoa capo. quindi identificare la riga diventa impossibile.

Dovrei prendere due righe quella con l'istruzione e quella con la graffa. o trovare la riga dell'istruzione e prima di aggiungere fargli saltare una riga.

Comunque ti ringrazio delle risposte ma non mi piace farmi dare dello scemo quindi tranquillo che me la trovo da me la risposta.

Grazie ugualmente.

Salud
Per identificatore non intendevo la parentesi graffa ma quello che c'è prima, forse l'esempio era poco azzeccato perché l'ho scritto velocemente, te ne faccio un altro
PHP:
$rigaDaSostituire ="1:var
2:var
3:var";

file_put_contents('lol.txt',str_replace("2:var","2:newvar",$rigaDaSostituire));

In questo caso dato che a tutte le linee ho :var l'identificatore sarà il numero prima, ora riporta questo esempio al numero che c'è prima della parentesi tonda nell'if e risolvi la matassa senza complicarti le cose

E poi perché ti avrei insultato o dato dello scemo lol? Ero di fretta e non mi sembrava molto difficoltoso da capire, forse ho sbagliato io a spiegare cosa intendevo boh
 
bè nel momento in cui uno mi dice "non mi sembra difficile da capire" mi sta dando dellpo scemo. cmq sia vabbò magari ho frainteso io.

cmq risolverò distribuendo il fiel modificato ed amen e nel momento mi studio un pò l'xml che dovrebbe fare al caso mio
 

Discussioni simili