8768 sujets

Développement web côté serveur, CMS

Bonjour je génère sur php zend, un zip qui s'ouvre sans problème sur Windows, Linux. Or sur Mac, quand on clique sur le fichier zip, un autre fichier est créé memenom.cgpz . En essayant d ouvrir celui là rien ne se passe et pas de message d'erreur.

Le header de mon zip est le suivant:

		$this->getResponse()
		->setHeader('Content-Type','application/zip', true)
                ->setHeader('Content-Disposition','attachment; filename='test.zip', true)
                ->setHeader('Content-Transfer-Encoding','binary', true)
                ->setHeader('Expires','0', true)
                ->setHeader('Cache-Control','must-revalidate, post-check=0, pre-check=0', true)
                ->setHeader('Pragma','public', true);


Savez vous comment je peux régler ce problème.

Merci d'avance
Modifié par 1womps1 (12 Feb 2016 - 15:29)
le gz fonctionne sur MAC. Mais j'aimerai régler le problème avec les zips. Pour ne pas devoir générer un fichier différent par distribution.
Information supplémentaire, sur MAC, le fichier zip s'ouvre correctement avec 7-zip, mais pas avec l'utilitaire par défaut.

Des idées??
Modérateur
Bonjour,

J'ai un MAC, et j'ouvre des fichiers zip avec l'application par défaut sans problème.

Amicalement,
Merci pour ta réponse. Donc il y a bien un problème dans les zip que je génère. Est ce que c'est format?l’entête? Sachant que le même zip fonctionne très bien sur windows ou linux
Modérateur
Bonjour,

Quand tu ouvres un zip quelconque sur le Mac (pas un de ceux que tu généres via php, mais un autre), quelle est l'application qui s'ouvre ? Est-ce qu'il s'ouvre correctement ? ou bien as-tu des problèmes seulement avec le zip que tu as fabriqué en php ?

Amicalement,
Uniquement sur le fichier généré en php. Normalement quand je télécharge un zip sur MAC, au double clic, un autre fichier est généré, qui s'apelle .cgpz. Celui là s'ouvre sans problème.

Or avec mon zip, quand j'essaie de l ouvrir un autre fichier .cgpz est généré, et en cliquant sur ce dernier, un autre fichier zip est généré, indéfiniment....
Modérateur
Bonjour,

1womps1 a écrit :
Uniquement sur le fichier généré en php. Normalement quand je télécharge un zip sur MAC, au double clic, un autre fichier est généré, qui s'apelle .cgpz. Celui là s'ouvre sans problème.

Or avec mon zip, quand j'essaie de l ouvrir un autre fichier .cgpz est généré, et en cliquant sur ce dernier, un autre fichier zip est généré, indéfiniment....


C'est un .gzip ou un .cgpz finalement ? Smiley smile

Les symptômes semblent indiquer que ton fichier (file.zip) n'a pas été correctement zippé.
Ce fichier "file.zip" que tu essaies de télécharger, tu l'as compressé comment ?

Si tu le récupères simplement par ftp à titre de test vers ton Mac, est-ce qu'il se dézippe bien ?

Amicalement,
Pardon cgpz !

Le fichier est généré comme suit:

$zip = new ZipArchive();
$res = $zip->open(ROOT_PATH . '/xxx/xxx/xxx'.xx.''.$xxx.'-'.$xxx.'.zip', ZIPARCHIVE::CREATE);
if ($res === TRUE)
 {
$fileUrl =  ROOT_PATH . '/xxx/xxx/xxx/' . $fileName;
$zip->addfile($fileUrl,$fileName);
		
		
		
		// close archive
		$zip->close();
		}
		else {
        switch($res){
            case ZipArchive::ER_EXISTS:
                $ErrMsg = "File already exists.";
                break;

            case ZipArchive::ER_INCONS:
                $ErrMsg = "Zip archive inconsistent.";
                break;
               
            case ZipArchive::ER_MEMORY:
                $ErrMsg = "Malloc failure.";
                break;
               
            case ZipArchive::ER_NOENT:
                $ErrMsg = "No such file.";
                break;
               
            case ZipArchive::ER_NOZIP:
                $ErrMsg = "Not a zip archive.";
                break;
               
            case ZipArchive::ER_OPEN:
                $ErrMsg = "Can't open file.";
                break;
               
            case ZipArchive::ER_READ:
                $ErrMsg = "Read error.";
                break;
               
            case ZipArchive::ER_SEEK:
                $ErrMsg = "Seek error.";
                break;
           
            default:
                $ErrMsg = "Unknow (Code $rOpen)";
                break;
               
           
        }
         die( 'ZipArchive Error: ' . $ErrMsg);
    }
		$this->getResponse()
		->setHeader('Content-Type','application/zip', true)
                ->setHeader('Content-Disposition','attachment; filename=xxx-xxx-'.$xxx->xxx.''.$xxx->xxx.'-'.$xxx->xxx.'.zip', true)
                ->setHeader('Content-Transfer-Encoding','binary', true)
                ->setHeader('Expires','0', true)
                ->setHeader('Cache-Control','must-revalidate, post-check=0, pre-check=0', true)
                ->setHeader('Pragma','public', true);
		$this->getResponse()->setBody(readfile(ROOT_PATH . "/xxx/xxx/xxx-xx-".$xxx->xxx."".$xxxx."-".$xxx->xxx.".zip"));


Fichier s'ouvre sans problème sur toutes les autres distributions.

Merci
Modifié par 1womps1 (12 Feb 2016 - 15:45)
Modérateur
Bonjour,

Je repose la question :

si tu copies ton fichier ROOT_PATH . '/xxx/...'.$xxx.'-'.$xxx.'.zip' sur ton Mac sans passer par Zend (par exemple en utilisant ftp), est-ce que tu arrives à l'ouvrir ou pas ?

Ce test permet de savoir si c'est la partie génération de l'archive qui cause problème ou si c'est la partie Zend.

Amicalement,
Le fichier s'ouvre effectivement sans problème quand il est récupéré directement du serveur...
Modérateur
Bonjour,

Ça ne va pas être facile.

Étape suivante :
- tu ouvres le terminal sur le mac qui réceptionne les zip.
- tu exécutes la commande suivante :
md5 file.zip (en remplaçant file.zip par le fichier que tu as récupéré par ftp)
- puis tu fais la même chose, mais avec le fichier que tu as récupéré par Zend

Tu compares les résultats (md5 est une fonction qui fabrique une "signature" de ton fichier. Si les deux fichiers ont la même signature, leur contenu est identique quasi-certainement).

Ceci permet de savoir si le fichier récupéré par Zend est arrivé intact ou pas.

Amicalement,
Modifié par parsimonhi (15 Feb 2016 - 08:10)