[PHP] Quelques lignes qui transforment un fichier excel en extract CSV !

PTS-Sexy-Girls-Billiards-Snooker-Pool-HD-Wallpapers-Free-2

 

Coucou les d'jeun's !

 

Bon j'imagine que vous avez déjà préparé vos reserves de nourriture pour demain ?!?
Entre la grève SNCF et les manifestations contre la loi el khomri ...
Il risque d'y avoir du monde dehors ^^

Pour vous divertir une fois de plus, car je suis là pour ça (entre autres)
J'ai créé un court script PHP qui vous permet d'extraire les données d'un fichier excel, qu'importe qu'il soit sur plusieurs pages ou non, et de le formater en CSV !!!

 

/*

* Convert Excel to CSV
* V 1.0
* Dyrk.org
* (c) Dave Hill 2016 - 2017
*/

if (! isset($argv[1]) || ! is_file($argv[1]))
exit("[usage] ./$argv[0] myexcelfile.xlsx\n");

// Text Dictionnary
$handle = fopen("zip://$argv[1]#xl/sharedStrings.xml", 'r');
if ($handle){
$result = '';
while (!feof($handle)) $result .= fread($handle, 8192);
fclose($handle);
$content = str_replace("\n", "", $result);
if (preg_match_all('/\<si>(.*?)\<\/si>/s', $result, $match)){
$dico = $match[1];
foreach ($match[1] as $k => $v) $dico[$k] = strip_tags($v);
}
}


if (($zip = zip_open($argv[1]))) {
while ($zip_entry = zip_read($zip)) {
if (! zip_entry_open($zip, $zip_entry)) continue;
$filename = zip_entry_name($zip_entry);
if (preg_match("/xl\/worksheets\/sheet([0-9]{0,3}).xml/",$filename,$fileId)) {
// Open File
$filesize = intval(zip_entry_filesize($zip_entry));
$content = zip_entry_read($zip_entry, $filesize);
echo "\n\n\n\nFilename :; $filename;\n\n\n\n";
$rowReg = '/\<row [A-Za-z-0-9^_.:="\' ]{0,200}>(.*?)\<\/row>/s';
if (preg_match_all($rowReg, $content, $data)){
$rows = $data[1];
// Read All Data Line
foreach ($rows as $k => $v){
$colReg = '/\<c [A-Za-z-0-9^_.:="\' ]{0,200}(\>\<v>(.*?)\<\/v>|\/\>)/s';
if (preg_match_all($colReg, $v, $row)){
$rowData = $row[2];
// Extract All Record from Line
foreach ($rowData as $k => $v){
if (strstr($row[0][$k], 't="s"')) $v = str_replace("\n",'\n',$dico[$v]);
echo '"'.addslashes(($v=='/>')?'':$v).'";';
}
echo "\n";
}
}
}
}
zip_entry_close($zip_entry);
}
zip_close($zip);
}

 

Je sais que beaucoup me diront les Regex, c'est vintage, l'utilisation du DOM  c'est mieux :D

 

Et  vous aurez surement raison ..
Mais j'arrive avec ces quelques lignes à faire un extract CSV d'un fichier excel de 3 Mo en 1 seconde.
Ce qui à mon sens, n'est pas trop mal ;)

 

Capture

 

Maintenant à vous d'adapter en fonction de vos besoins ;)

 

 

Pour ceux qui veulent comprendre
comment ça marche !

 

Pour les plus curieux, je tiens à vous dire que j'ai exploré seul ces sentiers ...
Aussi, je peux vous certifier, que vous aurez surement un peu de mal à comprendre au début.
Je vous invite par conséquent à créer un petit fichier excel avec peu de contenu pour faire vos tests.

 

Capture

 

Un fichier excel n'est rien d'autre qu'une archive ...
Aussi en la renommant en .zip, vous pourrez explorer un peu ses entrailles !

 

Capture

 

 

Les diverses feuilles Excel que peut contenir votre document

Capture

 

Sont stockées ici dans le dossier xl\worksheets\

 

Capture

 

 

Ce sont tous les fichiers .xml, préfixés par un "sheet"
À l'intérieur vous découvrirez un fichier xml classique, avec toutes les lignes de votre feuille "<row>"

Capture

 

Et pour chaque ligne, vous aurez les cellules de celle-ci "<c>"

Capture

 

Exemple ici pour la ligne 1 : A1, B1, C1, ...

C'est là que ça se complique un peu ( mais pas trop ;) )
Comme je le montre sur la capture d'écran ci-dessous, certaines cellules affichent un t="s"
Ce "t", c'est le type, ça signifie "type string"
En gros .. le contenu de cette cellule sera une chaîne de caractères ...
Si tel n'est pas le cas, vous pourrez considérer que le contenu de la cellule est un chiffre / nombre "entier" ou un "float" (chiffre / nombre à virgule)

 

Aussi le contenu de chaque cellule sera représenté ainsi par <v> (value) :

 

Capture

Si c'est un entier, la valeur ici sera bien 0, sauf que comme vous êtes malin et que vous voyez ' t="s" ', vous vous doutez que ce qui est attendu ici c'est une chaîne de caractère  !
Et donc non, ici 0 ne sera pas la chaîne de caractères !
ça sera juste une information pour nous dire d'aller lire l’occurrence n°0 d'un fichier contenant les chaines de caractères !

Ce fichier c'est "xl/sharedStrings.xml" !

 

Capture

Donc nous irons lire ce fichier, et récupérer l’occurrence "0"
Quand je parle d’occurrence ...  c'est que les lignes ne sont pas numérotées ...
Excel considère que ce fichier est dans l'ordre et va ligne ligne par ligne ...
Chaque chaîne de caractères sera contenu entre <si> :

Capture

 

Bref en prenant donc l’occurrence 0 (la première)
Le contenu est entre <t> (texte)

 

Capture

 

 

Aussi, pour en revenir à notre exemple ...
La cellule A1, contiendra ici le texte "Mon Texte !"

 

Eh voilà !
Nous avons fait le tour de ce dont nous avons besoin de connaitre pour comprendre mieux le script fourni au début de cet article ;)

9 comments

  • Bonjour,
    Votre script semble répondre complètement à ce que je veux faire, mais voilà je ne suis pas du tout programmeur, ,et je ne comprends pas comment l’utiliser.
    Je suppose qu’il faut indiquer le chemin du fichier .xls pour pouvoir l’ouvrir et aussi ou le sauvegarder le .csv

    Merci d’avance si vous pouviez m’éclairer un peu à ce sujet.
    Cordialement
    Pascal

  • Bonjour,

    Ce post est très intéressant et m’a été très utile pour travailler avec un fichier de 13Mo !

    Je voudrais savoir comment effectuer le processus inverse ? C’est-à-dire passer du fichier csv à un fichier Excel ?

    Est-il possible de créer un fichier zip/excel à partir d’un fichier csv ?

  • Bonjour,

    merci pour ce code que je trouve super.

    J’ai juste une petite question.

    Comment savoir si une cellule est vide? Je ne trouve pas où faire le test dans le code.

    Merci

    • A pascal : si la cellule est vide elle est simplement « absente » du fichier XML. Il faut donc analyser $row[0][$k] qui contient le nom de la cellule pour reconstituer le colonage d’origine, indispensable pour faire un csv ! Sinon cela va décaler l’ordre des données ….

      C’est ce que je suis en train de faire…

      Sinon Merci à l’auteur pour ce code qui est une très bonne base de travail.

  • A pascal : si la cellule est vide elle est simplement « absente » du fichier XML. Il faut donc analyser $row[0][$k] qui contient le nom de la cellule pour reconstituer le colonage d’origine, indispensable pour faire un csv ! Sinon cela va décaler l’ordre des données ….

    C’est ce que je suis en train de faire…

    Sinon Merci à l’auteur pour ce code qui est une très bonne base de travail.

  • Bonjour,

    Merci pour ce code qui remplace bien phpExcel ! Je me permet de remettre le code car j’ai du modifier le nom du fichier xml de mon coté.

    [pastacode lang="php" manual="%0A%20%20%24handle%20%3D%20fopen(%22zip%3A%2F%2F%22.%24NomFinal.%22%23xl%2FsharedStrings.xml%22%2C%20'r')%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Ouvre%20le%20fichier%20xlsx%20en%20tant%20que%20fichier%20zip%20%24NomFinal%20%3D%20absence.xlsx%0A%20%20if%20(%24handle)%7B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Si%20le%20fichier%20est%20ouvert%0A%20%20%20%20%24result%20%3D%20''%3B%0A%20%20%20%20while%20(!feof(%24handle))%20%20%24result%20.%3D%20fread(%24handle%2C%208192)%3B%0A%20%20%20%20fclose(%24handle)%3B%0A%20%20%20%20%24content%20%3D%20str_replace(%22%5Cn%22%2C%20%22%22%2C%20%24result)%3B%0A%20%20%20%20if%20(preg_match_all('%2F%5C%3Csi%3E(.*%3F)%5C%3C%5C%2Fsi%3E%2Fs'%2C%20%24result%2C%20%24match))%7B%0A%20%20%20%20%20%20%20%24dico%20%3D%20%24match%5B1%5D%3B%0A%20%20%20%20%20%20%20foreach%20(%24match%5B1%5D%20as%20%24k%20%3D%3E%20%24v)%20%24dico%5B%24k%5D%20%3D%20strip_tags(%24v)%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20if%20((%24zip%20%3D%20zip_open(%24NomFinal)))%20%7B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Ouvre%20le%20zip%0A%20%20%20%20while%20(%24zip_entry%20%3D%20zip_read(%24zip))%20%7B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Lit%20le%20zip%0A%0A%20%20%20%20%20%20if%20(!%20zip_entry_open(%24zip%2C%20%24zip_entry))%20continue%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Ouvre%20le%20zip%20en%20lecture%0A%20%20%20%20%20%20%24filename%20%3D%20zip_entry_name(%24zip_entry)%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20On%20recupere%20les%20nom%20dans%20le%20zip%0A%0A%20%20%20%20%20%20if%20(preg_match(%22%2Fxl%5C%2Fworksheets%5C%2Fworksheet(%5B0-9%5D%7B0%2C3%7D).xml%2F%22%2C%24filename%2C%24fileId))%20%7B%20%20%20%20%20%20%20%20%2F%2F%20On%20lit%20le%20fichier%20worksheetXX.xml%0A%20%20%20%20%20%20%20%20%2F%2F%20%20Open%20File%0A%20%20%20%20%20%20%20%20%24filesize%20%3D%20intval(zip_entry_filesize(%24zip_entry))%3B%0A%20%20%20%20%20%20%20%20%24content%20%3D%20zip_entry_read(%24zip_entry%2C%20%24filesize)%3B%0A%20%20%20%20%20%20%20%20%24rowReg%20%20%20%20%20%3D%20'%2F%5C%3Crow%20%5BA-Za-z-0-9%5E_.%3A%3D%22%5C'%20%5D%7B0%2C200%7D%3E(.*%3F)%5C%3C%5C%2Frow%3E%2Fs'%3B%0A%20%20%20%20%20%20%20%20if%20(preg_match_all(%24rowReg%2C%20%24content%2C%20%24data))%7B%0A%20%20%20%20%20%20%20%20%20%20%24rows%20%3D%20%24data%5B1%5D%3B%0A%20%20%20%20%20%20%20%20%20%20foreach%20(%24rows%20as%20%24k%20%3D%3E%20%24v)%7B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Lit%20toutes%20les%20lignes%20du%20xsls%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%24colReg%20%3D%20'%2F%5C%3Cc%20%5BA-Za-z-0-9%5E_.%3A%3D%22%5C'%20%5D%7B0%2C200%7D(%5C%3E%5C%3Cv%3E(.*%3F)%5C%3C%5C%2Fv%3E%7C%5C%2F%5C%3E)%2Fs'%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(preg_match_all(%24colReg%2C%20%24v%2C%20%24row))%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24rowData%20%3D%20%24row%5B2%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20%20%20%20%20%20%20Extract%20All%20Record%20from%20Line%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20foreach%20(%24rowData%20as%20%24k%20%3D%3E%20%24v)%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(strstr(%24row%5B0%5D%5B%24k%5D%2C%20't%3D%22s%22'))%20%24v%20%3D%20str_replace(%22%5Cn%22%2C'%5Cn'%2C%24dico%5B%24v%5D)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20echo%20'%22'.addslashes((%24v%3D%3D'%2F%3E')%3F''%3A%24v).'%22%3B'%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Affichage%20donn%C3%A9e%20du%20xsls%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20%2F%2Fforeach%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20echo%20%22%5Cn%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20%2F%2Fif%0A%20%20%20%20%20%20%20%20%20%20%7D%20%2F%2Fforeach%0A%20%20%20%20%20%20%20%20%7D%20%2F%2Fif%0A%20%20%20%20%20%20%7D%20%2F%2Fif%0A%20%20%20%20%20%20zip_entry_close(%24zip_entry)%3B%0A%20%20%20%20%7D%20%2F%2Fwhile%0A%20%20%20zip_close(%24zip)%3B%0A%20%7D%20%2F%2Fif" message="script" highlight="20" provider="manual"/]

    • Bonjour Bob,

      S’il vous plaît, pouvez-vous me faire voir le script complet qui fonctionne (le formulaire pour choisir le fichier à convertir et la page php de traitement) ?

      Je vois que ce script correspond bien à ce que je cherche, mais j’arrive pas à le manier pour afin obtenir le fichier csv.

      Votre aide me serait très utile, car je suis un débutant en php

      Je vous fais voir mes codes, juste pour vous donner l’idée de ce que je veux faire (je précise que je suis un débutant en php) :

      Formulaire

      [pastacode lang="markup" manual="%09%09%09%09%09%09%09%09%3Cform%20id%3D%22%22%20action%3D%22admin%2Fconversion.php%22%20method%3D%22post%22%20enctype%3D%22multipart%2Fform-data%22%20style%3D%22margin-top%3A%20-25px%3B%22%3E%0A%09%09%09%09%09%09%09%09%09%3Cdiv%20class%3D%22form-row%22%3E%0A%09%09%09%09%09%09%09%09%09%09%3Clabel%20class%3D%22col-md-4%20control-label%22%3EChoisir%20un%20fichier%20Excel%3C%2Flabel%3E%0A%09%09%09%09%09%09%09%09%09%09%3Cinput%20type%3D%22file%22%20name%3D%22file%22%20id%3D%22file%22%20accept%3D%22.xls%2C.xlsx%22%3E%26nbsp%3B%26nbsp%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cbutton%20type%3D%22submit%22%20value%3D%22Import%22%20id%3D%22converter%22%20name%3D%22import%22%20class%3D%22btn-submit%22%20style%3D%22height%3A%2025px%3B%22%3E%0A%09%09%09%09%09%09%09%09%09%09%09%3Ci%20class%3D%22fas%20fa-download%22%3E%3C%2Fi%3E%26nbsp%3BConvertir%3C%2Fbutton%3E%26nbsp%3B%0A%09%09%09%09%09%09%09%09%09%09%3Cbutton%20type%3D%22reset%22%20id%3D%22itemClear%22%20class%3D%22btn-reset%22%20style%3D%22height%3A%2025px%3B%22%3E%0A%09%09%09%09%09%09%09%09%09%09%09%3Ci%20class%3D%22fas%20fa-times%22%3E%3C%2Fi%3E%3C%2Fbutton%3E%0A%09%09%09%09%09%09%09%09%09%09%3Cbr%20%2F%3E%0A%09%09%09%09%09%09%09%09%09%3C%2Fdiv%3E%0A%09%09%09%09%09%09%09%09%3C%2Fform%3E" message="Formulaire" highlight="" provider="manual"/]

      Page de traitement,

      conversion.php:

      [pastacode lang="php" manual="%3C%3Fphp%0A%2F*%0A*%20%20%20%20%20%20%20%20%20%20%20%20%20Convert%20Excel%20to%20CSV%0A*%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20V%201.0%0A*%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Dyrk.org%0A*%20%20%20%20%20%20%20%20%20%20(c)%20Dave%20Hill%202016%20-%202017%0A*%2F%0A%0Aif%20(!%20isset(%24argv%5B1%5D)%20%7C%7C%20!%20is_file(%24argv%5B1%5D))%0A%09exit(%22%5Busage%5D%20.%2F%24argv%5B0%5D%20myexcelfile.xlsx%5Cn%22)%3B%0A%0A%2F%2F%20%20%20%20%20%20%20Text%20Dictionnary%0A%24handle%20%3D%20fopen(%22zip%3A%2F%2F%24argv%5B1%5D%23xl%2FsharedStrings.xml%22%2C%20'r')%3B%0Aif%20(%24handle)%20%7B%0A%09%24result%20%3D%20''%3B%0A%09while%20(!feof(%24handle))%0A%09%09%24result%20.%3D%20fread(%24handle%2C%208192)%3B%0A%09fclose(%24handle)%3B%0A%09%24content%20%3D%20str_replace(%22%5Cn%22%2C%20%22%22%2C%20%24result)%3B%0A%09if%20(preg_match_all('%2F%5C%3Csi%3E(.*%3F)%5C%3C%5C%2Fsi%3E%2Fs'%2C%20%24result%2C%20%24match))%20%7B%0A%09%09%24dico%20%3D%20%24match%5B1%5D%3B%0A%09%09foreach%20(%24match%5B1%5D%20as%20%24k%20%3D%3E%20%24v)%0A%09%09%09%24dico%5B%24k%5D%20%3D%20strip_tags(%24v)%3B%0A%09%7D%0A%7D%0A%0A%0Aif%20((%24zip%20%3D%20zip_open(%24argv%5B1%5D)))%20%7B%0A%09while%20(%24zip_entry%20%3D%20zip_read(%24zip))%20%7B%0A%09%09if%20(!%20zip_entry_open(%24zip%2C%20%24zip_entry))%0A%09%09%09continue%3B%0A%09%09%24filename%20%3D%20zip_entry_name(%24zip_entry)%3B%0A%09%09if%20(preg_match(%22%2Fxl%5C%2Fworksheets%5C%2Fsheet(%5B0-9%5D%7B0%2C3%7D).xml%2F%22%2C%24filename%2C%24fileId))%20%7B%0A%09%09%09%2F%2F%20%20%20%20%20Open%20File%0A%09%09%09%24filesize%20%3D%20intval(zip_entry_filesize(%24zip_entry))%3B%0A%09%09%09%24content%20%3D%20zip_entry_read(%24zip_entry%2C%20%24filesize)%3B%0A%09%09%09echo%20%22%5Cn%5Cn%5Cn%5CnFilename%20%3A%3B%20%24filename%3B%5Cn%5Cn%5Cn%5Cn%22%3B%0A%09%09%09%24rowReg%20%20%20%20%20%3D%20'%2F%5C%3Crow%20%5BA-Za-z-0-9%5E_.%3A%3D%22%5C'%20%5D%7B0%2C200%7D%3E(.*%3F)%5C%3C%5C%2Frow%3E%2Fs'%3B%0A%09%09%09if%20(preg_match_all(%24rowReg%2C%20%24content%2C%20%24data))%20%7B%0A%09%09%09%09%24rows%20%3D%20%24data%5B1%5D%3B%0A%09%09%09%09%2F%2F%20%20%20%20%20%20%20Read%20All%20Data%20Line%0A%09%09%09%09foreach%20(%24rows%20as%20%24k%20%3D%3E%20%24v)%20%7B%0A%09%09%09%09%09%24colReg%20%3D%20'%2F%5C%3Cc%20%5BA-Za-z-0-9%5E_.%3A%3D%22%5C'%20%5D%7B0%2C200%7D(%5C%3E%5C%3Cv%3E(.*%3F)%5C%3C%5C%2Fv%3E%7C%5C%2F%5C%3E)%2Fs'%3B%0A%09%09%09%09%09if%20(preg_match_all(%24colReg%2C%20%24v%2C%20%24row))%20%7B%0A%09%09%09%09%09%09%24rowData%20%3D%20%24row%5B2%5D%3B%0A%09%09%09%09%09%09%2F%2F%20%20%20%20%20%20%20Extract%20All%20Record%20from%20Line%0A%09%09%09%09%09%09foreach%20(%24rowData%20as%20%24k%20%3D%3E%20%24v)%20%7B%0A%09%09%09%09%09%09%09if%20(strstr(%24row%5B0%5D%5B%24k%5D%2C%20't%3D%22s%22'))%0A%09%09%09%09%09%09%09%09%24v%20%3D%20str_replace(%22%5Cn%22%2C'%5Cn'%2C%24dico%5B%24v%5D)%3B%0A%09%09%09%09%09%09%09echo%20'%22'.addslashes((%24v%3D%3D'%2F%3E')%3F''%3A%24v).'%22%3B'%3B%0A%09%09%09%09%09%09%7D%0A%09%09%09%09%09%09echo%20%22%5Cn%22%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%7D%0A%09%09%09%7D%0A%09%09%7D%0A%09%09zip_entry_close(%24zip_entry)%3B%0A%09%7D%0A%09zip_close(%24zip)%3B%0A%7D%0A%3F%3E" message="conversion.php" highlight="" provider="manual"/]

       

  • Bonjour, 2022 et avec php 8.0+, les fonctions zip_* sont obsolètes :)

    J’ai donc mis à jour en utilisant la class ZipArchive, en réadaptant un peu à ma sauce également !

     

    [pastacode lang="php" manual="function%20get_intels_from_xls(%24url)%20%7B%0A%09%09if(is_string(%24url)%20AND%20!empty(%24url))%20%7B%0A%09%09%09%24file%20%3D%20%24url%3B%20%2F%2F%20Traitements%20de%20l'URL%20si%20besoin%20auparavant%0A%09%09%09%0A%09%09%09if(file_exists(%24file))%20%7B%0A%09%09%09%09%24handle%20%3D%20fopen('zip%3A%2F%2F'.%24file.'%23xl%2FsharedStrings.xml'%2C%20'r')%3B%0A%09%09%09%09if(%24handle)%20%7B%0A%09%09%09%09%09%24result%20%3D%20''%3B%0A%09%09%09%09%09while(!feof(%24handle))%20%7B%20%24result%20.%3D%20fread(%24handle%2C%208192)%3B%20%7D%0A%09%09%09%09%09fclose(%24handle)%3B%0A%09%09%09%09%09%24content%20%3D%20str_replace(%22%5Cn%22%2C%20%22%22%2C%20%24result)%3B%0A%09%09%09%09%09if(preg_match_all('%2F%5C%3Csi%3E(.*%3F)%5C%3C%5C%2Fsi%3E%2Fs'%2C%20%24result%2C%20%24match))%20%7B%0A%09%09%09%09%09%09%24dico%20%3D%20%24match%5B1%5D%3B%0A%09%09%09%09%09%09foreach(%24match%5B1%5D%20as%20%24k%20%3D%3E%20%24v)%20%7B%20%24dico%5B%24k%5D%20%3D%20strip_tags(%24v)%3B%20%7D%0A%09%09%09%09%09%7D%0A%09%09%09%09%7D%0A%09%09%09%09%0A%09%09%09%09%24zip%20%3D%20new%20ZipArchive%3B%0A%09%09%09%09%24res%20%3D%20%24zip-%3Eopen(%24file)%3B%0A%0A%09%09%09%09if(%24res%20%3D%3D%3D%20TRUE)%20%7B%0A%09%09%09%09%09%24return%20%3D%20array()%3B%0A%09%09%09%09%09%0A%09%09%09%09%09%24nbr_files%20%3D%20%24zip-%3EnumFiles%3B%0A%09%09%09%09%09%24rowReg%20%3D%20'%2F%5C%3Crow%20%5BA-Za-z-0-9%5E_.%3A%3D%22%5C'%20%5D%7B0%2C200%7D%3E(.*%3F)%5C%3C%5C%2Frow%3E%2Fs'%3B%0A%09%09%09%09%09%24colReg%20%3D%20'%2F%5C%3Cc%20%5BA-Za-z-0-9%5E_.%3A%3D%22%5C'%20%5D%7B0%2C200%7D(%5C%3E%5C%3Cv%3E(.*%3F)%5C%3C%5C%2Fv%3E%7C%5C%2F%5C%3E)%2Fs'%3B%0A%09%09%09%09%09%0A%09%09%09%09%09for(%24i%20%3D%200%3B%20%24i%20%3C%20%24nbr_files%3B%20%24i%2B%2B)%20%7B%0A%09%09%09%09%09%09%24filename%20%3D%20%24zip-%3EgetNameIndex(%24i)%3B%0A%09%09%09%09%09%09%0A%09%09%09%09%09%09if(%24filename%20AND%20preg_match(%22%2Fxl%5C%2Fworksheets%5C%2Fsheet(%5B0-9%5D%7B0%2C3%7D).xml%2Fis%22%2C%24filename%2C%24fileId))%20%7B%0A%09%09%09%09%09%09%09%24fileIntels%20%3D%20%24zip-%3EstatIndex(%24i)%3B%0A%09%09%09%09%09%09%09%24filesize%20%3D%20intval(%24fileIntels%5B'size'%5D)%3B%0A%09%09%09%09%09%09%09%24content%20%3D%20%24zip-%3EgetFromIndex(%24i)%3B%0A%09%09%09%09%09%09%09%0A%09%09%09%09%09%09%09if(preg_match_all(%24rowReg%2C%20%24content%2C%20%24data))%20%7B%0A%09%09%09%09%09%09%09%09%24rows%20%3D%20%24data%5B'1'%5D%3B%0A%09%09%09%09%09%09%09%09foreach(%24rows%20as%20%24k%20%3D%3E%20%24v)%20%7B%0A%09%09%09%09%09%09%09%09%09if(preg_match_all(%24colReg%2C%20%24v%2C%20%24row))%20%7B%0A%09%09%09%09%09%09%09%09%09%09%24rowData%20%3D%20%24row%5B2%5D%3B%0A%09%09%09%09%09%09%09%09%09%09foreach(%24rowData%20as%20%24kk%20%3D%3E%20%24vv)%20%7B%0A%09%09%09%09%09%09%09%09%09%09%09if(strstr(%24row%5B0%5D%5B%24kk%5D%2C%20't%3D%22s%22'))%20%7B%20%24vv%20%3D%20str_replace(%22%5Cn%22%2C'%5Cn'%2C%24dico%5B%24vv%5D)%3B%20%7D%0A%09%09%09%09%09%09%09%09%09%09%09%24return%5B%24k%5D%5B%24kk%5D%20%3D%20addslashes((%24vv%3D%3D'%2F%3E')%3F''%3A%24vv)%3B%0A%09%09%09%09%09%09%09%09%09%09%7D%0A%09%09%09%09%09%09%09%09%09%7D%0A%09%09%09%09%09%09%09%09%7D%0A%09%09%09%09%09%09%09%7D%0A%09%09%09%09%09%09%7D%0A%09%09%09%09%09%7D%0A%09%09%09%09%09%0A%09%09%09%09%09%24zip-%3Eclose()%3B%0A%09%09%09%09%09%0A%09%09%09%09%09if(!empty(%24return))%20%7B%0A%09%09%09%09%09%09return%20%24return%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%7D%0A%09%09%09%7D%0A%09%09%7D%0A%09%09%0A%09%09return%20false%3B%0A%09%7D" message="" highlight="" provider="manual"/]

Répondre à Bob Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site est protégé par reCAPTCHA et le GooglePolitique de confidentialité etConditions d'utilisation appliquer.