Verificare se i file sono scrivibili, apribili e chiudibili

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
Salve a tutti avrei bisogno di verificare se 3 file ad es:

file1.php
file2.php
file3.php

In base ad i permessi che hanno, sono apribili modificabili e chiudibili.

Mi spiego bene:

Per ognuno dei tre file php ho questo codice in una paginascrivi.php che eseguita li apre e scrive su di essi in una riga precisa:

PHP:
	$lines4 = file('../../form.php'); 
        $lines4 = str_replace("\n", "", $lines4);
        $lines4[139] = "$('a.add').relCopy({ limit: " . $lallegati . ", append: removeLink});"; 
        file_put_contents('../../form.php', implode("\n", $lines4));
        
        $lines4 = file('../../m.form.php');
        $lines4 = str_replace("\n", "", $lines4);
        $lines4[120] = "$('a.add').relCopy({ limit: " . $lallegati . ", append: removeLink});";
        file_put_contents('../../m.form.php', implode("\n", $lines4));
		
	echo "<p><font color='green'>Successo</font></p>";

Il fatto è che quell'echo "successo" non ha nessun controllo, cioè non so se effettivamente le righe siano scritte o meno, quindi è inutile.

Spulciando php.net ho trovato is_writable e nei commenti ci stava questa funzione un po datata (2004):

PHP:
<?php
    function file_write($filename, &$content) { 
        if (!is_writable($filename)) {
            if (!chmod($filename, 0666)) {
                 echo "Cannot change the mode of file ($filename)";
                 exit;
            };
        }
        if (!$fp = @fopen($filename, "w")) {
            echo "Cannot open file ($filename)";
            exit;
        }
        if (fwrite($fp, $content) === FALSE) {
            echo "Cannot write to file ($filename)";
            exit;
        } 
        if (!fclose($fp)) {
            echo "Cannot close file ($filename)";
            exit;
        }
    } 
?>

Vorrei sapere alcune cose:

1. come funzione è corretta?
2. se non erro si basa sulla lettura del CHMOD, tuttavia non mi sembra una soluzione corretta, è possibile ovviare a questo problema?
3. nel caso, come posso adattarla?
 

Longo8

Utente Attivo
28 Mar 2011
1.694
0
36
Secondo me non ti resta che provarla.
Posso chiederti come mai non ti sembra corretta?
A me lo sembra.
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
Il permesso di apertura e chiusura non esiste. Gli unici permessi che esistono sono: lettura, scrittura ed esecuzione. Quindi se vuoi essere sicuro di poter scrivere su un file basta che verifichi la sua esistenza e il permesso di scrittura:
PHP:
<?php
if (is_file('file.txt') && is_writable('file.txt')) {
    // ...
} else {
    // ...
}
?>
 

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
Il permesso di apertura e chiusura non esiste. Gli unici permessi che esistono sono: lettura, scrittura ed esecuzione. Quindi se vuoi essere sicuro di poter scrivere su un file basta che verifichi la sua esistenza e il permesso di scrittura:
PHP:
<?php
if (is_file('file.txt') && is_writable('file.txt')) {
    // ...
} else {
    // ...
}
?>

Così in modo semplice semplice? Mi pare che is_file sia superfluo, is_writable dovrebbe verificare anche l'esistenza. No?

Se ho ragione io verrebbe
PHP:
if (is_writable('file.txt')) {
    // scrivo e do messaggio di successo
} else {
    // non posso scrivere quindi errore!
}
?>
 
Ultima modifica:

Longo8

Utente Attivo
28 Mar 2011
1.694
0
36
Puoi fare un doppio controllo per avere un messaggio di errore più preciso.
Cosi puoi indicare che il file non esiste oppure che non ha i permessi per scriverlo.
 

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
Alla fine ho fatto in questo modo qui

PHP:
	//metto una stringa vuota che in caso di errore riempio dopo
	$scrittura = "";
	
	if (!is_writable('../../form.php')){ 
		$scrittura.="<font color='red'>Errore:</font> Il file form.php non esiste o non è scrivibile, in tal caso cambiare i permessi CHMOD e riprovare.<br />"; 
	}
	if (!is_writable('../../m.form.php')){ 
		$scrittura.="<font color='red'>Errore:</font> Il file m.form.php non esiste o non è scrivibile, in tal caso cambiare i permessi CHMOD e riprovare.<br />"; 
	}
	if (!is_writable('../../php/invio.php')){ 
		$scrittura.="<font color='red'>Errore:</font> Il file /php/invio.php non esiste o non è scrivibile, in tal caso cambiare i permessi CHMOD e riprovare.<br />"; 
	}
	
	//se $errore non è vuoto
	if($scrittura !=""){
		echo $scrittura; //avvisi e 
		echo "<meta http-equiv='Refresh' content='6; URL=../../index.php'>";//torni a home dopo 6 sec 
		exit;
	}else{
	
	
	/***** SCRITTURA DELLE RIGHE *****/
}

Credo vada... spero :p
 
Discussioni simili
Autore Titolo Forum Risposte Data
S Come verificare se un file è aperto PHP 2
Monital Verificare il doqnolad di un file per una sola volta PHP 3
metalgemini Verificare l'esistenza di un file su server Classic ASP 1
Y verificare condizione dopo esecuzione della funzione Programmazione 0
W verificare credenziali in automatico con PHP PHP 1
I Verificare compressione GZip Server Dedicati e VPS 0
F [Javascript] Verificare la presenza di caratteri speciali in una password Javascript 3
otto9due Confrontare due array: verificare che tutti i valori di un'array siano contenuti in un'altra. jQuery 1
giannit Verificare se un utente è connesso tramite db mysql PHP 15
borgo italia una funzione per verificare l'invio di files Snippet PHP 0
C [PHP] verificare se un dispositivo e' online PHP 9
M [PHP] Verificare che azienda sia aperta o chiusa PHP 3
P inserire un titolo e verificare Ajax 4
Marco_88 Verificare la selezione degli elementi dom jQuery 2
filippino Verificare se variabile di PHP è definita PHP 2
Marco_88 Verificare più valori con operatore ternario PHP 4
JackIlPazzo Estrarre voce random e verificare se è corretta PHP 8
M Long polling per verificare gli utenti on line jQuery 1
Licantropo Come verificare i propri siti web, database e server? Sicurezza e Virus 6
M verificare se il valore inserito nel campo è un numero ed effettuare dei calcoli Javascript 2
asevenx verificare presenza parola lunga all'interno di un testo PHP 1
MarcoGrazia Verificare un checkbox/radiobutton con jquery Snippet Javascript 1
F Verificare se in una variabile è presente un determinato numero PHP 2
Z Verificare che mi sta scrivendo o rispondendo Javascript 1
L Funzione per verificare distanza di tempo non funziona: perchè? PHP 4
max_400 Verificare se l'utente è on-line PHP 2
I Verificare il dispositivo del visitatore del sito? PHP 5
M Come verificare accesso ad area http auth basic? PHP 7
P Verificare e nel caso installar eeAccellerator Apache 1
D Verificare esistenza valore Javascript 2
Shyson Verificare se una mail esiste PHP 15
IImanuII Verificare se Javascript è attivo attraverso PHP PHP 8
A Verificare variabile.... PHP 6
voldemort Verificare se un attributo esiste con jQuery jQuery 4
M Verificare se il dispositivo è TouchScreen Javascript 1
V Verificare il valore selezionato nella combobox PHP 5
S Tool in beta test per verificare le posizioni del tuo sito su Google.it Presenta il tuo Sito 0
V Verificare pagina da cui arriva l'utente PHP 3
B verificare esistenza link PHP 3
D Verificare esistenza indirizzo e-mail in php PHP 2
M Come verificare veridicità di un account di posta? Sicurezza e Virus 0
metalgemini verificare il blocco popup Javascript 0
A Verificare il focus Javascript 4
E fpdf salvare e aprire il file PHP 4
I asp | includere un file, indirizzo depositato in un db Classic ASP 0
felino [Windows 10] Scompare icone, file e collegamenti sul desktop Windows e Software 0
S passare un valore da un form a un file .php con metodo post PHP 4
D Miglior modo per estrarre le occorrenze di un elemento in un set di più file xml e quindi scrivere il risultato in una tabella Excel o magari in JSON XML 0
G file CSS contenente variabili HTML e CSS 1
M Creare traccia di download file sul server HTML e CSS 2

Discussioni simili