transformer une commande bash pour l'inclure dans mon php

Eléphanteau du PHP | 31 Messages

21 févr. 2020, 17:57

bonjour,

J'ai une commande bash pour transformer des numéros de téléphone qui viennent de nextcloud pour les mettre dans la vcard pour mes téléphones fixes gigaset.

awk -v FS=OFS=$separ 'NR==1 {print ; next} {gsub(" ","",$8); gsub("+33","70",$8); gsub(" ","",$9); gsub("+33","70",$9); gsub(" ","",$10); gsub("+33","70",$10); print '

En gros, il transforme un numéro de téléphone de ce type '+33 1 23 45 67 89' en '70123456789'

Dans mon php, j'ai déjà la notion à qui va être destinée la vcard.

C'est facile à faire en php cette transformation?

Merci
Anne

Avatar du membre
Mammouth du PHP | 1609 Messages

21 févr. 2020, 18:26

Si l'idée c'est supprimer les espaces et remplacer le +33 du début en 70 si présent, oui c'est simple :
$phone = '+33 1 23 45 67 89';
$phone = str_replace([' ', '+33'], ['', '70'], $phone);
echo $phone;// 70123456789
https://www.php.net/manual/fr/function.str-replace.php
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 31 Messages

21 févr. 2020, 18:52

Ce que j'avais fait :
$phone0 = str_replace(" ", "",$phone0);
$phone0 = str_replace("+33", "70",$phone0);
print "TEL;HOME:".$phone0.$fin_ligne; // phone0

J'avais testé cela...
il disait que str_replace était plus léger que preg_replace

Ton truc est mieux, c'est fait en une ligne!

Merci
Anne

Avatar du membre
Mammouth du PHP | 1609 Messages

21 févr. 2020, 19:03

Ce que tu avais fait est bien mais en effet tu peux le faire en une ligne en passant un tableau de $search et un tableau de $replace. Le premier search est remplacé par le premier replace le second par le second etc.

Le preg_replace n'est pas ici nécessaire car il n'y a pas besoin d'écrire un pattern de recherche complexe.
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 31 Messages

21 févr. 2020, 19:58

PHP Parse error: syntax error, unexpected '[', expecting ')' in
$phone0 = str_replace([' ', '+33'],['', '70'], $phone0);
J'ai essayé
$phone0 = str_replace([" ", "+33"], ["", "70"], $phone0);

Où est l'erreur?

Anne

Avatar du membre
Mammouth du PHP | 1609 Messages

21 févr. 2020, 20:02

La version de php peut être.
$phone0 = str_replace(array(' ', '+33'), array('', '70'), $phone0);
Développeur web depuis + de 20 ans

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

21 févr. 2020, 20:07

Effectivement les crochets pour remplacer le mots-clés Array() ont été intégré en PHP 5.4

Par contre, si tu en as la possibilité, il est important de passer à une version plus récente de PHP car la version 5.4 est sortie en 2012 et n'a plus de support depuis 5 ans...
Quand tout le reste a échoué, lisez le mode d'emploi...

Avatar du membre
Mammouth du PHP | 1609 Messages

22 févr. 2020, 02:28

PS : il n'y a pas de différence entre les simples et doubles guillemets si ce n'est qu'avec des doubles, php va interpréter les variables présentes dans la chaine, ce qu'il ne fait pas quand la chaîne est entre simples guillemets.
$simple = 'double';
echo "simple ou double ? $simple";// simple ou double ? double
echo 'simple ou double ? $simple';// simple ou double ? $simple

PPS : j'oubliais aussi pour les guillemets doubles, l'interprétation d'un certain nombre de caractères spéciaux comme \t \r \n etc
https://www.php.net/manual/fr/language.types.string.php
Y a pleins d'exemples intéressants. ^^
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 31 Messages

22 févr. 2020, 17:52

mon serveur est avec php 5.3.3, trouvé avec phpinfo.
Mais il y a aussi php56, php70, php71, php72, php73 suite à des contribs que j'ai installé sur mon serveur.

On me dit d'installer php software collection: https://www.softwarecollections.org/en/ ... php&page=1
https://blog.remirepo.net/
Mon serveur est basé sur centos.

Je suis entrain de regarder cela.

Anne