Chmod en PHP pour récupérer les droits sur les fichiers uploadés

Uploader un fichier sur un serveur Apache nécessite de lui attribuer des droits suffisamment larges pour pouvoir ensuite le récupérer. Voici un script PHP permettant de passer outre les restrictions du serveur.

Lorsque l'on écrit un script pour uploader des fichiers vers un serveur en PHP, il est fréquent d'oublier de "Chmoder" le fichier uploadé avec des droits suffisamment élevés afin de pouvoir notamment le récupérer par FTP.

En effet, beaucoup d'hébergeurs exécutent les scripts PHP avec les droits de l'utilisateur du serveur HTTP (bien souvent Apache), et les fichiers n'appartiennent donc pas à l'utilisateur FTP mais à l'utilisteur Apache du groupe Apache (dans le cas du serveur HTTP Apache).

Si les fichiers n'ont pas un Chmod suffisamment "large", vous ne pouvez donc pas récupérer vos fichiers par FTP puisque votre utilisateur n'est pas Apache et n'appartient pas au groupe Apache. Une solution consiste à exécuter un petit script PHP (donc exécuté par l'utilisateur Apache qui a les droits sur les fichiers) afin de CHMODer correctement les fichiers.

Voici ce script qui CHDMOD tous les fichiers d'un dossier :

<?php 

error_reporting(0);

$handle= opendir(?./mydir/?);

while (false !== ($file = readdir($handle)))

{

if(chmod(?./mydir/?.$file, 0777))

echo "Chmod ".$file." => OK <br />";

else

echo "Chmod ".$file." => failed <br/>";

}

closedir($handle);

?>

Note : l'utilisation de suphp ou mod_suphp permet d'exécuter les scripts PHP avec les droits de l'utilisateur FTP ce qui apporte outre un gain en sécurité indéniable, un confort supplémentaire important pour l'utilisateur !

Ce contenu a été réalisé par le blog accolade.ch (Raphaël Emourgeon) sous licence Creative Commons.