52 votes

Le meilleur moyen de déterminer si un fichier est vide (php) ?

J'inclus un fichier custom.css dans mon modèle pour permettre aux propriétaires de sites d'ajouter leurs propres règles CSS. Cependant, lorsque j'expédie le fichier, il est vide et cela n'a aucun sens de le charger s'ils n'y ont ajouté aucune règle.

Quelle est la meilleure façon de déterminer si elle est vide ?

 if ( 0 == filesize( $file_path ) )
{
    // file is empty
}

// OR:

if ( '' == file_get_contents( $file_path ) )
{
    // file is empty
} 

70voto

Spliffster Points 1997

file_get_contents() lira l'intégralité du fichier tandis que filesize() utilise stat() pour déterminer la taille du fichier. Utilisez filesize() , cela devrait consommer moins d'E/S disque et beaucoup moins de mémoire.

26voto

userlond Points 2289

Tout le monde fait attention lorsque vous utilisez filesize , car ses résultats sont mis en cache pour de meilleures performances. Donc, si vous avez besoin d'une meilleure précision, il est recommandé d'utiliser quelque chose comme :

 <?
clearstatcache();
if(filesize($path_to_your_file)) {
    // your file is not empty
}

Plus d'infos ici

9voto

ThiefMaster Points 135805

Utiliser filesize() est nettement mieux. Il utilise stat() qui n'a pas du tout besoin d'ouvrir le fichier.

file_get_contents() lit tout le fichier. Imaginez ce qui se passe si vous avez un fichier de 10 Go.

5voto

Crayon Violent Points 16544

filesize() serait plus efficace, cependant, cela pourrait être trompeur. Si quelqu'un avait juste des commentaires là-dedans ou même juste des espaces... cela augmenterait la taille du fichier. OMI, vous devriez plutôt rechercher quelque chose de spécifique dans le fichier, comme /* enabled=true */ sur la première ligne, puis utiliser fopen/fread pour lire simplement la première ligne. S'il n'y est pas, ne le chargez pas.

2voto

NikiC Points 47270

Comme mentionné dans d'autres réponses, filesize est la voie à suivre pour les fichiers locaux . D'un autre côté, de nombreux wrappers de flux, y compris HTTP, ne prennent pas en charge stat() , donc filesize échouera, tandis que file_get_contents fonctionnera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X