Ubuntu 18.04 : installation de l’extension oci (oracle) pour php7.2

Pour installer l’extension oci (oracle) pour php7.2, il faut avant avoir installer apache, php-7.2. Puis se rendre sur ce site http://www.oracle.com/technetwork/database/database-technologies/instant-client/downloads/index.html puis télécharger ces 2 paquets

instantclient-basic-linux.x64-12.2.0.1.0.zip
instantclient-sdk-linux.x64-12.2.0.1.0.zip

Puis les envoyer sur le serveur (avec ssh, ou winscp) dans le dossier /tmp, il faut ensuite unzip les 2 zip. Ensuite, il faut déplacer les fichiers dans le dossier /opt

mkdir /opt/oracle/
mv /tmp/instantclient_12_2/ /opt/oracle

Il faut créer les liens symboliques

ln -s /opt/oracle/instantclient_12_2/libclntsh.so.12.1 /opt/oracle/instantclient_12_2/libclntsh.so 
ln -s /opt/oracle/instantclient_12_2/libocci.so.12.1 /opt/oracle/instantclient_12_2/libocci.so

Il faut donner les droits sur le répertoire

chown -R root:www-data /opt/oracle

Puis ajouter les librairies dans le ldconfig

echo /opt/oracle/instantclient_12_2 > /etc/ld.so.conf.d/oracle-instantclient 
ldconfig

Il faut ensuite les paquets suivant (requis pour pecl)

apt install php7.2-dev php-pear build-essential libaio1

Puis il faut installer oci8 via pecl

pecl install oci8

A la question concernant le chemin, il faut répondre ceci

instantclient,/opt/oracle/instantclient_12_2

Il faut ensuite modifier les fichiers php.ini pour ajouter l’extension

nano /etc/php/7.2/apache2/php.ini

y ajouter dans dynamic extension

extension = oci8.so
nano /etc/php/7.2/cli/php.ini

y ajouter dans dynamic extension

extension = oci8.so

Il faut ensuite ajouter les variables d’environnement pour cli

echo "LD_LIBRARY_PATH=\"/opt/oracle/instantclient_12_2\"" >> /etc/environment
echo "ORACLE_HOME=\"/opt/oracle/instantclient_12_2\"" >> /etc/environment

Puis celles d’apache

echo "export LD_LIBRARY_PATH=\"/opt/oracle/instantclient_12_2\"" >> /etc/apache2/envvars
echo "export ORACLE_HOME=\"/opt/oracle/instantclient_12_2\"" >> /etc/apache2/envvars

Il faut ensuite redemarrer la machine pour prendre en compte les variables d’environnement de cli

sudo reboot

 

 

Symfony / Doctrine – Mettre à jour des champs automatiquement avec les événements

Doctrine dispose d’événements qui permettent de mettre à jour des champs automatique au moment de l’insertion, de la mise à jour, suppression, chargement.

La liste des événements et leurs utilisations est disponible ici. Ci-dessous un petit exemple :

/** @PrePersist */
public function onPrePersist()
{
  $this->setPrenom('toto');
}

L’annotation permet de lancer la fonction onPrePersist() qui va modifier le prenom à l’ajout dans la base de données. Pour utiliser les événements, pensez à ajouter sur votre entité l’annotation ci-dessous et d’importer les use nécessaires.

@HasLifecycleCallbacks

Symfony knp snappy bundle pdf – retirer les headers

Si vous avez un problème avec les headers HTTP qui s’affiche dans votre pdf.

Il faut modifier la méthode utiliser pour rendre la vue.

 $view = $this->renderView(
   'pdf/pdf.html.twig',
   [
     'info' => $info,
   ]
);

Généralement, le problème vient du fait que c’est la méthode render() qui est utilisé au lieu de renderView()

Installation de composer ubuntu

Je préfère ne pas installer composer via apt car la version n’est jamais la plus récente, du coup je l’installe via la procédure qui est sur le site ce qui me permet de le mettre à jour grâce à une option de la commande composer

Avant toute chose, il faut supprimer la version de composer qui aurait été installé avec apt

apt remove composer

Puis suivre la procédure sur le site de composer (au moins les 2 premières commandes), ensuite lancer ces commandes :

php composer-setup.php --install-dir=/usr/local/bin --filename=composer
php -r "unlink('composer-setup.php');"

Vous pourrez désormais utiliser la commande directement comme ceci dans n’importe quel dossier.

composer require ....

Pour mettre à jour, il suffit de faire

composer self-update

 

Erreur webpack / encore chunk.sortModules()

J’utilise encore pour mes projets symfony et j’ai rencontré l’erreur ci-dessous :

node_modules\@symfony\webpack-encore\node_modules\extract-text-webpack-plugin\dist\index.js:188
 chunk.sortModules();
 ^

TypeError: chunk.sortModules is not a function

Il faut ajouter webpack en dépendence du projet

npm install --save webpack

Mettre à jour nodejs et npm (ubuntu)

Pour mettre à jour nodejs et npm, il faut commencer par vider le cache

sudo npm cache clean -f

Puis installer n pour gérer les versions

sudo npm install -g n

Ensuite via n, il faut récupérer la version voulue

sudo n stable

Enfin, il faut modifier les liens vers les commandes pour utiliser ces versions

ln -sf /usr/local/n/versions/node/9.4.0/bin/node /usr/bin/nodejs
ln -sf /usr/local/n/versions/node/9.4.0/bin/npm /usr/bin/npm

Fake webcam dans le navigateur

Si vous avez besoin de simuler une webcam dans un navigateur, il existe deux solutions :

Pour firefox, il faut modifier la configuration avec « about:config » puis modifier le paramétre

profile.setPreference('media.navigator.streams.fake', true);

Pour chrome, c’est différent, il faut le lancer en ligne de commande et ajouter l’option

chromium-browser --use-fake-device-for-media-stream