Php:symfony:2.x

De Les Tutoriaux du WebMestre
Aller à : navigation, rechercher

Récupération de la dernière version 2.x de Symfony

  • Le projet Symfony regroupe un ensemble de projets tous bassés sur le Framework de même nom symfony
  • par exemple Drupal 8 s'appuie sur le framework fils []
  • Le développement d'une application traditionnelle MVC basée sur Symfony s'appuie sur le projet Symfony Standard !!!!

Méthode classique

jpmena@jpmena-P34:~$ git clone https://github.com/symfony/symfony-standard.git
Cloning into 'symfony-standard'...
remote: Counting objects: 5624, done.
remote: Total 5624 (delta 0), reused 0 (delta 0), pack-reused 5624
Receiving objects: 100% (5624/5624), 1.16 MiB | 1.04 MiB/s, done.
Resolving deltas: 100% (3181/3181), done.
Checking connectivity... done.
#passer à la branche 2.8
jpmena@jpmena-P34:~$ cd symfony-standard/
jpmena@jpmena-P34:~/symfony-standard$ git checkout 2.8
Branch 2.8 set up to track remote branch 2.8 from origin.
Switched to a new branch '2.8'
#inconvénient on embarque tout le repo git !!!
jpmena@jpmena-P34:~/symfony-standard$ ls -al .git
total 68
drwxrwxr-x 8 jpmena jpmena  4096 janv. 30 09:44 .
drwxrwxr-x 6 jpmena jpmena  4096 janv. 30 09:44 ..
drwxrwxr-x 2 jpmena jpmena  4096 janv. 30 09:43 branches
-rw-rw-r-- 1 jpmena jpmena   328 janv. 30 09:44 config
-rw-rw-r-- 1 jpmena jpmena    73 janv. 30 09:43 description
-rw-rw-r-- 1 jpmena jpmena    20 janv. 30 09:44 HEAD
drwxrwxr-x 2 jpmena jpmena  4096 janv. 30 09:43 hooks
-rw-rw-r-- 1 jpmena jpmena  4103 janv. 30 09:44 index
drwxrwxr-x 2 jpmena jpmena  4096 janv. 30 09:43 info
drwxrwxr-x 3 jpmena jpmena  4096 janv. 30 09:43 logs
drwxrwxr-x 4 jpmena jpmena  4096 janv. 30 09:43 objects
-rw-rw-r-- 1 jpmena jpmena 15636 janv. 30 09:43 packed-refs
drwxrwxr-x 5 jpmena jpmena  4096 janv. 30 09:43 refs

Méthode proposée par Symfony

Installation via l'outil installer

  • On suit la procédure indiquée sur la page download du ssite Symfony
  • on choisit l'installation en root qui met à disposition l'installeur de tous les utilisateurs:
#on récupère via crul l'installer et on l'installe sous /usr/local/bin/
jpmena@jpmena-P34:~/symfony-standard$ sudo curl -LsS https://symfony.com/installer -o /usr/local/bin/symfony
[sudo] password for jpmena: #on entre notre mot de passe administrateur
 #on donne des droits d'exécution de l'installeur ppour tout le monde!!!!
jpmena@jpmena-P34:~/symfony-standard$ sudo chmod a+x /usr/local/bin/symfony
#l'installeur est un script php compilé (c-php?) c'est un binaire !!!!
jpmena@jpmena-P34:~/symfony-standard$ file /usr/local/bin/symfony
/usr/local/bin/symfony: a /usr/bin/env php script executable (binary data)
#il n'est pas très gros (> 200 ko)
jpmena@jpmena-P34:~/symfony-standard$ ll /usr/local/bin/symfony
-rwxr-xr-x 1 root root 228178 janv. 30 10:01 /usr/local/bin/symfony*

Test via la mise ne place d'un Symfony Standard version 2.8 pour le RIF

  • on nommera rif_symfony notre projet
  • l'installeur de Symfony propose tout un panel d'aides:
#l'aide générale de l'outil
jpmena@jpmena-P34:~/symfony-standard$ symfony help
Usage:
  help [options] [--] [<command_name>]

Arguments:
  command               The command to execute
  command_name          The command name [default: "help"]

Options:
      --xml             To output help as XML
      --format=FORMAT   The output format (txt, xml, json, or md) [default: "txt"]
      --raw             To output raw command help
  -h, --help            Display this help message
  -q, --quiet           Do not output any message
  -V, --version         Display this application version
      --ansi            Force ANSI output
      --no-ansi         Disable ANSI output
  -n, --no-interaction  Do not ask any interactive question
  -v|vv|vvv, --verbose  Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

Help:
 The help command displays help for a given command:
 
   php /usr/local/bin/symfony help list
 
 You can also output the help in other formats by using the --format option:
 
   php /usr/local/bin/symfony help --format=xml list
 
 To display the list of available commands, please use the list command.
#la liste des ccommandes:
jpmena@jpmena-P34:~/symfony-standard$ symfony list
Symfony Installer version 1.5.0

Usage:
  command [options] [arguments]

Options:
  -h, --help            Display this help message
  -q, --quiet           Do not output any message
  -V, --version         Display this application version
      --ansi            Force ANSI output
      --no-ansi         Disable ANSI output
  -n, --no-interaction  Do not ask any interactive question
  -v|vv|vvv, --verbose  Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

Available commands:
  about        Symfony Installer Help.
  demo         Creates a demo Symfony project.
  help         Displays help for a command
  list         Lists commands
  new          Creates a new Symfony project.
  self-update  Update the installer to the latest version.
  selfupdate   Update the installer to the latest version.
#de la liste juste ci dessuss, la commande qui nous intéresse plus particulièrement est la commande new,, plus d'infos à son sujet:
jpmena@jpmena-P34:~/symfony-standard$ symfony help new
Usage:
  new <directory> [<version>]

Arguments:
  directory             Directory where the new project will be created.
  version               The Symfony version to be installed (defaults to the latest stable version). [default: "latest"]

Options:
  -h, --help            Display this help message
  -q, --quiet           Do not output any message
  -V, --version         Display this application version
      --ansi            Force ANSI output
      --no-ansi         Disable ANSI output
  -n, --no-interaction  Do not ask any interactive question
  -v|vv|vvv, --verbose  Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

Help:
 Creates a new Symfony project.
#on crée dans le répertoire un projet syfony-standard version 2.8 (long-term)
jpmena@jpmena-P34:~$ symfony new rif_symfony 2.8

 Downloading Symfony...

    5.17 MB/5.17 MB ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓  100%

 Preparing project...

 ✕  Symfony 2.8.2 was successfully installed but your system doesn t meet its
     technical requirements! Fix the following issues before executing
     your Symfony application:

 * date.timezone setting must be set
   > Set the "date.timezone" setting in php.ini* (like Europe/Paris).

 After fixing these issues, re-check Symfony requirements executing this command:

   php rif_symfony/app/check.php

 Then, you can:

    * Change your current directory to /home/jpmena/rif_symfony

    * Configure your application in app/config/parameters.yml file.

    * Run your application:
        1. Execute the php app/console server:run command.
        2. Browse to the http://localhost:8000 URL.

    * Read the documentation at http://symfony.com/doc

#les fichiers téléchargés: on reconnait un projet symfony standard
##on note l'absence de répertoire .git, donc on n'emporte pas le référentiel git
jpmena@jpmena-P34:~$ ls -al rif_symfony/
total 116
drwxr-xr-x  7 jpmena jpmena  4096 janv. 30 10:18 .
drwxr-xr-x 65 jpmena jpmena  4096 janv. 30 10:18 ..
drwxr-xr-x  6 jpmena jpmena  4096 janv. 30 10:18 app
drwxr-xr-x  2 jpmena jpmena  4096 janv. 30 10:18 bin
-rw-r--r--  1 jpmena jpmena  2304 janv. 30 10:18 composer.json
-rw-r--r--  1 jpmena jpmena 75478 janv. 30 10:18 composer.lock
-rw-rw-rw-  1 jpmena jpmena   185 janv. 30 10:18 .gitignore
-rw-rw-rw-  1 jpmena jpmena    82 janv. 30 10:18 README.md
drwxr-xr-x  3 jpmena jpmena  4096 janv. 30 10:18 src
drwxr-xr-x 15 jpmena jpmena  4096 janv. 30 10:18 vendor
drwxr-xr-x  3 jpmena jpmena  4096 janv. 14 14:25 web
  • noter le warning afficché sur la console au moment de la création du projet rif_symfony
    • on nous demande de setter la variable date.timezone dans le fichier /etc/php5/apache2/php.ini
    • valeur proposée Europe/Paris: c'est elle que nous prendrons!!!

Cas particulier de l'accèss internet au travers d'un PROXY_HTTP

  • l'outil Symfonny charge et met à jour le projet Symfony demandé au moyen de la librairie PHP Guzzle
  • Dans son implémentation sous Symfony cette librairie ne sait pas prendre en compte par défaut les paramètres d'un proxy systèms
    • il s'agit du cas où Guzzle attaque directemment le Net via son client HTTP
    • en revanche dans le cas où:
      • curl
      • et le pont entre php et curl
    • sont installés sur le système (librairie php5-curl) c'est le curl installé sur le système qui est en charge de la communication avec les porjets Symfonny sur GitHub !!!
      • comme curl prend en compte les paramètres proxy du système, l'accès au projet Symfony par l'outil symfony ne pose plus aucune difficulté
  • Guzzle nous oblige de passer par le couple **curl + php5curl**,
    • L'installation se fait via:
jpmena@jpmena-HP:~$ sudo apt-get install curl php5-curl
[sudo] password for jpmena: 
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances       
Lecture des informations d'état... Fait
..................................................;
  • de façon à récupérer les variables d'environnement HTTP_PROXY et HTTPS_RPOXY du fichier **~/.profile**;
    • extrait correspondant du fichier **.profile**:
      • Lignes **27 à 33** on met les variables proxy en minuscule et majuscule ....
 1 jpmena@jpmena-HP:~$ cat .profile
 2 # ~/.profile: executed by the command interpreter for login shells.
 3 # This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
 4 # exists.
 5 # see /usr/share/doc/bash/examples/startup-files for examples.
 6 # the files are located in the bash-doc package.
 7 
 8 # the default umask is set in /etc/profile; for setting the umask
 9 # for ssh logins, install and configure the libpam-umask package.
10 #umask 022
11 
12 # if running bash
13 if [ -n "$BASH_VERSION" ]; then
14     # include .bashrc if it exists
15     if [ -f "$HOME/.bashrc" ]; then
16 	. "$HOME/.bashrc"
17     fi
18 fi
19 
20 # set PATH so it includes user's private bin if it exists
21 if [ -d "$HOME/bin" ] ; then
22     PATH="$HOME/bin:$PATH"
23 fi
24 
25 #proxy DGFIP pour tout le monde (voir à rajouter des exceptions)
26 #http://xmodulo.com/how-to-configure-http-proxy-exceptions.html
27 export http_proxy=http://proxy.infra.dgfip:8080
28 export https_proxy=http://proxy.infra.dgfip:8080
29 no_proxy="127.0.0.1,*.dgfip,*.dgi,*.impots"
30 ##special GUZZLE
31 export HTTP_PROXY=http://proxy.infra.dgfip:8080
32 export HTTPS_PROXY=http://proxy.infra.dgfip:8080
33 export NO_PROXY="127.0.0.1,*.dgfip,*.dgi,*.impots"
34 ..........................................
  • Se reconnecter à votre session utilisateur Linux/Ubuntu pour la prise en compte de ces variables !!!!

Le templating par Twig

TODO setter le timezone cf. URL de checck de symfony

Mise à niveau avec projet RIF sous Symfony (GitHub)

Ajout de mes sources [1]

jpmena@jpmena-P34:~/RIF/rif_symfony$ mv .gitignore .gitignore.ori13022016
#on initialise rif_symfony comme repo git et on pointe vers mon projet GitHub ....
jpmena@jpmena-P34:~/RIF/rif_symfony$ git init
Initialized empty Git repository in /home/jpmena/RIF/rif_symfony/.git/
jpmena@jpmena-P34:~/RIF/rif_symfony$ git remote add origin git@github.com:javaskater/rif_symfony.git
jpmena@jpmena-P34:~/RIF/rif_symfony$ git fetch origin
remote: Counting objects: 252, done.
remote: Compressing objects: 100% (21/21), done.
remote: Total 252 (delta 0), reused 0 (delta 0), pack-reused 225
Receiving objects: 100% (252/252), 568.33 KiB | 351.00 KiB/s, done.
Resolving deltas: 100% (71/71), done.
From github.com:javaskater/rif_symfony
 * [new branch]      master     -> origin/master
jpmena@jpmena-P34:~/RIF/rif_symfony$ git reset --hard origin/master
HEAD is now at fcbdee4 première mise en place du mapping Angular + script de nettoyage du cache

mise en place de mes paramètres pour mon projet:

#je compare les différences entre le fichier d'origine de symfony et celui récupéré de mon projet
jpmena@jpmena-P34:~/RIF/rif_symfony/app/config$ diff -u services.rif.yml services.yml
--- services.rif.yml	2016-02-14 08:40:19.727915947 +0100
+++ services.yml	2016-01-14 14:21:37.000000000 +0100
@@ -4,11 +4,6 @@
 #    parameter_name: value
 
 services:
-    app.twig_extension:
-        class: AdherentsBundle\Twig\RifTwigExtensions
-        public: false
-        tags:
-            - { name: twig.extension }
 #    service_name:
 #        class: AppBundle\Directory\ClassName
 #        arguments: ["@another_service_name", "plain_value", "%parameter_name%"]
#je sauvegarde le fichier d'origine fourni par Symfony
jpmena@jpmena-P34:~/RIF/rif_symfony/app/config$ mv -v services.yml services.yml.ori14022016
‘services.yml’ -> ‘services.yml.ori14022016’
#je place mon fichier à la place
jpmena@jpmena-P34:~/RIF/rif_symfony/app/config$ cp -pv services.rif.yml services.yml
‘services.rif.yml’ -> ‘services.yml’
#je compare les différences entre le fichier d'origine de symfony et celui récupéré de mon projet
jpmena@jpmena-P34:~/RIF/rif_symfony/app/config$ diff -u routing.rif.yml routing.yml
--- routing.rif.yml	2016-02-14 08:40:19.727915947 +0100
+++ routing.yml	2016-01-14 14:21:37.000000000 +0100
@@ -1,8 +1,3 @@
-adherents:
-    resource: "@AdherentsBundle/Controller/"
-    type:     annotation
-    prefix:   /adherents
-
 app:
     resource: "@AppBundle/Controller/"
     type:     annotation
#je sauvegarde le fichier d'origine fourni par Symfony
jpmena@jpmena-P34:~/RIF/rif_symfony/app/config$ mv routing.yml routing.yml.ori14022016
#je place mon fichier à la place
jpmena@jpmena-P34:~/RIF/rif_symfony/app/config$ cp -pv routing.rif.yml routing.yml
‘routing.rif.yml’ -> ‘routing.yml’
#je compare les différences entre le fichier d'origine de symfony et celui récupéré de mon projet
jpmena@jpmena-P34:~/RIF/rif_symfony/app/config$ diff -u parameters.rif.yml parameters.yml
--- parameters.rif.yml	2016-02-14 08:40:19.727915947 +0100
+++ parameters.yml	2016-02-14 08:38:57.466639579 +0100
@@ -2,11 +2,11 @@
 parameters:
     database_host: 127.0.0.1
     database_port: null
-    database_name: rif
-    database_user: rif
-    database_password: rif
+    database_name: symfony
+    database_user: root
+    database_password: null
     mailer_transport: smtp
     mailer_host: 127.0.0.1
     mailer_user: null
     mailer_password: null
-    secret: ThisTokenIsNotSoSecretChangeIt
+    secret: 97b6ef7c6f735bede13b838de765b6a642a99804
#je sauvegjpmena@jpmena-P34:~/RIF/rif_symfony/app/config$ mv -v parameters.yml parameters.yml.ori140222016
‘parameters.yml’ -> ‘parameters.yml.ori140222016’arde le fichier d'origine fourni par Symfony
#je place mon fichier à la place
jpmena@jpmena-P34:~/RIF/rif_symfony/app/config$ cp -pv parameters.rif.yml parameters.yml
‘parameters.rif.yml’ -> ‘parameters.yml’

Dernières adaptations du code de Symfony Stantard

Ajout du AdherentsBundle au Kernel

#on sauvegarde la version fournie par Symfony
jpmena@jpmena-P34:~/RIF/rif_symfony/app$ cp -pv AppKernel.php AppKernel.php.ori14022016
‘AppKernel.php’ -> ‘AppKernel.php.ori14022016’
#on édite pour ajouter notre Bundle, ce qui donne:
jpmena@jpmena-P34:~/RIF/rif_symfony/app$ diff -u  AppKernel.php.ori14022016 AppKernel.php
--- AppKernel.php.ori14022016	2016-01-14 14:21:37.000000000 +0100
+++ AppKernel.php	2016-02-14 09:00:17.960653804 +0100
@@ -16,6 +16,7 @@
             new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
             new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
             new AppBundle\AppBundle(),
+            new AdherentsBundle\AdherentsBundle(),
         );
 
         if (in_array($this->getEnvironment(), array('dev', 'test'), true)) {

Exportation vers un autre site

Sur le site source

Remise à zéro du cache

  • J'ai développé un script également porté ssur GitHub:
    • ce script a été nécessité par le fait que le cache est ssous www-data pendant que les autres fichiers du site peuvent rester sous l'utilisateur par défaut (**jpmena** dans mon cas) !!!!
jpmena@jpmena-P34:~$ cd RIF/rif_symfony/utils/scripts/
jpmena@jpmena-P34:~/RIF/rif_symfony/utils/scripts$ cat clearcache.sh 
#!/usr/bin/env bash
SCRIPT_DIR=$(pwd)
SYMFONY_ROOT=${SCRIPT_DIR}/../..
SUDO=""
if [[ $(whoami) != 'root' ]]
then
	SUDO="sudo"
fi


cd $SYMFONY_ROOT
$SUDO php app/console cache:clear 2>&1 
$SUDO chown -R www-data:www-data app/cache 2>&1

cd $SCRIPT_DIR
  • on voit que le script est à lancer depuis son répertoire **~/RIF/rif_symfony/utils/scripts**:
    • ce qui donne:
jpmena@jpmena-P34:~/RIF/rif_symfony/utils/scripts$ ./clearcache.sh 
[sudo] password for jpmena: #j'entre mon mot de passe pour donner au script les droits du sudo !!!!

 // Clearing the cache for the dev environment with debug true

                                                                                                                        
 [OK] Cache for the "dev" environment (debug=true) was successfully cleared.
  • on vérifie que les utilisateurs on été bien rétablis:
jpmena@jpmena-P34:~/RIF/rif_symfony$ ll app/
total 188
drwxr-xr-x  6 jpmena   jpmena     4096 févr. 14 08:59 ./
drwxr-xr-x 10 jpmena   jpmena     4096 févr. 14 08:58 ../
-rw-r--r--  1 jpmena   jpmena      101 janv. 14 14:21 AppCache.php
-rw-r--r--  1 jpmena   jpmena     1402 févr. 14 09:00 AppKernel.php
-rw-r--r--  1 jpmena   jpmena     1351 janv. 14 14:21 AppKernel.php.ori14022016
-rw-r--r--  1 jpmena   jpmena      267 janv. 14 14:21 autoload.php
-rw-r--r--  1 jpmena   jpmena   101465 janv. 14 14:25 bootstrap.php.cache
drwxrwxr-x  3 www-data www-data   4096 févr. 14 09:49 cache/ #il est bien à nouveau sous www-data
-rw-r--r--  1 jpmena   jpmena     3943 janv. 14 14:25 check.php
drwxr-xr-x  2 jpmena   jpmena     4096 févr. 14 08:53 config/
-rwxr-xr-x  1 jpmena   jpmena      880 janv. 14 14:21 console*
-rw-r--r--  1 jpmena   jpmena      143 janv. 14 14:21 .htaccess
drwxrwxr-x  2 jpmena   jpmena     4096 févr. 14 08:54 logs/
-rw-r--r--  1 jpmena   jpmena     1363 janv. 14 14:21 phpunit.xml.dist
drwxr-xr-x  3 jpmena   jpmena     4096 févr. 14 08:38 Resources/
-rw-r--r--  1 jpmena   jpmena    31511 janv. 14 14:25 SymfonyRequirements.php

création d'une archive pour export

  • Le but est de créer une archive sans l'arborescence cachée **.git**.
  • la commande **tar** a une option (***--exclude-vcs***) pour exclure les fichiers appartenant au système de contrôle de version utilisé pour son développement;
    • c'est elle que l'on va utiliser pour la création de notre archive, ce qui donne:
#on se déplace juste au dessus de la racine du site
jpmena@jpmena-P34:~/RIF/rif_symfony/app$ cd ~/RIF/
#on crée une archive estampillée à la date de ce jour et qui exclue tous les fichiers cachés du VCS
jpmena@jpmena-P34:~/RIF$ tar czf rif_symfony$(date +'%d%m%Y').tgz rif_symfony --exclude-vcs
#on vérifie que l'on n'a que l'on ne transporte pas l'arborescence cachée .git à la racine de notre archive
jpmena@jpmena-P34:~/RIF$ tar tvf rif_symfony14022016.tgz | grep -i git
-rw-r--r-- jpmena/jpmena     0 2016-01-14 14:21 rif_symfony/app/logs/.gitkeep
-rw-r--r-- www-data/www-data     0 2016-01-14 14:21 rif_symfony/app/cache/.gitkeep
-rw-rw-rw- jpmena/jpmena        185 2016-02-14 08:38 rif_symfony/.gitignore.ori144022016
-rw-r--r-- jpmena/jpmena       1406 2015-10-14 14:51 rif_symfony/vendor/monolog/monolog/src/Monolog/Processor/GitProcessor.php
-rw-r--r-- jpmena/jpmena          0 2016-01-14 13:01 rif_symfony/vendor/symfony/symfony/src/Symfony/Component/Intl/Tests/Data/Bundle/Reader/Fixtures/NotAFile/en.php/.gitkeep
-rw-r--r-- jpmena/jpmena        157 2015-06-06 16:19 rif_symfony/vendor/swiftmailer/swiftmailer/.gitattributes
  • on transporte l'archive **rif_symfony14022016.tgz** vers la cible

Sur le site cible (dans mon cas un VPS OVH)

  • sur le VPS je suis en **root**
  • je détare l'archive:
# ouvre l archive sous /var/www
root@vps198083:/var/www# tar xf rif_symfony14022016.tgz
#passe tous les fichiers en www-data
root@vps198083:/var/www# chown -R www-data:www-data rif_symfony
#on lance mon script de nettoyage du cache
root@vps198083:/var/www# cd rif_symfony/utils/scripts/
root@vps198083:/var/www/rif_symfony/utils/scripts# ./clearcache.sh 

 // Clearing the cache for the dev environment with debug true

                                                                                                                        
 [OK] Cache for the "dev" environment (debug=true) was successfully cleared.                                            
                                                                                                                        

#on vérifie que le cache est à nouveau en www-data
root@vps198083:/var/www/rif_symfony/utils/scripts# ll ../../app/
total 188
drwxr-xr-x 6 www-data www-data   4096 Feb 14 08:59 ./
drwxr-xr-x 9 www-data www-data   4096 Feb 14 08:58 ../
-rw-r--r-- 1 www-data www-data    101 Jan 14 14:21 AppCache.php
-rw-r--r-- 1 www-data www-data   1402 Feb 14 09:00 AppKernel.php
-rw-r--r-- 1 www-data www-data   1351 Jan 14 14:21 AppKernel.php.ori14022016
-rw-r--r-- 1 www-data www-data    267 Jan 14 14:21 autoload.php
-rw-r--r-- 1 www-data www-data 101465 Jan 14 14:25 bootstrap.php.cache
drwxrwxr-x 3 www-data www-data   4096 Feb 14 19:14 cache/
-rw-r--r-- 1 www-data www-data   3943 Jan 14 14:25 check.php
drwxr-xr-x 2 www-data www-data   4096 Feb 14 08:53 config/
-rwxr-xr-x 1 www-data www-data    880 Jan 14 14:21 console*
-rw-r--r-- 1 www-data www-data    143 Jan 14 14:21 .htaccess
drwxrwxr-x 2 www-data www-data   4096 Feb 14 08:54 logs/
-rw-r--r-- 1 www-data www-data   1363 Jan 14 14:21 phpunit.xml.dist
drwxr-xr-x 3 www-data www-data   4096 Feb 14 08:38 Resources/
-rw-r--r-- 1 www-data www-data  31511 Jan 14 14:25 SymfonyRequirements.php