installer un environnement apache php mysql sur un mac avec snow leopard

Installer un environnement apache php mysql sur un mac avec snow leopard

On a de la chance sur mac, il y a déjà une partie des outils qui sont installé. C’est le cas pour apache et pour php.

Mais il faut les activer. Voilà mes notes en vrac pour faire cette démarche. C’est pas super propre.. un jour quand j’aurai le temps je ferai mieux 😀

sudo nano /etc/apache2/httpd.conf
décommenter:
#LoadModule php5_module libexec/apache2/libphp5.so
LoadModule php5_module        libexec/apache2/libphp5.so

installer mysql

http://dev.mysql.com/downloads/mysql/5.1.html#macosx-dmg
mysql-5.1.45-osx10.6-x86_64.dmg

installer tout ce qu’il y a sur l’image disque:
– mysql
– le startup item
– le prefpane

Puis activer mysql

Ensuite, il y a plein de warning quand on utilise la fonction strtotime…
Warning: strtotime() [function.strtotime]: It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected ‘Europe/Berlin’ for ‘CEST/2.0/DST’ instead in /Users/mdespont/Sites/yopyop/include/lib/application.php  on line 49

ici: http://maestric.com/doc/mac/apache_php_mysql_snow_leopard
On nous explique qu’il faut définir la timezone.
A choix une de celle-ci : http://www.php.net/manual/en/timezones.europe.php

Donc pour définir il faut ajouter un php.ini et compléter la ligne timezone en ajoutant le fuseau horaire voulu:

;date.timezone =Europe/Zurich

Puis.. subtilité.. il n’y a pas de php.ini par défaut.. il faut l’ajouter au besoin.. mais dedans les socket par défaut sont faux !!

Donc selon:
http://www.mac4ever.com/articles/creation/1153/php_mysql_sous_snow_leopard_et_xdebug_eclipse/

sudo cp /etc/php.ini.default /etc/php.ini

puis remplacer:
pdo_mysql.default_socket=/tmp/mysql.sock
mysql.default_socket = /var/mysql/mysql.sock
mysqli.default_socket = /var/mysql/mysql.sock

par

pdo_mysql.default_socket=/tmp/mysql.sock
mysql.default_socket = /tmp/mysql.sock
mysqli.default_socket = /tmp/mysql.sock

Donc petit rechercher remplacer: In /etc/php.ini, replace the three occurences of /var/mysql/mysql.sock  by /tmp/mysql.sock

Selon http://stackoverflow.com/questions/1293484/easiest-way-to-activate-php-and-mysql-on-mac-os-10-6-snow-leopard :
to complete your setup or mysql:

sudo vim /etc/profile

add alias

alias mysql=/usr/local/mysql/bin/mysql
alias mysqladmin=/usr/local/mysql/bin/mysqladmin

then set your root password

mysqladmin -u root password ‘yourPassword’

then you can login with mysql -u root -p

Plusieurs virtual hosts pour apache

il faut décommenter la ligne qui permet à apache d’aller lire le fichier
/etc/apache2/extra/httpd-vhosts.conf
Fichier dans lequel j’ai mes virtual hosts.

J’ai les règles de ma réécriture d’url.

Voilà voilà.. tout va bien.. ça marche ! 😀

Reprendre les exemples du fichier exemple: httpd-vhosts-original.conf

#
# Use name-based virtual hosting.
#
NameVirtualHost *:80

#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for all requests that do not
# match a ServerName or ServerAlias in any <VirtualHost> block.
#
<VirtualHost *:80>
ServerAdmin
DocumentRoot « /usr/docs/dummy-host.example.com »
ServerName dummy-host.example.com
ServerAlias www.dummy-host.example.com
ErrorLog « /private/var/log/apache2/dummy-host.example.com-error_log »
CustomLog « /private/var/log/apache2/dummy-host.example.com-access_log » common
</VirtualHost>

 

Installation de Xampp avec la même base de donnée mysql

Il faut télécharger xampp

Pour utiliser la même base de donnée que celle qui a été installé ci-dessus. Il suffit d’utiliser le même socket. Ainsi je crée un lien symbolique.

ln -s /tmp/mysql.sock /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock

Optimisation de sites php mysql

Optimisation de site php mysql

D’une manière générale, le php est rapide a exécuter, mais les connexions entre les hôtes est lente.  0,1 s pour tout le script php par rapport à 0.2s par connexion avec mysql.

 

Mysql

  • mettre les valeurs à NOT NULL si on sait qu’elle vont l’être.. pas besoin de lire le bit pour savoir avant d’aller piocher la valeur.
  • utiliser char à la place de varchar. Char est moins gourmand en CPU car il n’a pas besoin de calculer la taille du champ pour aller au suivant. On fait donc le choix que le coût CPU est plus important que le coût mémoire. Car avec varchar on économise un petit peu de mémoire. Si un champ d’une table est variable, toute la table l’est !!  Un champ text est un champ variable !
  • mettre des index sur les champs utilisés fréquemment pour des recherches. C’est très bien en lecture, mais éviter de mettre des index sur des champs qui doivent être écrit souvent. C’est très lent.
  • éviter select * être plus précis.
  • utiliser limit 1 si l’on est certain d’avoir besoin que d’un enregistrement. Ainsi Mysql stop la recherche et ne va pas tenter de trier les données.. Genre le break.
  • utiliser des nombres plutôt que des string pour faire les jointures !  Comparer des nombres en en gros 2 fois plus rapide que de comparer une chaîne de 3 caractères !  après c’est encore pire.

PHP

  • éviter la fonction in_array() remplacer par un isset() sur les clés d’un tableau. Pour mettre les valeurs d’un tableau dans des clés utiliser array_ fill_ keys. Les clés d’un tableau sont des tables de hachage donc très rapide.
  • ne pas utiliser require_once();  require() ou include() sont beaucoup plus rapide.
  • utiliser la pré-incrémentation plutôt que la post incrémentation. ++$i est 10% plus rapide que $i++. Zend optimizer le fait pour nous!
  • utiliser les multiples paramètre de echo pour faire des concaténations. echo « toto », Mafonction(), »bleu », getTotot()  est mieux que d’utiliser l’opérateur de concaténation . qui va lui générer plein d’objet temporaire.
  • mettre en cache les variables dans un tableau. Sur une boucle de 10millions d’itérations on gagne 15% de temps CPU. $tableau[‘variable’] oblige php à rechercher la valeur dans le tableau et cette recherche bouffe du temps. Mais c’est tout de même peu.
  • compression ob_gzhandler … gain de 33% de donnée à transferrer.

 

Mythe php

  • écrire  ‘toto’ ou « toto » ne change pas grand chose en performance c’est de l’ordre de 0,01% Donc négligeable !

 

Apache

  • ne pas utiliser mod access.. donc pas de htaccess.. car il va chercher dans tous le dossier jusqu’au parent qui contient un htaccess. (ou limiter le nombre de niveau de hiérarchie)

Maintenance.

  • OPTIMIZE TABLE table   défragmenter de temps en temps les tables.

à creuser..

  • select in est très rapide ?
  • table temporaire plutôt que script php

Référence