Lire fichier zippé

Eléphant du PHP | 101 Messages

25 mai 2010, 15:58

Bonjour a tous.

Une petite question pour les personnes qui auraient l'amabilité de me répondre. ^^.
J'ai un fichier CSV zippé que je souhaiterai lire via un script php. Est-il possible de lire ligne par ligne ce dernier afin de traiter son contenu?
Ou est-on obligé de le décompresser et de le lire une fois décompressé?

ViPHP
ViPHP | 5462 Messages

25 mai 2010, 16:03

les 2 :wink: ligne par ligne tout en le décompressant

Eléphant du PHP | 101 Messages

25 mai 2010, 16:16

Donc il faut ouvrir le zip, mais ensuite comment lire les données?
Pour le moment il y a quelque chose du genre.
       // ouverture du fichier zip
	$zip = zip_open("Mon fichier zip");
       // et la je le lis mais comment récuperer les ligne?
	$fichier = zip_read($zip);
Je ne peux pas faire un
while ($tab = fgetcsv ($fichier, 1500, ";"))
directement

ViPHP
ViPHP | 5462 Messages

25 mai 2010, 16:19

Je ne peux pas faire un
while ($tab = fgetcsv ($fichier, 1500, ";"))
directement
si via le wrapper zlib
while ($tab  = fgetcsv ("compress.zlib://$fichier", 1500, ";"))
mais je te conseil SplFileObject pour lire tes csv, c'est plus simple et plus rapide
$file = new SplFileObject("compress.zlib://$fichier");
$file->setFlags(SplFileObject::READ_CSV);
$file->setCsvControl(';');
	
foreach ($file as $row)
{
	print_r($row);
}

Eléphant du PHP | 101 Messages

25 mai 2010, 16:23

Et pour les différentes données ("case") du fichier c'est un truk du style
print $row[0]
...

ViPHP
ViPHP | 5462 Messages

25 mai 2010, 16:28

ouai c'est pareil après dans ta boucle

Eléphant du PHP | 101 Messages

25 mai 2010, 16:31

Il ne connait pas ça
while ($tab   = fgetcsv ("compress.zlib://$fichier", 1500, ";"))
Message d'erreur :
Warning: fopen(compress.zlib://Resource id #5):

ViPHP
ViPHP | 5462 Messages

25 mai 2010, 16:34

Il ne connait pas ça
while ($tab   = fgetcsv ("compress.zlib://$fichier", 1500, ";"))
Message d'erreur :
Warning: fopen(compress.zlib://Resource id #5):
fais un
print_r(stream_get_wrappers());

Eléphant du PHP | 101 Messages

25 mai 2010, 16:39

fais un
print_r(stream_get_wrappers());
[/quote]

Ca m'affiche
Array
(
[0] => php
[1] => file
[2] => glob
[3] => data
[4] => http
[5] => ftp
[6] => zip
[7] => compress.zlib
[8] => phar
)

ViPHP
ViPHP | 5462 Messages

25 mai 2010, 16:42

c'est parce c'est dans le fopen qui faut le faire le compress :wink:

Eléphant du PHP | 101 Messages

25 mai 2010, 16:44

J'ai fait ça
$var = stream_get_wrappers();
$flect = fopen($var[7]."\\".$fichier,"r");
Mais toujours la meme erreur

ViPHP
ViPHP | 5462 Messages

25 mai 2010, 16:46

montre tout

Eléphant du PHP | 101 Messages

25 mai 2010, 16:49

Pour le moment je fais juste un test donc j'ai :


$file = 'D:\Brian\\GLobal_EET\\Global_EET.zip';
$date=date("d-m-Y", filemtime($file));
if (file_exists($file) && $date == date("d-m-Y"))
{ 
	$file = zip_open("D:\Brian\\GLobal_EET\\Global_EET.zip");
	$fichier = zip_read($file);
	if ($fichier)
	{
		$var = stream_get_wrappers();
		$flect = fopen($var[7]."\\".$fichier,"r");
		echo fgetcsv($flect, 1500, ";");
		zip_close($file);
	}
}
else
	echo 'Pas de nouveau fichier\n';

ViPHP
ViPHP | 5462 Messages

25 mai 2010, 16:53

oula t'as tout mélangé la, comment s'appelle ton fichier a l'intérieur du zip ?

Eléphant du PHP | 101 Messages

25 mai 2010, 16:55

Global_EET.csv