8768 sujets
Développement web côté serveur, CMS
en voulant tester à distance l'encodage de ton fichier, je trouve UTF-8
et aussi en zippant à distance, j'obtiens une archive valide :
Voici le script que j'ai utilisé (sans veritable succés car l'archive obtenue est bonne).
Je n'arrive pas à reproduire ton soucis même en tentant de me servir de ton fichier en ligne . Cependant, la manœuvre ne fait pas une copie exacte de ton fichier, juste du contenu lu, c'est peut-être une solution.
Modifié par gcyrillus (09 Jun 2024 - 15:00)
et aussi en zippant à distance, j'obtiens une archive valide :
Voici le script que j'ai utilisé (sans veritable succés car l'archive obtenue est bonne).
function file_get_contents_curl($url)
{
$ch=curl_init();
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
$data=curl_exec($ch);
curl_close($ch);
return $data;
}
$html=file_get_contents_curl('https://www.alma-musica.net/html/partitions/tests/AuClairDeLaLune.myrweb.html');
echo mb_detect_encoding($html); // ici j'ai apparemment un encodage en UTF-8
// Puis en faisant
file_put_contents('test.html', $html);// ce n'est pas une copie à proprement dite, c'est le contenu du fichier interpréter puis enregistrer par le serveur
zipFile('test.html'); // le zip générè est valide [smile]
Je n'arrive pas à reproduire ton soucis même en tentant de me servir de ton fichier en ligne . Cependant, la manœuvre ne fait pas une copie exacte de ton fichier, juste du contenu lu, c'est peut-être une solution.
Modifié par gcyrillus (09 Jun 2024 - 15:00)
Grâce au forum des utilisateurs du produit qui génère le fichier .myrwb.html je suis arrivé à faire en sorte que le fichier soit bien en uft-8
voir https://www.alma-musica.net/html/partitions/tests/AuClairDeLaLune.myrweb.html
Après pas mal de tests, et en ouvrant le fichier .zip par 7-zip, je trouve que le fichier .myrwb.html est bien dans le fichier zip, mais pas directement.
Le fichier zip contient en fait toute l'arborescence (noms de fichiers) du fichier et au bout le fichier lui-même que je parviens à extraire avec 7-zip
voir https://www.alma-musica.net/html/partitions/tests/AuClairDeLaLune.myrweb.html.zip
Si je veux obtenir ce que je cherche, c'est à dire un fichier .zip qui ne contient que le fichier à zipper sans arborescence, il va falloir trouver un moyen de feinter le programme.
Modifié par PapyJP (09 Jun 2024 - 17:14)
voir https://www.alma-musica.net/html/partitions/tests/AuClairDeLaLune.myrweb.html
Après pas mal de tests, et en ouvrant le fichier .zip par 7-zip, je trouve que le fichier .myrwb.html est bien dans le fichier zip, mais pas directement.
Le fichier zip contient en fait toute l'arborescence (noms de fichiers) du fichier et au bout le fichier lui-même que je parviens à extraire avec 7-zip
voir https://www.alma-musica.net/html/partitions/tests/AuClairDeLaLune.myrweb.html.zip
Si je veux obtenir ce que je cherche, c'est à dire un fichier .zip qui ne contient que le fichier à zipper sans arborescence, il va falloir trouver un moyen de feinter le programme.
Modifié par PapyJP (09 Jun 2024 - 17:14)
Une fois cela compris, en relisant https://www.php.net/manual/fr/ziparchive.addfile.php
on trouve une note ajoutée par un utilisateur :
Comme quoi RTFM est bien la solution de la plupart des problèmes !
on trouve une note ajoutée par un utilisateur :
a écrit :
jayarjo ¶
14 years ago
It is not obvious, since there are no noticeable examples around, but you can use $localname (second parameter) to define and control file/directory structure inside the zip. Use it if you do not want files to be included with their absolute directory tree.
<?php
$zip->addFile($abs_path, $relative_path);
?>
Comme quoi RTFM est bien la solution de la plupart des problèmes !
... mais en écrivant
ça ne marche pas davantage, j'ai toujours l'arborescence.
ça doit être un peu plus plus subtil
C'est lisible par 7-zip mais je ne peux pas exiger de mes utilisateurs de savoir aussi utiliser 7-zip, même si c'est gratuit, me semble-t-il.
$archive -> addFile($path, basename($path));
ça ne marche pas davantage, j'ai toujours l'arborescence.
ça doit être un peu plus plus subtil
C'est lisible par 7-zip mais je ne peux pas exiger de mes utilisateurs de savoir aussi utiliser 7-zip, même si c'est gratuit, me semble-t-il.
L'astuce serait de faire une copie de ton fichier dans le répertoire où se trouve le script et de zipper celui-ci en n'indiquant que le nom de fichier.
Le script cherchera et prendra le fichier au nom correspondant dans le répertoire courant, il n'y aura pas d'arborescence distante à reproduire .
Le plus simple est de mettre ton script directement dans le dossier des fichiers HTML , soit en le déplaçant, soit via un include() , tu n'auras plus qu'a donner le nom de fichier en variable $path
cdt
Modifié par gcyrillus (09 Jun 2024 - 19:59)
Le script cherchera et prendra le fichier au nom correspondant dans le répertoire courant, il n'y aura pas d'arborescence distante à reproduire .
Le plus simple est de mettre ton script directement dans le dossier des fichiers HTML , soit en le déplaçant, soit via un include() , tu n'auras plus qu'a donner le nom de fichier en variable $path
cdt
Modifié par gcyrillus (09 Jun 2024 - 19:59)
Bonjour,
Étonnant que le 2e paramètre conserve une arborescence. Le Zip existant est bien supprimé avant d'en créer un nouveau ?
En mettant une valeur en dur addFile(..., "page.html") ?
Sinon autre commentaire qui semble intéressant :
EDIT : je me demande bien ce que ça peut changer au schmilblick, mais mes connaissances en format Zip se résument à "les 2 premiers caractères d'un Zip sont PK"
Modifié par Felipe (10 Jun 2024 - 10:52)
Étonnant que le 2e paramètre conserve une arborescence. Le Zip existant est bien supprimé avant d'en créer un nouveau ?
En mettant une valeur en dur addFile(..., "page.html") ?
Sinon autre commentaire qui semble intéressant :
addFile PHP a écrit :
If you have problem with windows explorer reading zipfile created by linux, try:
$oZip->addFile ( $file_name, " " . basename ( $file_name ) )
That space " " should solve.
EDIT : je me demande bien ce que ça peut changer au schmilblick, mais mes connaissances en format Zip se résument à "les 2 premiers caractères d'un Zip sont PK"
Modifié par Felipe (10 Jun 2024 - 10:52)
Bingo !
C'est assez délirant et inexplicable, mais ça a l'air de marcher correctement pour mon fichier de test!
merci @gcyrillus et @Felipe, vous me retirez une énorme épine du pied.
Pour que vous saisissiez l'étendue de la chose :
Je fais des fichiers de travail pour une 50aine de partitions chaque année, mais chacune est corrigée au moins 10 fois en moyenne pour différentes raisons.
De plus je ne génère pas 1 fichier .myrzip.html par partition, mais 3 fichiers avec des paramètre internes différents, correspondant à différentes façons de travailler leurs partitions des utilisateurs.
Actuellement, je fais manuellement un fichier .zip par fichier .myrweb.html et je le transfère par ftp
Quand j'aurai réalisé l'utilitaire qui utilisera cette fonction, il me suffira de lancer cet utilitaire une fois sur un groupe de fichiers .myrweb.html, voire tous les fichiers de ce type dans la bibliothèque en ligne des partitions.
De plus je pourrai réaliser ensuite un programme qui remplace <script src="..."></script> par le contenu de ce fichier, ce qui rendra les fichiers .zip utilisable par des personnes qui ne sont pas connectées à internet (si! si!, ça existe dans les endroits reculés où on aime passer ses vacaces loin de tout avant de participer au stage de musique)
Je note le problème comme résolu, je reviendrai vous mettre au courant du développement de mon utilitaire.
C'est assez délirant et inexplicable, mais ça a l'air de marcher correctement pour mon fichier de test!
merci @gcyrillus et @Felipe, vous me retirez une énorme épine du pied.
Pour que vous saisissiez l'étendue de la chose :
Je fais des fichiers de travail pour une 50aine de partitions chaque année, mais chacune est corrigée au moins 10 fois en moyenne pour différentes raisons.
De plus je ne génère pas 1 fichier .myrzip.html par partition, mais 3 fichiers avec des paramètre internes différents, correspondant à différentes façons de travailler leurs partitions des utilisateurs.
Actuellement, je fais manuellement un fichier .zip par fichier .myrweb.html et je le transfère par ftp
Quand j'aurai réalisé l'utilitaire qui utilisera cette fonction, il me suffira de lancer cet utilitaire une fois sur un groupe de fichiers .myrweb.html, voire tous les fichiers de ce type dans la bibliothèque en ligne des partitions.
De plus je pourrai réaliser ensuite un programme qui remplace <script src="..."></script> par le contenu de ce fichier, ce qui rendra les fichiers .zip utilisable par des personnes qui ne sont pas connectées à internet (si! si!, ça existe dans les endroits reculés où on aime passer ses vacaces loin de tout avant de participer au stage de musique)
Je note le problème comme résolu, je reviendrai vous mettre au courant du développement de mon utilitaire.