Permissions en écriture

PHP Aucun commentaire »

Tester les permissions en écriture est en théorie facile. PHP fournit pour ca la fonction is_writable, qui teste si un dossier ou un fichier est accessible en écriture avec les permissions du serveur Web.

 if (is_writable("/var/www/monsite/upload/")) {
 	echo "Le répertoire est accessible en écriture !";
 } else {
 	echo "Erreur : pas de permission en écriture sur le
                répertoire !";
 }

La complication vient des différences technologiques entre les différents systèmes d’exploitation. Là où Unix utilise un système assez simple et fonctionnel (propriétaire, groupe propriétaire et autres, avec 3 types de permissions lecture, écriture, éxécution), Windows utilise un système d’ACL donnant une granularité très fine (trop ?) aux accès sur les fichiers et dossiers.

Et malheureusement, les ACL sont une telle prise de tête à implémenter que les développeurs de PHP ont laissé le bug en suspens, comme l’indique ce rapport de bugs. Au final, c’est un attribut de lecture seule qui est renvoyé donc la fonction renvoie toujours faux.

Deux solutions s’offrent à vous : l’artillerie lourde ou la jouer finement

1ere solution : le canon de DCA, on utilise les objets COM via l’extension PHP. Je n’ai pas creusé le sujet, puisque cette solution donnera un code long, lent et forcément inutile puisqu’il y a plus simple.

2eme solution : on essaie tout bêtement d’ouvrir les fichiers en lecture et en écriture et on regarde si une erreur survient :

 function is__writable($path) {
 	if ($path{strlen($path)-1} == '/') {
 		return is__writable($path.uniqid(mt_rand()).
               '.tmp');
 	} elseif (ereg('.tmp', $path)) {
 		if (!($f = @fopen($path, 'w+'))) {
 			return false;
 		}
 
 		fclose($f);
 		unlink($path);
 		return true;
 	}
 
 	return 0;
 }

Colorisation de code PHP

PHP Aucun commentaire »

Dans un cadre pédagogique, vous pouvez être amené à afficher des éléments de code PHP. Le langage fournit en natif deux fonctions bien sympathiques pour afficher des bouts de code haut en couleurs :

On peut alors facilement intégrer un code PHP avec des numéros de ligne dans sa page :

 $strCode = highlight_file('monfichier.php', TRUE);
 $tabCode = split('<br />', $strCode);
 $strFinal = '';
 $i = 1;
 
 foreach ($tabCode as $ligneCode) {
 	$strFinal .= "<em>" . $i++ . "</em> " .
 			$ligneCode . "<br />";
 }
WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS Log in