2017-07-20 6 views
1

je ce code:commande shell avec des options de php

$codif ="file --mime-encoding -b inputfile.txt"; 
$codif = shell_exec($codif); 
$encode = "iconv --from-code=$codif --to-code=UTF-8 --output=tempfile.txt inputfile.txt"; 

J'ai essayé

shell_exec($encode); //1 
exec($encode); //2 
system($encode); //3 

Et je cela juste pour voir quelle est la commande générée:

echo $encode; 

Qui émet ceci:

iconv --from-code=iso-8859-1 --to-code=UTF-8 --output=tempfile.txt inputfile.txt 

Le problème est que, avec l'une des trois formes d'exécution de la commande je reçois l'erreur suivante:

sh: 2: --to-code=UTF-8: not found 

en exécutant la commande de sortie au shell fonctionne parfaitement. J'ai également essayé de changer le --to-code=UTF-8 en -t UTF-8 avec les mêmes résultats. Donc, les questions sont, qu'est-ce que je fais mal et comment y remédier? Merci!

Répondre

1

Vous avez une nouvelle ligne à la fin de la variable $ codif, qui salit les choses en l'air Cela doit être supprimé d'une manière ou d'une autre. Vous pouvez essayer par exemple:

$codif ="file --mime-encoding -b inputfile.txt|tr -d '\n'"; 
$codif = shell_exec($codif); 

sortie de tuyauterie de commande file à tr -d "\n" supprimera la nouvelle ligne. Vous pouvez bien sûr supprimer cela dans le code php.

+0

Oui, vous l'avez frappé! Merci beaucoup! –

0

Essayez de changer $encode var:

iconv -f $codif -t UTF-8 --output=tempfile.txt inputfile.txt

quelque chose de sortie comme:

iconv -f iso-8859-1 -t UTF-8 --output=tempfile.txt inputfile.txt

+0

Désolé je ne vous ai pas eu avant, oui changer à une valeur fixe le fait fonctionner, mais j'ai besoin de la partie de détection d'encodage, donc c'est ce qui échoue. –

+0

De toute façon j'ai essayé aussi de changer '--from-code =' '-f' qui ne fonctionne pas, mais en changeant la variable' $ codif' en une valeur fixe 'iso-8859-1' le fait fonctionner. Donc, le problème semble être d'obtenir la valeur de la variable à l'heure pour exécuter de commad. –