Position actuelle: Accueil> Derniers articles> Quelle est la différence entre chdir () et chroot ()? Pour quels scénarios PHP travaillent-ils chacun?

Quelle est la différence entre chdir () et chroot ()? Pour quels scénarios PHP travaillent-ils chacun?

gitbox 2025-06-08

Dans PHP, CHDIR () et Chroot () sont deux fonctions liées au répertoire de travail actuel ou au répertoire racine du système de fichiers. Bien qu'ils aient des fonctions similaires, ils sont essentiellement différents. Il est très important pour les développeurs de comprendre les différences entre ces deux fonctions et les scénarios auxquels ils s'appliquent. Cet article présentera en détail leurs différences et leurs scénarios d'utilisation.

1. Fonction chdir ()

Chdir () est une fonction de PHP qui modifie le répertoire de travail du processus actuel. La fonction de cette fonction est de modifier le répertoire de travail du script actuel en un chemin spécifié, affectant ainsi l'accès au fichier de chemin relatif. L'utilisation de chdir () pour effectuer des modifications du répertoire ne modifiera pas le répertoire racine de l'ensemble du système et ne sera valide que dans le processus de script actuel.

Prototype de fonction :

 bool chdir ( string $directory )
  • $ Directory : le chemin d'accès au répertoire cible.

Exemple :

 <?php
// Sortir le répertoire de travail actuel
echo getcwd();  // Sortir le répertoire actuel

// Modifier le répertoire de travail
chdir('/var/www/html');

// Sortir le répertoire de travail modifié
echo getcwd();  // Sortir "/var/www/html"
?>

Dans le code ci-dessus, l'utilisation de chdir () modifie le répertoire de travail du script PHP. Cela signifie que les opérations de chemin relatif ultérieures seront basées sur ce nouveau répertoire.

2. Fonction chroot ()

Chroot () est une autre fonction PHP liée au répertoire, qui est très différente de Chdir () . Le but de Chroot () est de modifier le répertoire racine du processus actuel vers le répertoire spécifié. Cette modification est fondamentale, elle affectera l'ensemble de l'accès du processus au système de fichiers, ce qui signifie que le processus ne peut pas accéder aux fichiers en dehors du répertoire racine.

Prototype de fonction :

 bool chroot ( string $directory )
  • $ répertoire : le nouveau répertoire racine spécifié.

Exemple :

 <?php
// Changer le répertoire racine en /var/www
chroot('/var/www');

// Tenter d&#39;accéder à un chemin à l&#39;extérieur du répertoire racine échouera
echo file_exists('/etc/passwd') ? 'File exists' : 'File not found';
?>

Dans cet exemple, Chroot () modifie le répertoire racine du script actuel vers / var / www . Par conséquent, toute tentative d'accéder aux fichiers au niveau du système telles que / etc / passwd échouera car elles sont déjà limitées par le nouveau répertoire racine.

3. La différence entre chdir () et chroot ()

  • Plage fonctionnelle :

    • Chdir () ne modifie que le répertoire de travail du processus actuel, sans affecter le répertoire racine du processus. Il affecte uniquement l'analyse des chemins relatifs et ne modifie pas les autorisations d'accès des fichiers système.

    • Chroot () modifie le répertoire racine de l'ensemble du processus, afin que le processus ne puisse accéder aux fichiers que dans le nouveau répertoire racine et ne peut accéder à aucun fichier en dehors du nouveau répertoire racine.

  • Étendue de l'impact :

    • Chdir () n'est valable que pour le script actuel ou le processus PHP actuel.

    • Chroot () est un impact global et limitera l'accès au fichier à l'ensemble du processus.

  • Sécurité :

    • Chdir () est relativement simple et n'a pas beaucoup de problèmes de sécurité, mais il ne change que l'analyse du chemin du fichier.

    • Chroot () est plus "dur", il est généralement utilisé dans des environnements conteneurisés et sableux, restreignant l'accès du système de fichiers de processus et augmentant la sécurité du système d'exploitation.

4. Scénarios applicables

  • Scénarios applicables pour chdir () :
    Chdir () est souvent utilisé pour la commutation de répertoire dans les scripts, en particulier dans les applications PHP qui doivent faire face à de grandes quantités de fichiers. Il est particulièrement utile dans les scénarios suivants:

    • Traitement des téléchargements de fichiers : lorsque vous traitez les téléchargements de fichiers, vous devrez peut-être basculer le répertoire de travail vers un répertoire spécifique afin que le fichier puisse être stocké après le téléchargement.

    • Recherche et lecture de fichiers : Si votre script doit parcourir plusieurs répertoires, ChDIR () peut être utilisé pour modifier le répertoire de travail, ce qui le rend pratique pour les fichiers de fonctionnement à l'aide de chemins relatifs.

    • Script de ligne de commande : Dans l'interface de ligne de commande PHP, utilisez chdir () pour modifier le répertoire de travail pour assurer l'exactitude du chemin relatif.

  • Scénarios applicables pour Chroot () :
    Chroot () convient aux exigences de sécurité plus élevées et se trouve couramment dans les scénarios suivants:

    • Application Sandbox : Lors du traitement des données non fiables ou nécessitant une sécurité plus élevée, vous pouvez utiliser Chroot () pour restreindre le processus à un répertoire spécifique, empêchant ainsi le processus d'accéder à d'autres fichiers sur le système.

    • Environnement de l'hôte virtuel : pour les serveurs multi-locataires, Chroot () peut être utilisé pour isoler l'environnement des différents utilisateurs et s'assurer que les utilisateurs ne peuvent pas accéder les uns aux autres.

    • Technologie de contenerisation : Certaines technologies de contenerisation (telles que Docker) utilisent Chroot () pour isoler l'environnement de l'application à partir du système d'exploitation hôte, en veillant à ce que les processus dans le conteneur ne puissent accéder aux pièces du système de fichiers spécifié.

5. Résumé

Chdir () et Chroot () sont liés aux opérations de répertoire, mais leurs gammes d'impact et leurs scénarios d'utilisation sont significativement différentes. Chdir () est plus adapté aux opérations de chemin relatif dans le système de fichiers, tandis que Chroot () est plus adapté aux restrictions d'accès au système de fichiers plus strictes, qui se trouvent couramment dans les applications avec une sécurité ou une conteneurisation plus élevée. En PHP, le choix d'utiliser Chdir () ou Chroot () dépend principalement de vos exigences de demande et de vos exigences de sécurité.