Traduction avec le widget microsoft

Eléphanteau du PHP | 39 Messages

14 févr. 2016, 13:59

Bonjour Arthur

Voila ce que j'ai dans mon navigateur
http://127.0.0.1/siteweb/glob_recursive.php
il ne bouge pas, est-ce que c'est long pour balayer 49 répertoires?
La page php de glob recursive est en dessous

<?php
function glob_recursive($pattern, $flags = 0){
$files = glob($pattern, $flags);

foreach (glob(dirname($pattern).'/*', GLOB_ONLYDIR|GLOB_NOSORT) as $dir){
$files = array_merge($files, glob_recursive($dir.'/'.basename($pattern), $flags));
}

return $files;
}
?>

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 8464 Messages

15 févr. 2016, 00:14

Le code de glob_recursive() que tu montres là est juste la définition d'une fonction, mais il faut que tu l'appelle pour qu'elle fonctionne.

Reprend ton code précédent qui fonctionnait avec glob(), insère en fin de ton fichier le code de la fonction glob_recursive, et ensuite remplace simplement l'appel à glob() par glob_recursive dans ton code précédent.
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 39 Messages

15 févr. 2016, 09:54

Bonjour Arthur
Le précédent code (modif_traduction.php placé sur la racine du site ne trouvait que le fichier robots.txt
Le précédent code (modif_traduction.php avec *.htm), ne fonctionnait que si je l'intégré dans un répertoire, non sur la racine
le code recursive que j'ai nommé glob_recursive.php ne rapatrie rien ni sur la racine du site ni dans un répertoire
Je pense que c'est la construction de mon site qui pose problème
quand je cherche une page il me met dans la barre de recherche
www.histoirdefrance.fr/ficphp/treemenu11/accueil.html
si j'ouvre un fichier dans le menu il ne l'affiche pas
Je peux te proposer de te donner mon code d'accès ftp, tu pourrais te rendre compte

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 8464 Messages

15 févr. 2016, 10:11

le code recursive que j'ai nommé glob_recursive.php ne rapatrie rien ni sur la racine du site ni dans un répertoire
Le code que tu as donné ne fait juste rien, c'est donc normal qu'il ne t'affiche rien.
Il s'agit uniquement de la définition de la fonction glob_recursive(), mais pour que ça t'affiche quelque chose, il faut que tu appelles cette fonction.

Reprend ton code précédent qui fonctionnait avec glob(), insère en fin de ton fichier le code de la fonction glob_recursive, et ensuite remplace simplement l'appel à glob() par glob_recursive dans ton code précédent.

Je pense que c'est la construction de mon site qui pose problème
Là on cherche juste à modifier en masse des fichiers HTML donc du moment que tu as des fichiers .html dans des répertoires et sous-répertoires, ça va marcher.
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 39 Messages

15 févr. 2016, 10:51

Voila le script le premier de glob et en dessous celui de recursive dans un fichier renommé demo_traduction.php
Désolé mais sur la racine comme dans répertoire, ca ne me donne que les fichiers hors repertoire il n'entre pas dans les répertoires
<?php
foreach (glob("*.htm") as $filename) {
    echo "$filename occupe " . filesize($filename) . "\n";
}
?>
<?php
function glob_recursive($pattern, $flags = 0){
  $files = glob($pattern, $flags);

  foreach (glob(dirname($pattern).'/*', GLOB_ONLYDIR|GLOB_NOSORT) as $dir){
    $files = array_merge($files, glob_recursive($dir.'/'.basename($pattern), $flags));
  }

  return $files;
}
?>

Mammouth du PHP | 1634 Messages

15 févr. 2016, 11:18

<?php
foreach (glob_recursive("*.htm") as $filename) {
    echo "$filename occupe " . filesize($filename) . "\n";
}
?>
<?php
function glob_recursive($pattern, $flags = 0){
  $files = glob($pattern, $flags);

  foreach (glob(dirname($pattern).'/*', GLOB_ONLYDIR|GLOB_NOSORT) as $dir){
    $files = array_merge($files, glob_recursive($dir.'/'.basename($pattern), $flags));
  }

  return $files;
}
?>
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone de rubik's cube
Ingénieur Industriel Chimie / Biochimie

Eléphanteau du PHP | 39 Messages

15 févr. 2016, 18:57

Bonsoir Arthur

Un petit problème avec mon PC et avec mon serveur. Réinstallation à partir d'une sauvegarde
Cette fois le script que tu m'as envoyé m'a listé tous mes fichiers
Que dois-je en faire ? dois-je le sauvegarder ? et sous quelle extension

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 8464 Messages

15 févr. 2016, 22:14

C'est Spols qui t'a répondu pour ce dernier bout de code, merci à lui. ;-)

Garde ce fichier tel quel pour l'instant, on a fini l'étape 1 !


Étape 2 : ouvrir 1 fichier et le modifier
- Crée un nouveau fichier PHP appelé par exemple modif_fichier.php
- Dedans tu mets le code suivant, bien sûr en indiquant un exemple de fichier HTML que tu veux modifier :
<?php

// On initialise la variable $filename avec le nom d'un fichier HTML à modifier (si il est dans un répertoire, il faut indiquer le répertoire avant   repertoire/fichier_a_modif.html)
$filename = "fichier_a_modifier2.html";
// On copie colle ici le code à injecter dans chaque page
$code_traduction="<div id='MicrosoftTranslatorWidget' class='Dark' style='color:white;background-color:#555555'></div><script type='text/javascript'>setTimeout(function(){{var s=document.createElement('script');s.type='text/javascript';s.charset='UTF-8';s.src=((location && location.href && location.href.indexOf('https') == 0)?'https://ssl.microsofttranslator.com':'http://www.microsofttranslator.com')+'/ajax/v3/WidgetV3.ashx?siteData=ueOIGRSKkd965FeEGM5JtQ**&ctf=False&ui=true&settings=Manual&from=';var p=document.getElementsByTagName('head')[0]||document.documentElement;p.insertBefore(s,p.firstChild); }},0);</script>";


// On récupère le contenu du fichier et on le stocke dans une variable
$contenu_du_fichier = file_get_contents($filename);

// On injecte le code du widget de traduction
$contenu_du_fichier_modifie = $contenu_du_fichier;

// On vérifie si on trouve la balise <body...>, et si le fichier n'a pas deja ete modifie
if (preg_match("`(<body[^>]*>)`i", $contenu_du_fichier) && !preg_match("`<!-- Debut code traduction -->`i", $contenu_du_fichier)) {

	// On a trouvé la balise <body> => on injecte juste après le code pour la traduction
	$contenu_du_fichier_modifie = preg_replace("`(<body[^>]*>)`i", "$1\r\n<!-- Debut code traduction -->\r\n".$code_traduction."\r\n<!-- Fin du code traduction -->\r\n", $contenu_du_fichier);

	// Et enfin on enregistre le résultat dans le fichier intial
	if (file_put_contents($filename, $contenu_du_fichier_modifie)) {
		echo $filename." mis a jour avec succes !<br />";
	}else{
		echo $filename." : [ERREUR] Probleme d'ecriture du fichier<br />";
	}

}else{
	// La balise <body...> n'a pas ete trouvee => on affiche un message d'erreur
	echo $filename." : [ERREUR] Balise <body...> non trouvee OU Code deja injecte<br />";
}
Pour gagner du temps, je te fournis le code complet en PHP, lit bien les commentaires et dit moi ce que tu ne comprends pas.
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 39 Messages

16 févr. 2016, 09:29

Bonjour Arthur

Encore merci, peut-on insérer à la place du script microsoft widget celui de google, je l'ai mis en dessous, puis-je remplacer le script complet par celui de google l'image de google est moins importante que celle de microsoft

<div id="google_translate_element"></div><script type="text/javascript">
function googleTranslateElementInit() {
new google.translate.TranslateElement({pageLanguage: 'fr', includedLanguages: 'ar,da,de,el,en,eo,es,fi,ga,hi,hr,hu,it,iw,ja,km,nl,no,pl,pt,ru,sv,zh-CN,zh-TW'}, 'google_translate_element');
}
</script><script type="text/javascript" src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 8464 Messages

16 févr. 2016, 10:14

Oui tu peux sans problème en mettant le code du widget de Google dans la variable $code_traduction.
Attention à bien échapper les guillemets doubles avec un antislashes devant
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 39 Messages

16 févr. 2016, 11:56

Je vais juste remplacer la partie <div id=" microsoft.......par <div id="google
je ne vais pas supprimer ton 1er script, je vais renommer le second

Eléphanteau du PHP | 39 Messages

16 févr. 2016, 12:07

C'est fait, j'ai les deux scripts php sur la racine de mon site

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 8464 Messages

17 févr. 2016, 02:13

Quand tu lances le dernier script en indiquant un de tes fichiers HTML dans la variable $filename, est-ce que ça fonctionne et t'ajoute bien le code de traduction ?
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 39 Messages

17 févr. 2016, 09:36

Bonjour Arthur

Quand je lance le fichier avec Microsoft j'obtiens le code d'erreur qui suit
Warning: file_get_contents(annexe_de_l'histoire_de_france.htm): failed to open stream: No such file or directory in c:\program files\easyphp1-7\www\siteweb\modif_fichiers.php on line 10
annexe_de_l'histoire_de_france.htm : [ERREUR] Balise non trouvee OU Code deja injecte

Quand je lance le fichier avec google j'obtiens le code d'erreur qui suit
Parse error: parse error, unexpected T_STRING in c:\program files\easyphp1-7\www\siteweb\modif_fichiers_google.php on line 6
La ligne 6 c'est juste là que le changement de translate se fait entre microsoft et google, j'ai peut-être fait une erreur en changeant le script, je le met à la suite

<?php
// On initialise la variable $filename avec le nom d'un fichier HTML à modifier (si il est dans un répertoire, il faut indiquer le répertoire avant repertoire/fichier_a_modif.html)
$filename = "annexe_de_l'histoire_de_france.htm";
// On copie colle ici le code à injecter dans chaque page
$code_traduction="<div id="google_translate_element"></div><script type="text/javascript">
function googleTranslateElementInit() {
new google.translate.TranslateElement({pageLanguage: 'fr', includedLanguages: 'ar,da,de,el,en,eo,es,fi,ga,hi,hr,hu,it,iw,ja,km,nl,no,pl,pt,ru,sv,zh-CN,zh-TW'}, 'google_translate_element');
}
</script><script type="text/javascript" src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>


// On récupère le contenu du fichier et on le stocke dans une variable
$contenu_du_fichier = file_get_contents($filename);

// On injecte le code du widget de traduction
$contenu_du_fichier_modifie = $contenu_du_fichier;

// On vérifie si on trouve la balise <body...>, et si le fichier n'a pas deja ete modifie
if (preg_match("`(<body[^>]*>)`i", $contenu_du_fichier) && !preg_match("`<!-- Debut code traduction -->`i", $contenu_du_fichier)) {

// On a trouvé la balise <body> => on injecte juste après le code pour la traduction
$contenu_du_fichier_modifie = preg_replace("`(<body[^>]*>)`i", "$1\r\n<!-- Debut code traduction -->\r\n".$code_traduction."\r\n<!-- Fin du code traduction -->\r\n", $contenu_du_fichier);

// Et enfin on enregistre le résultat dans le fichier intial
if (file_put_contents($filename, $contenu_du_fichier_modifie)) {
echo $filename." mis a jour avec succes !<br />";
}else{
echo $filename." : [ERREUR] Probleme d'ecriture du fichier<br />";
}

}else{
// La balise <body...> n'a pas ete trouvee => on affiche un message d'erreur
echo $filename." : [ERREUR] Balise <body...> non trouvee OU Code deja injecte<br />";
}

Eléphanteau du PHP | 39 Messages

17 févr. 2016, 11:14

autant pour moi, j'avais omis d'indiquer le répertoire de mon fichier
maintenant il me donne ce qui suit

Fatal error: Call to undefined function: file_put_contents() in c:\program files\easyphp1-7\www\siteweb\modif_fichiers.php on line 22

dans l'autre cas il me donne toujours erreur à la ligne 6 (endroit ou j'ai le script microsoft pour mettre google) tu m'avais prévenu d'échapper les guillemets double avec l'antislash.
J'ai mis le script plus haut, et j'ai ajouté le répertoire $filename = "accueil/annexe_de_l'histoire_de_france.htm"; malgré ca j'ai toujours erreur à la ligne 6