Configuration Php

Rédigé en novembre 2014.

1) Introduction.

Ce didacticiel est consacré à la configuration du fichier php.ini de WampServer pour les versions 5 & 6 de Php. J'ai volontairement modifié la présentation d'origine du fichier php.ini telle qu'elle se présente ! J'ai fait en sorte de mettre le découpage en conformité avec la présentation de la fonction phpinfo() que l'on utilise fréquemment pour confirmer ou infirmer le paramétrage. J'espère que vous ne serez pas trop perturbé par ce changement.

2) La subdivision PHP.

À l'origine, cette subdivision servait à mettre le gros du paramétrage de php, d'une manière hétéroclite, c'est-à-dire sans organisation. J'ai préféré, à la place, introduire la subdivision CORE (noyau) en conformité avec la présentation de la fonction phpinfo(), comme nous le verrons un peu plus loin.

Je laisse présente cette subdivision dans le fichier php.ini, même si elle se vide de la totalité du paramétrage d'origine. On y placera tout ce qui ne rentre pas dans les autres subdivisions que nous détaillerons ci-après.

; ************************ ;
;                          ;
;      Sphere "Rouge"      ;
;                          ;
; ************************ ;

[PHP]
engine = On
last_modified =
xbithack =
			

Vous avez constaté que le titre de ce fichier est Sphère "Rouge". Son utilité n'est pas anodine car dans un autre didacticiel consacré à l'installation de ma version WampServer toute personnelle, j'ai ajouté une nouvelle fonction, que je nomme shpère, qui consiste à faire coexister différents environnements, incompatible entre eux.

3) Les Extensions externes.

Juste après la subdivision PHP, j'ai placé tous les modules qui sont présents dans le répertoire "/ext" de la version de php que vous utilisée. Le fait de mettre un "point-virgule" devant l'extension signifie que la ligne est en commentaire et de ce fait, le module ne sera pas activé.

Il y a trente-cinq modules livrés avec la version 5.6.2 de Php. J'ai mis volontairement ces modules dans l'ordre alphabétique, telles qu'on les voie dans le répertoire "/ext".

;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;

extension = php_bz2.dll
extension = php_com_dotnet.dll
extension = php_curl.dll
;extension = php_enchant.dll
extension = php_exif.dll
extension = php_fileinfo.dll
extension = php_gd2.dll
extension = php_gettext.dll
extension = php_gmp.dll
extension = php_imap.dll
;extension = php_interbase.dll
extension = php_intl.dll
extension = php_ldap.dll
extension = php_mbstring.dll
extension = php_mysql.dll
extension = php_mysqli.dll
;extension = php_oci8_12c.dll
;zend_extension = php_opcache.dll
extension = php_openssl.dll
;extension = php_pdo_firebird.dll
extension = php_pdo_mysql.dll
;extension = php_pdo_oci.dll
;extension = php_pdo_odbc.dll
;extension = php_pdo_pgsql.dll
;extension = php_pdo_sqlite.dll
;extension = php_pgsql.dll
extension = php_shmop.dll
extension = php_snmp.dll
extension = php_soap.dll
extension = php_sockets.dll
extension = php_sqlite3.dll
;extension = php_sybase_ct.dll
;extension = php_tidy.dll
extension = php_xmlrpc.dll
extension = php_xsl.dll
			

La liste est triée par ordre alphabétique. Une seule exception (que j'ai mis en rouge) est l'extension opcache qui est préfixé par "zend_".

4) Paramètrage des modules.

Tous les modules ne se présentent pas sous la forme d'une extension externe. Il existe des modules qui sont inclus dans php, donc à l'état natif. Le découpage du fichier "php.ini" se fera d'une part en mettant le nom du module entre crochet "[" et "]" et d'autre part en placant ci-après la liste des variables que l'on désire paramétrer. Il semble que chaque variable soit unique dans le fichier php.ini et que le nom du module entre crochet est juste un commentaire.

Afin que le fichier "php.ini" soit facilement lisible, nous avons trié les modules et les variables dans l'ordre alphabétique. Si un module n'est pas utilisé, ou ne contient aucun paramétrage apparant, il est quand même placé dans le fichier php.ini, juste pour indiquer sa présence.

Dans ce que va suivre, j'ai volontairement découpé chaque module afin de les isoler des autres afin de rendre la lecture plus facile.

;;;;;;;;;;;;;;;;;;;
; Module Settings ;
;;;;;;;;;;;;;;;;;;;

[bcmath]
bcmath.scale = 0
			
[bz2]
			
[calendar]
			
[com_dotnet]
com.allow_dcom = true
com.autoregister_typelib = false
com.autoregister_verbose = true
com.autoregister_casesensitive = false
com.code_page = ""
com.typelib_file = ""
			

Le module "[core]" signifie "noyau" et est relatif au paramétrage des modules natifs de php. Nous y avons placé toutes les variables qui se trouvaient précédemment sous la désignation "[PHP]". Nous avons respécté la présentation produite par la fonction "phpinfo()".

Comme nous le voyons ci-après, j'ai séparé par une ligne blanche les groupes des paramètres ayant le même préfixe.

[Core]
allow_url_fopen = On
allow_url_include = Off

always_populate_raw_post_data = -1

arg_separator.input = "&"
arg_separator.output = "&"

asp_tags = Off

auto_append_file =
auto_globals_jit = On
auto_prepend_file =

browscap =

default_charset = ""
default_mimetype = "text/html"

disable_classes =
disable_functions =

display_errors = On
display_startup_errors = On

doc_root =

docref_ext =
docref_root =

enable_dl = Off
enable_post_data_reading = on

error_append_string =
error_log = "f:/Wamp/logs/php_error.log"
error_prepend_string =
error_reporting = E_ALL

exit_on_timeout = Off

expose_php = On

extension_dir = "f:/Wamp/bin/php/courant/ext/"

file_uploads = On

html_errors = On

ignore_repeated_errors = Off
ignore_repeated_source = Off
ignore_user_abort = off

implicit_flush = Off

include_path = "."

input_encoding =
internal_encoding =

log_errors = On
log_errors_max_len = 1024

mail.add_x_header = On
mail.force_extra_parameters =
mail.log = "f:/Wamp/logs/mail_error.log"

max_execution_time = 360
max_file_uploads = 20
max_input_nesting_level = 64
max_input_time = 360
max_input_vars = 2500

memory_limit = 128M

open_basedir =

output_buffering = 4096
output_encoding =
output_handler =

post_max_size = 128M

precision = 14

realpath_cache_size = 16K
realpath_cache_ttl = 120

register_argc_argv = Off

report_memleaks = On
report_zend_debug = On

request_order = "GP"

sendmail_from = artemus@jcz.fr

serialize_precision = 17

short_open_tag = Off

sql.safe_mode = Off

SMTP = smtp.neuf.fr
smtp_port = 25

sys_temp_dir =

track_errors = On

unserialize_callback_func =

upload_max_filesize = 128M
upload_tmp_dir = "f:/Wamp/tmp"

user_dir =

user_ini.cache_ttl = 300
user_ini.filename = ".user.ini"

variables_order = "GPCS"

windows.show_crt_warning = Off

xmlrpc_error_number = 0
xmlrpc_errors = Off

zend.detect_unicode = On
zend.enable_gc = On
zend.multibyte = On
zend.script_encoding =
			

Ci-après, il y a des modules sans paramétrage.

[ctype]
			
[curl]
			
[date]
date.timezone = Europe/Paris
			
[dom]
			
[enchant]
			
[ereg]
			
[exif]
			
[fileinfo]
			
[filter]
			
[ftp]
			
[gd]
			
[gettext]
			
[gmp]
			
[hash]
			

Pour le module "iconv", j'ai fait le choix d'utiliser la norme "UTF-8" comme jeu de caractères.

[iconv]
iconv.input_encoding = UTF-8
iconv.internal_encoding = UTF-8
iconv.output_encoding = UTF-8
			
[imap]
			
[interbase]
ibase.allow_persistent = 1

ibase.dateformat = "%Y-%m-%d"

ibase.default_db =
ibase.default_user =
ibase.default_password =
ibase.default_charset =

ibase.max_persistent = -1
ibase.max_links = -1

ibase.timeformat = "%H:%M:%S"

ibase.timestampformat = "%Y-%m-%d %H:%M:%S"
			
[intl]
intl.default_locale = fr_FR
intl.error_level = E_WARNING
			
[json]
			
[ldap]
ldap.max_links = -1
			
[libxml]
			
[mbstring]
mbstring.http_input = pass
mbstring.http_output = pass
			
[mcrypt]
			
[mhash]
			
[mysql]
mysql.allow_local_infile = On
mysql.allow_persistent = On
mysql.cache_size = 2000
mysql.connect_timeout = 60
mysql.default_host =
mysql.default_password =
mysql.default_port = 3306
mysql.default_socket =
mysql.default_user =
mysql.max_links = -1
mysql.max_persistent = -1
mysql.trace_mode = Off
			
[mysqli]
mysqli.allow_local_infile = On
mysqli.allow_persistent = On
mysqli.cache_size = 2000
mysqli.default_host =
mysqli.default_port = 3306
mysqli.default_pw =
mysqli.default_socket =
mysqli.default_user =
mysqli.max_links = -1
mysqli.max_persistent = -1
mysqli.reconnect = Off
mysqli.rollback_on_cached_plink = Off
			
[mysqlnd]
mysqlnd.collect_statistics = On
mysqlnd.collect_memory_statistics = On
			
[odbc]
odbc.allow_persistent = On
odbc.check_persistent = On
odbc.default_cursortype =
odbc.default_db =
odbc.default_pw =
odbc.default_user =
odbc.defaultbinmode = 1
odbc.defaultlrl = 4096
odbc.max_links = -1
odbc.max_persistent = -1
			
[openssl]
openssl.cafile =
openssl.capath =
			
[pcre]
			
[PDO]
			
[pdo_firebird]
			
[pdo_mysql]
pdo_mysql.cache_size = 2000
pdo_mysql.default_socket =
			
[pdo_odbc]
			
[pdo_pgsql]
			
[pdo_sqlite]
			
[pgsql]
pgsql.allow_persistent = On
pgsql.auto_reset_persistent = Off
pgsql.ignore_notice = Off
pgsql.log_notice = Off
pgsql.max_links = -1
pgsql.max_persistent = -1
			
[Phar]
phar.cache_list =
phar.readonly = On
phar.require_hash =
			
[reflection]
			

Pour le module "session", nous avons détaillé les paramètres concernant "upload_progress", c'est-à-dire la barre de progression.

[session]
session.auto_start = Off

session.cache_expire = 180
session.cache_limiter = nocache

session.cookie_domain =
session.cookie_httponly = 
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_secure =

session.gc_divisor = 1000
session.gc_maxlifetime = 86400
session.gc_probability = 1

session.hash_bits_per_character = 5
session.hash_function = 0

session.name = PHPSESSID

session.referer_check =

session.save_handler = files
session.save_path = "f:/Wamp/tmp"

session.serialize_handler = php

session.upload_progress.cleanup = On
session.upload_progress.enabled = On
session.upload_progress.freq =  "1%"
session.upload_progress.min_freq = "1"
session.upload_progress.name = "PHP_SESSION_UPLOAD_PROGRESS"
session.upload_progress.prefix = "upload_progress_"

session.use_cookies = 1
session.use_only_cookies = 1
session.use_strict_mode = 0
session.use_trans_sid = 0
			
[shmop]
			
[simplexml]
			
[snmp]
			
[soap]
soap.wsdl_cache = 1
soap.wsdl_cache_dir = "/tmp"
soap.wsdl_cache_enabled = 1
soap.wsdl_cache_limit = 5
soap.wsdl_cache_ttl = 86400
			
[sockets]
			
[spl]
			
[sqlite3]
sqlite3.extension_dir =
			
[standard]
default_socket_timeout = 60

url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"
			
[tidy]
tidy.clean_output = Off
			
[tokenizer]
			
[wddx]
			
[xml]
			
[xmlreader]
			
[xmlrpc]
			
[xmlwriter]
			
[xsl]
			

Comme vu précédemment, nous déclarons ici le module "zend opcache".

[zend opcache]
opcache.blacklist_filename =
opcache.consistency_checks = 0
opcache.dups_fix = 0
opcache.enable = 1
opcache.enable_cli = 1
opcache.enable_file_override = 0
opcache.error_log = "f:/Wamp/logs/opcache_error.log"
opcache.fast_shutdown = 1
opcache.file_update_protection = 2
opcache.force_restart_timeout = 180
opcache.inherited_hack = 1
opcache.interned_string_buffer = 8
opcache.load_comments = 1
opcache.log_verbosity_level = 4
opcache.max_accelerated_files = 8000
opcache.max_file_size = 0
opcache.max_wasted_percentage = 5
opcache.memory_consumption = 300
opcache.mmap_base =
opcache.optimization_level = 0xffffffff
opcache.preferred_memory_model =
opcache.protect_memory = 0
opcache.restrict_api =
opcache.revalidate_freq = 60
opcache.revalidate_path = 0
opcache.save_comments = 1
opcache.use_cwd = 1
opcache.validate_timestamps = 1
			
[zip]
			
[zlib]
zlib.output_compression = Off
			

5) Les modules supplémentaires.

Nous placerons ici, le paramétrage de tous les modules qui sont pas ni natifs, ni présents dans le répertoire "/ext" lors de l'installation de la version php que vous utilisez. Ce découpage, c'est juste pour faire la distinction et n'a aucune raison particulière.

;;;;;;;;;;;;;;;;;;;;;;
; Additional Modules ;
;;;;;;;;;;;;;;;;;;;;;;
			

6) Téléchargement du fichier php.ini.

Vous pouvez télécharger le fichier zipper php.ini que j'utilise actuellement dans WampServer pour faire mes tests.

Il est conforme à la version Apache 2.4, en usage avec les versions php 5 & 6. Pour débuter avec WampServer, ceci est largement suffisant.

Comme chaque configuration est particulière, je tiens à souligner que mon WampServer est installé dans le répertoire "F:\" et de ce fait, vous devez intervenir dans le fichier php.ini pour corriger cela.

7) Conclusion.

En ce que concerne le paramétrage, il y a certainement des améliorations à faire, voire même des modifications vis-à-vis de ce que j'utilise. Vous pouvez me solliciter pour ces améliorations afin que je les introduise dans ce didacticiel. L'important est d'avoir un exemple qui fonctionne correctement pour débuter.

Si vous avez besoin de renseignements supplémentaires, je vous conseille de lire le didacticiel consacré à l'installation de WampServer.

Si ce sont des questions, vous pouvez les posez dans le forum consacré à WampServer.