Maison  >  Article  >  développement back-end  >  Explication détaillée des fonctions d'implémentation de lecture et d'analyse de fichiers de type C de PHP

Explication détaillée des fonctions d'implémentation de lecture et d'analyse de fichiers de type C de PHP

黄舟
黄舟original
2017-09-02 09:11:581703parcourir

L'exemple de cet article décrit comment PHP implémente des fonctions de lecture et d'analyse de fichiers similaires au langage C. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :


$log_file_name = 'D:/static/develop/kuai_zhi/acagrid.com/public/Logs/'.date('Ym').'/'.date('d').'_error.log';
//$log_file_name = 'D:/static/develop/kuai_zhi/acagrid.com/public/Logs/201701/19_error.log';
if(!file_exists($log_file_name)) return;
$handle = fopen($log_file_name,'rb');
 if (FALSE === $handle) {
   exit("Failed to open stream to URL");
 }
//    $stream = fread($handle, $length);//从文件当前指针位置,往后读取n个字节长度
//重置文件指针的位置。指定指针的位置,指针位置修改后。读取文件,后面是从这个位置开始读取了
//fseek($handle,105);
//fgets表示每次读取文件的一行
$error_log_array = [];
while( ($line = fgets($handle) ) !==false){
   //每次读取一行
   //匹配出现[1],tp日志中用这种表示致命错误类型
   if(preg_match("/\[1\]/", $line)){
     $error_log_array[] = $line;
   }
}
fclose($handle);

Quelques points à noter :

1. Si vous utilisez fwrite, veillez à ne pas effacer le contenu du fichier d'origine. La clé est de savoir comment ouvrir fopen. r ou w.

Si la méthode append est utilisée, c'est une balise.

2. Lors de l'ouverture, faites attention à déterminer si le fichier est ouvert avec succès. Évitez d'entrer dans une boucle infinie lorsque vous utilisez feof. Parce que cette fonction, lorsqu'elle est transmise n'est pas un pointeur, cette fonction retournera toujours false

L'intention initiale de feof est : déterminer s'il s'agit de la fin du fichier. Si c'est la fin, renvoie vrai. Renvoie false sinon la fin. Si un pointeur illégal est transmis, ce ne sera jamais la fin du fichier et false sera toujours renvoyé.

Fonction feof(), lorsque l'entrée n'est pas de type pointeur, une boucle infinie se produira si le jugement suivant est utilisé


while(!feof($fp)){
}

3 . fread et fgets. Pour lire un fichier ligne par ligne, utilisez fgets. Au lieu de lire par ligne, utilisez fread() pour lire.

Veuillez faire attention à ce détail : s'il n'y a plus de contenu, false sera renvoyé, c'est-à-dire dans deux cas, si le contenu à l'intérieur est vide. renverra également false. Lorsque la fin du fichier est lue, ces deux fonctions renvoient également false (pas étonnant que nous utilisions feof() pour ne pas découvrir ce détail, car cette fonction nous a déjà aidé à déterminer la fin du fichier)

4 . Utilisez la méthode append (c'est-à-dire une marque) pour ouvrir le fichier. Veuillez noter que dans cette méthode, le contenu du fichier ne peut pas être lu et le fichier peut uniquement y être écrit. Donc fread() sur ce handle deviendra faux

Le résumé est que si vous lisez uniquement le contenu du fichier, ouvrez-le simplement en mode lecture. Si vous souhaitez écrire un nouveau contenu, utilisez un Open

Je comprends maintenant pourquoi il est nécessaire de distinguer plusieurs modes. Avant, je pensais que c'était inutile. Maintenant, il semble que la façon dont le fichier est ouvert détermine ce que vous pouvez faire avec le fichier (ajouter du nouveau contenu ou lire du contenu.)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn