Récupérer ZIP sur serveur 1 pour décompresser sur serveur 2

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Récupérer ZIP sur serveur 1 pour décompresser sur serveur 2

Re: Récupérer ZIP sur serveur 1 pour décompresser sur serveu

par Mazarini » 25 oct. 2013, 10:24

#define ZIP_ER_OPEN 11 /* S Can't open file */
A mon avis, voir allow_url_fopen dans php.ini pour permettre l'ouverture de fichiers distant.

Edit : sous réserve que ce soit possible comme le souligne xTG

Re: Récupérer ZIP sur serveur 1 pour décompresser sur serveu

par xTG » 25 oct. 2013, 10:11

Il n'est pas marqué dans la doc que cette fonction accepte les urls distantes.
C'est écrit pour chaque fonction quand c'est autorisé.

Donc je dirais que c'est ce qui pêche.
Télécharges le fichier sur ton serveur2 en tant que fichier temporaire. :)

Re: Récupérer ZIP sur serveur 1 pour décompresser sur serveu

par Ykar » 25 oct. 2013, 10:00

J'ai une erreur 11 sur le zip_open. (error open)

J'ai bien l'autorisation d'ouvrir des fichiers, phpinfo : allow_url_fopen On

Re: Récupérer ZIP sur serveur 1 pour décompresser sur serveu

par Mazarini » 25 oct. 2013, 09:56

Il est possible que php ne soit pas paramétré pour ouvrir des fichiers distants.
Une recherche pour trouver un message d'erreur pourrait être intéressante pour aider à comprendre pourquoi ca ne marche pas.

Récupérer ZIP sur serveur 1 pour décompresser sur serveur 2

par Ykar » 25 oct. 2013, 09:39

Bonjour,

- La française des jeux fournit un fichier ZIP téléchargeable ici :
https://media.fdj.fr/generated/game/lot ... u_loto.zip
Ce ZIP de 42 Ko contient un seul fichier CSV (100 Ko) qui contient tous les tirages du loto depuis 2008.

- J'aimerai récupérer ce zip du serveur FDJ avec le PHP puis le décompresser dans un dossier de mon hébergement (afin de pouvoir le parcourir, le traiter et afficher des statistiques depuis mon poste via javascript).

- Si je met le zip à la main via FTP dans mon répertoire racine ma fonction marche et je récupère bien le CSV dans un sous dossier.
PAR CONTRE ,si je vais chercher le Zip à distance ça ne marche pas.

Quelqu'un pourrait me donner une idée de ce qu'il se passe ?

voici mon code :
<?php
function unzip($file, $path='', $effacer_zip=false)
{/*Méthode qui permet de décompresser un fichier zip $file dans un répertoire de destination $path
  et qui retourne un tableau contenant la liste des fichiers extraits
  Si $effacer_zip est égal à true, on efface le fichier zip d'origine $file*/
	$tab_liste_fichiers = array(); //Initialisation
	$zip = zip_open($file);
	if ($zip)
	{
		while ($zip_entry = zip_read($zip)) //Pour chaque fichier contenu dans le fichier zip
		{
			if (zip_entry_filesize($zip_entry) > 0)
			{
				$complete_path = $path.dirname(zip_entry_name($zip_entry));
				/*On supprime les éventuels caractères spéciaux et majuscules*/
				$nom_fichier = zip_entry_name($zip_entry);
				$nom_fichier = strtr($nom_fichier,"ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ","AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn");
				$nom_fichier = strtolower($nom_fichier);
				$nom_fichier = ereg_replace('[^a-zA-Z0-9.]','-',$nom_fichier);
				/*On ajoute le nom du fichier dans le tableau*/
				array_push($tab_liste_fichiers,$nom_fichier);
				$complete_name = $path.$nom_fichier; //Nom et chemin de destination
				if(!file_exists($complete_path))
				{
					$tmp = '';
					foreach(explode('/',$complete_path) AS $k)
					{
						$tmp .= $k.'/';
						if(!file_exists($tmp))
						{ mkdir($tmp, 0755); }
					}
				}
				/*On extrait le fichier*/
				if (zip_entry_open($zip, $zip_entry, "r"))
				{
					$fd = fopen($complete_name, 'w');
					fwrite($fd, zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)));
					fclose($fd);
					zip_entry_close($zip_entry);
				}
			}
		}
		zip_close($zip);
		/*On efface éventuellement le fichier zip d'origine*/
		if ($effacer_zip === true)
		unlink($file);
	}
	return $tab_liste_fichiers;
}	
/**********************************************************/
$liste = array();
$liste = unzip('https://media.fdj.fr/generated/game/loto/nouveau_loto.zip','zips/');
echo 'Le fichier zip contenait '.count($liste).' fichier(s) :<br />';
foreach ($liste as $nom_fichier)
{
	echo $nom_fichier.'<br />';
}
?>