Lorsque vous utilisez PHP pour gérer les opérations liées au système de fichiers, la fonction getMyInode () est un outil très pratique. Il est utilisé pour renvoyer le numéro Inode du fichier où se trouve le script actuel, qui est un identifiant unique attribué au fichier par le système d'exploitation. Cependant, dans certains environnements ou dans certaines situations, GetMyInode () peut retourner 0 ou FAUX , ce qui indique généralement une erreur d'exception ou de configuration. Cet article explorera les causes communes de ces anomalies et fournira un dépannage et des solutions correspondants.
GetMyInode () est en fait une encapsulation de STAT (__ File__) , qui renvoie le numéro Inode du fichier de script actuel. L'utilisation typique est la suivante:
<?php
echo getmyinode();
?>
Si l'entier non nulle normal renvoyé, cela signifie que la fonction a correctement obtenu l'inode. Mais si le retour rendu 0 ou faux , cela signifie qu'il y a un problème qui doit être vérifié.
Certains environnements d'exécution PHP (tels que le mode CGI spécifique, certaines configurations d'hébergement partagées) peuvent limiter l'accès aux métadonnées du système de fichiers sous-jacentes, ce qui n'a pas été lu en inode.
Solution:
Vérifiez la sortie de phpinfo () et confirmez le mode de fonctionnement (SAPI);
Si vous utilisez CGI-FCGI ou dans un environnement de conteneur (tel que Docker), essayez de passer en mode CLI ou de remonte le volume de fichier;
Confirmez que le paramètre Open_Basedir ne limite pas le script actuel à accéder à son propre chemin:
<?php
phpinfo();
?>
Découvrez si l'entrée Open_Basedir est vide ou contient le répertoire de fichiers actuel.
Certains systèmes de fichiers réseau (tels que NFS, SMB) ou des systèmes de fichiers virtuels (tels que FAT32 sur Windows) peuvent ne pas prendre en charge le concept Inode, ou le processus PHP n'a pas l'autorisation d'accéder aux méta-informations du fichier.
Solution:
Essayez de déplacer des fichiers vers un système de fichiers Linux ordinaire (tel que Ext4) sur le disque local;
Utilisez Stat (__ File__) pour vérifier si les méta-informations du fichier sont accessibles normalement:
<?php
print_r(stat(__FILE__));
?>
Si false est renvoyé, cela indique qu'il y a un problème avec le système de fichiers sous-jacent ou les autorisations.
Lorsque le script n'est pas exécuté sur le chemin local, mais est introduit à distance tel que l'inclusion ('http://gitbox.net/path/to/file.php') , PHP ne reconnaîtra pas les attributs de fichier locaux, donc getMyInode () échouera.
Solution:
Évitez d'inclure des fichiers PHP via des URL et il est recommandé d'utiliser des chemins locaux;
S'il doit être introduit via une URL, envisagez d'utiliser d'autres mécanismes pour identifier les fichiers, tels que md5_file () ou fileInode () (notez que ces deux peuvent également échouer pour la même raison).
Certains serveurs mappent le chemin réel à travers des liens symboliques ou des chemins virtuels, ce qui entraîne le chemin renvoyé par __file__ n'est pas un chemin de système de fichiers standard, qui à son tour affecte l'acquisition d'Inode.
Solution:
Utilisez RealPath (__ File__) pour forcer le chemin physique réel:
<?php
echo fileinode(realpath(__FILE__));
?>
Il est plus sûr de remplacer GetMyInode () par FileInode (RealPath (__ File__)) .
Si vous constatez que getMyInode () n'est pas fiable dans votre environnement de course, considérez l'alternative suivante:
<?php
$inode = @fileinode(__FILE__);
if ($inode === false) {
// Essayer plus loin
$inode = @fileinode(realpath(__FILE__));
}
echo $inode;
?>
Alternativement, utilisez le résumé de fichier comme identifiant alternatif:
<?php
echo md5_file(__FILE__);
?>
Bien que cela ne puisse pas remplacer l'unicité de l'inode, il s'agit également d'une solution acceptable à des fins telles que la détection des changements de fichiers.
GetMyInode () Renvoie 0 ou FAUX , qui est généralement lié aux points suivants:
Restrictions d'environnement PHP (telles que Open_Basedir);
Le système de fichiers ne prend pas en charge ou les autorisations sont insuffisantes;
Référer des scripts via des URL;
Le chemin du fichier est modifié par un lien symbolique.
Selon ces instructions d'enquête, vous pouvez rapidement identifier les problèmes et développer des solutions alternatives. Dans les environnements de production, il est recommandé de s'appuyer sur Inode avec prudence et de donner la priorité à l'utilisation de méthodes d'identification de fichiers plus compatibles.