8768 sujets

Développement web côté serveur, CMS

Pages :
(reprise du message précédent)

hmm!
effectivement l'encodage n'est pas celui que je croyais.
Je pensais que
<meta charset="UTF-8">

aurait forcé l'encodage à utf-8

Compte tenu de la façon dont sont générés ces fichiers je ne sais pas très bien comment faire.
Je vais regarder ça de près
Modérateur
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).

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)
J'ai lu le fichier avec NotePad++ et modifié l'encodage qui est marqué "ANSI" en utf-8
J'obtiens le même résultat.
Modérateur
Sinon, utilise par exemple 7-zip pour lire l'archive , ce programme est plus efficace que les fonctions de base de windows.

cdt
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)
Une fois cela compris, en relisant https://www.php.net/manual/fr/ziparchive.addfile.php
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 ! Smiley smile
... mais en écrivant

$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.
Modérateur
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)
Administrateur
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 :
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)
Meilleure solution
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.
J'ai terminé mon utilitaire, je passe sur les astuces techniques dont j'ai eu besoin pour y parvenir, mais c'est bien cette façon de zipper un fichier qui est le point principal de cette solution.
Merci encore une fois à tous les membres du forums qui permettent à un retraité d'être moins seul.