file_get_contents () est une fonction de lecture de fichiers simple, sa fonction de base est de lire le contenu de l'ensemble du fichier et de le renvoyer. Il est généralement utilisé pour lire les fichiers texte et est également très adapté aux petits fichiers binaires. Cependant, pour les fichiers volumineux ou les fichiers compressés, l'efficacité et l'applicabilité de cette fonction peuvent être limitées.
Dans PHP, File_get_Contents () chargera le fichier directement en mémoire. Par conséquent, lorsque le fichier est grand, l'utilisation de la mémoire sera élevée, ce qui peut entraîner un débordement de mémoire. Pour les fichiers compressés, file_get_contents () lit simplement ses données binaires et ne peut pas décompresser ou lire directement le contenu.
Un fichier zip est essentiellement un fichier compressé au format binaire, contenant plusieurs fichiers ou répertoires. file_get_contents () lit les données binaires d'origine de l'ensemble du fichier compressé, ce qui signifie que si nous lisons directement un fichier zip, nous obtiendrons un flux binaire compressé au lieu de son contenu décompressé.
Par conséquent, si nous voulons extraire le contenu d'un fichier à partir d'un fichier zip, file_get_contents () ne peut pas terminer directement cette tâche. Afin de pouvoir y lire les fichiers, nous devons décompresser le contenu du fichier zip.
Bien que File_get_Contents () ne puisse pas lire directement le contenu spécifique du fichier zip, nous pouvons utiliser la classe ziparchive intégrée de PHP pour faire fonctionner le fichier zip. Cette classe nous permet d'ouvrir, de lire et de décompresser les fichiers zip. Ce qui suit est un exemple d'utilisation de ziparchive pour lire le contenu d'un fichier zip.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$zipFile</span></span><span> = </span><span><span class="hljs-string">'example.zip'</span></span><span>; </span><span><span class="hljs-comment">// ZIP Chemin de fichier</span></span><span>
</span><span><span class="hljs-variable">$zip</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">ZipArchive</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$zip</span></span><span>-></span><span><span class="hljs-title function_ invoke__">open</span></span><span>(</span><span><span class="hljs-variable">$zipFile</span></span><span>) === </span><span><span class="hljs-literal">TRUE</span></span><span>) {
</span><span><span class="hljs-comment">// Obtenir ZIP Le premier nom de fichier dans le fichier</span></span><span>
</span><span><span class="hljs-variable">$fileName</span></span><span> = </span><span><span class="hljs-variable">$zip</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getNameIndex</span></span><span>(</span><span><span class="hljs-number">0</span></span><span>); </span><span><span class="hljs-comment">// Obtenir第一个document的名称</span></span><span>
</span><span><span class="hljs-comment">// Lisez le contenu du fichier</span></span><span>
</span><span><span class="hljs-variable">$fileContent</span></span><span> = </span><span><span class="hljs-variable">$zip</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getFromName</span></span><span>(</span><span><span class="hljs-variable">$fileName</span></span><span>);
</span><span><span class="hljs-comment">// Contenu du fichier de sortie</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$fileContent</span></span><span>;
</span><span><span class="hljs-comment">// fermeture ZIP document</span></span><span>
</span><span><span class="hljs-variable">$zip</span></span><span>-></span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'Impossible d'ouvrir ZIP document!'</span></span><span>;
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
Dans cet exemple, nous utilisons d'abord la classe Ziparchive pour ouvrir le fichier zip, puis utilisons la méthode getFromName () pour lire le contenu du premier fichier dans le fichier zip. De cette façon, nous pouvons facilement extraire les fichiers du package compressé au lieu de lire directement les données binaires de l'ensemble du fichier compressé.
Bien que File_get_Contents () ne puisse pas décompresser le fichier zip, nous pouvons toujours utiliser File_get_Contents () pour lire le contenu binaire d'origine du fichier zip et le transmettre à la classe Ziparchive pour la décompression. De cette façon, File_get_Contents () devient une condition préalable pour lire le fichier, et l'opération de décompression réelle est terminée par Ziparchive .
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$zipFile</span></span><span> = </span><span><span class="hljs-string">'example.zip'</span></span><span>; </span><span><span class="hljs-comment">// ZIP Chemin de fichier</span></span><span>
</span><span><span class="hljs-comment">// Lire ZIP document的原始内容</span></span><span>
</span><span><span class="hljs-variable">$zipData</span></span><span> = </span><span><span class="hljs-title function_ invoke__">file_get_contents</span></span><span>(</span><span><span class="hljs-variable">$zipFile</span></span><span>);
</span><span><span class="hljs-comment">// 将Lire到的二进制数据传递给 ZipArchive Décompression</span></span><span>
</span><span><span class="hljs-variable">$zip</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">ZipArchive</span></span><span>;
</span><span><span class="hljs-variable">$tmpFile</span></span><span> = </span><span><span class="hljs-title function_ invoke__">tempnam</span></span><span>(</span><span><span class="hljs-title function_ invoke__">sys_get_temp_dir</span></span><span>(), </span><span><span class="hljs-string">'zip'</span></span><span>); </span><span><span class="hljs-comment">// 创建一个临时document</span></span><span>
</span><span><span class="hljs-title function_ invoke__">file_put_contents</span></span><span>(</span><span><span class="hljs-variable">$tmpFile</span></span><span>, </span><span><span class="hljs-variable">$zipData</span></span><span>); </span><span><span class="hljs-comment">// 将Lire的二进制数据写入临时document</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$zip</span></span><span>-></span><span><span class="hljs-title function_ invoke__">open</span></span><span>(</span><span><span class="hljs-variable">$tmpFile</span></span><span>) === </span><span><span class="hljs-literal">TRUE</span></span><span>) {
</span><span><span class="hljs-comment">// Obtenir ZIP Le premier nom de fichier dans le fichier</span></span><span>
</span><span><span class="hljs-variable">$fileName</span></span><span> = </span><span><span class="hljs-variable">$zip</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getNameIndex</span></span><span>(</span><span><span class="hljs-number">0</span></span><span>); </span><span><span class="hljs-comment">// Obtenir第一个document的名称</span></span><span>
</span><span><span class="hljs-comment">// Lisez le contenu du fichier</span></span><span>
</span><span><span class="hljs-variable">$fileContent</span></span><span> = </span><span><span class="hljs-variable">$zip</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getFromName</span></span><span>(</span><span><span class="hljs-variable">$fileName</span></span><span>);
</span><span><span class="hljs-comment">// Contenu du fichier de sortie</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$fileContent</span></span><span>;
</span><span><span class="hljs-comment">// fermeture ZIP document</span></span><span>
</span><span><span class="hljs-variable">$zip</span></span><span>-></span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span><span><span class="hljs-comment">// 删除临时document</span></span><span>
</span><span><span class="hljs-title function_ invoke__">unlink</span></span><span>(</span><span><span class="hljs-variable">$tmpFile</span></span><span>);
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'Impossible d'ouvrir ZIP document!'</span></span><span>;
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
Dans cet exemple, nous lisons d'abord les données binaires du fichier zip via file_get_contents () , puis écrivons les données dans un fichier temporaire. Ensuite, nous utilisons la classe Ziparchive pour ouvrir ce fichier temporaire et y lire le contenu. De cette façon, File_get_Contents () devient un outil pour lire les données brutes, et l'opération de décompression est toujours remise à Ziparchive pour l'achèvement.
Étiquettes associées:
file_get_contents