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()

Symfony installer phpunit pour réaliser ces tests unitaires

Pour ajouter phpunit sur un projet symfony, il faut utiliser la commande composer suivante :



composer require --dev phpunit/phpunit ^6.5

Il faudra ensuite coder les tests dans le répertoire Tests du projet, généralement on essaie de garder la même arborescence que les autres fichiers, c’est à dire qu’on retrouvera un dossier Controller dans le dossier test et par exemple un fichier DefaultControllerTest.php.

Pour lancer les tests, il faut utiliser la commande suivante :

php phpunit-6.5.phar -c phpunit.xml.dist

Le chemin du fichier de configuration peut varier selon la version de symfony, il peut tantôt être dans le dossier app ou à la racine du projet.

 

Symfony lancement des tests unitaires Error Too many connections

Au lancement des tests unitaires avec phpunit, sur certains tests apparaient le message d’erreur suivant :

SQLSTATE[08004] [1040] Too many connections

Pour éviter ce problème, il faut modifier le fichier de configuration de phpunit (sur symfony phpunit.xml.dist)

Dans la balise <phpunit> il faut ajouter l’attribut

processIsolation = "true"