cinnk magazine janvier 2016

Happy new year !

Toute l'équipe de Cinnk magazine vous souhaite une bonne et heureuse année 2016 !

Mise en ligne d'un site web : modifier les directives du php.ini

Comme promis ce mois ci nous attaquons le plat de résistance : comment influencer le serveur, et modifier les directives du php.ini par quelques charmantes œillades au php.ini, .htaccess, codes php, et commandes ssh (avec Putty). En effet, que vous ayez choisi un serveur mutualisé ou dédié, vous allez pouvoir modifier certains paramètres de configuration dont vous pourriez avoir besoin selon les modules et fonctionnalités de votre site. Chaud devant !

mise-en-ligne-site-web

carre le php.ini d'un peu plus près

img1 Le php.ini est un fichier texte qui se trouve à la racine supérieure de vos dossiers sur votre serveur. Il contient tous les paramètres du langage php. Vous pourrez avoir besoin d'activer, désactiver ou modifier les valeurs de certaines données, comme les magic Quotes, la taille maximale autorisée d'upload de fichiers, la version php de votre serveur, ou d'autres données imposées par l'installation de Joomla!, de modules de joomla!, d'optimisations ou fonctionnalités spécifiques à votre site. Ces données peuvent être modifiées dans une certaine mesure, plus ou moins large selon votre hébergeur et votre type d'hébergement, dédié ou mutualisé.

Commençons d'abord par regarder comment est configuré votre serveur...

rond Afficher la configuration du php.ini

Par un fichier php

Créez un fichier que vous nommerez "info.php", et contenant le code suivant :

php-info

 

placez le fichier à la racine de votre site, et exécutez-le (www.schpoulniz.com/info.php).

php ini

• Par joomla!

Depuis votre espace administrateur, rendez-vous dans système > informations système >informations php

joom php

rond Que puis-je modifier dans le php.ini ?

La majorité des options sont modifiables, sauf celles impactant les ressources des serveurs, mais cela dépend de votre hébergeur.
Dans le cas d'un hébergement mutualisé, vous pourrez modifier certaines directives par votre control panel, avec un fichier ".htaccess", ou avec un fichier que vous nommerez "php.ini" et placerez à la racine de tous les dossiers qui sont concernés par vos modifications. Dans le cas d'un serveur dédié vous aurez plus de libertés de modifications, vous pourrez également modifier le fichier "php.ini" original en plus des autres méthodes.
Ces données sont variables selon les prestataires, il faut donc consulter la documentation du votre.
D'une façon plus générale, pour en savoir plus sur les directives modifiables d'un php.ini, rendez-vous sur le manuel de php.net :
Toutes les directives :
http://fr2.php.net/manual/fr/ini.list.php
Repérez la colonne « modifiable » dans le tableau des directives, vous verrez avec quel mode vous pourrez intervenir.
Les directives modifiables :

php directives

loupe

Lorsque vous utilisez le module Apache, vous pouvez changer les paramètres de configuration en utilisant les directives dans les fichiers de configuration d'Apache (httpd.conf) et dans les fichiers .htaccess. Vous aurez besoin des privilèges "AllowOverride Options" ou "AllowOverride All".

carre Modifier ou créer un php.ini

cherche

Peut-être aurez-vous la chance de pouvoir modifier le réglage désiré par le contrôle panel de votre serveur dédié ou mutualisé. Les données que vous pourrez modifier dépendent de votre hébergeur, rendez-vous dans la doc, ou testez !

Ce n'est pas suffisant ? alors direction : php.ini

rond Encore faut-il savoir où il est !

Sur un serveur dédié
Cette information figure dans les tableaux du php.ini que nous avons édité plus haut. Recherchez-y la ligne "Configuration File (php.ini) Path" pour en obtenir le chemin (je vous donne un indice : c'est la sixième ligne).
Sur un serveur mutualisé
Vous n'y avez pas accès. Il vous faudra créer un fichier php.ini contenant les données à modifier.

attentionG Attention : La portée d'un fichier php.ini sur un serveur mutualisé n'est pas récursive
Les modifications de la configuration sont appliquées uniquement dans le dossier où le fichier php.ini se trouve. Si vous souhaitez que les modifications soient appliquées dans plusieurs dossiers :
1 - Vous pouvez copier le fichier créé "php.ini" dans chaque dossier où les modifications doivent être appliquées. Vous verrez plus bas comment le faire plus rapidement qu'à la main !
2 - Vous pouvez créer une commande dans un fichier ".htaccess" pour le rendre récursif (voir "un peu de htaccess")

rond Les commandes de bases

safe_mode : désactive des fonctions de PHP considérées comme dangereuses (shell_exec, exec, passthru, system, etc…).
register_globals : doit rester sur off : si vos variables ne sont pas initialisées on pourrait accéder à vos données protégées.
file_uploads : autorise ou non l'upload de fichiers.
upload_max_filesize : taille maximale des fichiers uploadés autorisée.
magic_quotes_gpc : ajoute des quotes (“ “) aux variables afin d'éviter les injections sql.
post_max_size : taille maximale des fichiers.
memory_limit : taille de stockage allouée pour l'exécution de scripts (envoi de mailing par exemple).
display_errors : permet d'afficher les messages d'erreurs de PHP pendant la production.
upload_tmp_dir : dossier de stockage des fichiers temporaires. Si rien n'est indiqué : dossier "tmp" par défaut.
max_execution_time : temps d'execution de scripts dans une page.

rond La syntaxe

Créez ou éditez votre fichier avec un bloc-note.
La syntaxe est simple, vous indiquez :
variable_php = nouvelle_valeur

phpini

loupe

Exemple, modifier l'upload de fichiers

upload_max_filesize = 128M
post_max_size = 128M
max_execution_time = 180

Attention : Dans cet exemple, nous augmentons la taille d’upload des fichiers. Notez que nous augmentons aussi le temps d’exécution des scripts en conséquence, avec la directive "max_execution_time". Logique !

La boutique

Trucs @ Astuces Joomla! 3Le livre 100 Trucs & Astuces pour Joomla! 3
vous permet de faire les bons choix parmi ceux qui s'offrent à vous lors de la création de votre site web ou lors de l'ajout de fonctionnalités ou d'extension grâce à de simple conseils, de vous simplifier la tâche grâce à des astuces et des mini-tutoriels pour gagner du temps dans la gestion de votre site Joomla!, ainsi que dans l'organisation de sa sécurité, son référencement, ses performances, et bien plus encore.

rond Serveur mutualisé : placez votre php.ini dans tous les dossier

Comme je vous le disais, le fichier php.ini sur un serveur mutualisé influe uniquement dans le dossier dans lequel il est déposé. dans le cas d'un site Joomla! votre soirée prévue au makumba (voir article du mois dernier)  risque d'être compromise...
Ou pas ! car voici un code php qui sauvera votre soirée :
Créez un fichier php, nommé "makumba.php" par exemple et copiez ce code, qui vérifiera si un fichier php.ini est déjà présent dans chaque dossier, et y copiera votre fichier le cas échéant :

// set this value to Y if you only want to overwrite old php.ini files
// set this value to N if you want to put a php.ini file in every directory
$overwriteOnly = "N";
if ($overwriteOnly == "Y") echo "Operating in Overwrite Only Mode

"; $path = "/homepages/xx/dxxxxxxxxx/htdocs";
$source = $path . "/php.ini";
if (!file_exists($source)) die('Error - no source php.ini file');
function search($dir) {
global $source;
global $overwriteOnly;
$dh = opendir($dir);
while (($filename = readdir($dh)) !== false) {
if ( $filename !== '.' AND $filename !== '..' AND $filename !== 'cgi-bin' AND is_dir("$dir/$filename") ) {
$path = $dir."/".$filename;
$target = $path . "/php.ini";
if (!file_exists($target) AND $overwriteOnly == "Y") {
echo "$path skipped - no php.ini file
"; } else {
echo "$target
"; if (!copy($source,$target)) echo "Write failed for $target
"; if (file_exists($target)) chmod($target,0600);
}
search($path);
}
}
closedir($dh);
}
search($path);
echo "
Done."; 

attentionG

Attention : Vous avez une variable à personnaliser dans ce code :
$path : Cherchez le chemin de vos fichiers (voir plus bas dans “intervenir en php” ou “en ligne de commande”) et inscrivez le dans la variable $path
Vérifiez bien que votre php.ini créé est bien à la racine. Ce sera donc la variable « $target ».

Exécutez votre code (www.schpoulniz.com/makumba.php)
Et voilà, vous avez même le temps de vous faire beau/belle pour le Makoumba !

carre Un peu de htaccess

htaccess Le fichier htaccess permet de surcharger la configuration du serveur et envoyer des commandes "à la volée".
Contrairement aux php.ini personnalisés, sa portée est récursive dans les sous-dossiers.
Les possibilités de ce fichier dans la modification de la configuration globale du serveur est plus limitée que les autres méthodes, néanmoins il reste intéressant pour quelques ajustements, ou en complément.
 
Il est généralement utilisé pour gérer les sécurités et restrictions (filter les ip par exemple), réécritures d'url, redirections, messages d'erreur...
Le mois prochain, lorsque j'évoquerai avec vous les noms de domaines, je vous reparlerai de l'utilisation d'un fichier htaccess dans le cadre des redirections.
attentionG

Attention : Peut-on changer les directives du php.ini avec un ".htaccess" ?
Pour modifier la configuration de PHP depuis un fichier .htaccess, PHP doit être installé en tant que module apache, pas en tant que CGI. Vous obtenez sinon une erreur 500.
"php_value" et "php_flag" ne fonctionneront donc qu'avec une version php qui fonctionne en module apache.
Vous pourrez en savoir plus ici : http://php.net/manual/fr/configuration.changes.php.
Un autre article : http://www.lephpfacile.com/manuel-php/configuration.changes.php
Mais la plupart du temps ce ne sera pas possible !

rond Modifier la version de php

Si la version de php de votre serveur ne correspond pas aux pré-requis Joomla! vous pouvez la modifier par un simple ".htaccess".
j'ai détaillé ce point le mois dernier, je vous invite donc à consulter la partie qui y est consacrée dans mon article.

rond Récursion dans les sous-répertoires des directives d'un php.ini créé sur un hébergement mutualisé 

Pour que le php.ini que vous avez créé affecte de façon récursive les sous-dossiers dans lequel il est placé, créez ou modifiez le ".htaccess" de la racine de votre site (dans l'exemple ci-dessous : "schpoulniz/public_html") en y ajoutant ce code :

suPHP_ConfigPath /home/schpoulniz/public_html

Vous prendrez soin de noter votre chemin à la place de l'exemple, bien sûr.

rond Installation de Joomla! : Mes "magic quotes" sont en rouge !

Peut-être avez-vous déjà eu ce message :

 ckeck

 Il faut désactiver les magic quotes. Pour cela modifiez le htaccess.txt présent à la racine de votre site Joomla!, en le renommant ".htaccess", et en ajoutant le code suivant à la fin :

SetEnv MAGIC_QUOTES 0

 En fonction de votre hébergeur, le code adéquat peut également être celui-ci :

php_flag magic_quotes_gpc off
php_flag magic_quotes_gpc Off

rond Gagner en rapidité d'affichage en modifiant le cache du navigateur

Il ne s'agit pas de modifier le php.ini, mais c'est un petit cadeau pour noël : Le principe est d'augmenter le temps de validité des fichiers image de votre cache. Ainsi dès le second affichage de votre site par l'internaute l'affichage sera plus rapide, et ce pendant une durée plus longue qu'habituellement.
Voici un exemple de code à ajouter à votre fichier ".htaccess", agrémenté des clauses "num types" :

ExpiresByType text/html "access plus 1 month 15 days 2 hours"
ExpiresByType image/gif "modification plus 5 hours 3 minutes"

carre Intervenir sur les directives en php

php Si vous n’avez pas accès à votre serveur, c’est la solution la plus simple et la plus sûre, mais seul le script ciblé sera concerné.
Les variables de configuration ne sont pas modifiées de façon permanente, la nouvelle valeur ne sera active que pour la durée de la requête dans laquelle ini_set() est appelée.
Il n'est pas judicieux de modifier certaines variables comme "registrer_globals" car ce comportement est défini avant l'exécution du script, il n'aura donc pas d'effet.

Attention toutefois, dans un soucis de sécurité et pour bloquer les scripts de hackers qui seraient plus longs que la norme, certains hébergeurs mutualistes bloquent cette fonction..
loupe

Trouver le chemin d'un fichier
Pour connaitre le path/chemin de votre hébergement créez un fichier « chemin.php » par exemple, avec ces lignes :

php-info

Placez-le à la racine de votre site, et exécutez le (www.schpoulniz.com/chemin.php)

rond Où mettre mon code php ?

A la racine de votre site Joomla!, modifiez l'un des deux fichiers suivants :
- configuration.php. (Attention, ça fonctionne mais ce fichier est réécrit à chaque mise à jour, donc il ne vaut mieux pas). 
- index.php dans le dossier de l'administrateur.

rond Les commandes de base

ini_set () : Permet d'attribuer une valeur à une variable.
get_cfg_var() : Retourne la valeur d'une option de PHP.
ini_get() : Lit la valeur d'une option de configuration.
ini_get_all() : Lit toutes les valeurs de configuration.
ini_restore() : Restaure la valeur de l'option de configuration.

rond La syntaxe

Entre les parentèses nous indiquerons la variable à modifier, puis une virgule, et la nouvelle valeur attribuée. Cette dernière sera du format identique au php.ini (yes/no, 1/0, ou une valeur).

loupe

Exemple avec l'upload de fichiers

!--
echo ini_get('upload_max_filesize');
    ini_set('upload_max_filesize', '128M');
    ini_set('post_max_size', '128M');
    ini_set('max_execution_time', '180'); 
echo ini_get('upload_max_filesize');
--> 

Ici nous reprenons l'exemple précédent du php.ini.
Nous affichons la valeur de la variable "upload_max_filesize", nous lui attribuons la valeur "128M".
Nous modifions également les valeurs post et temps d'éxécution, puis affichons à nouveau la valeur de "upload_max_filesize". Les lignes "echo" resteront pour vos tests mais vous la supprimerez en production.
Attention : Si vous faites un phpinfo, les valeurs affichées restent celles d'origine, c'est normal car ces données ont été "surchargées" après-coup. Fiez-vous à la donnée renvoyée par "echo".

Toutes les valeurs en mode "php_ini_all" du php.ini peuvent être modifiées de cette façon.

carre La puissance de la ligne de commande en SSH

ssh

Vous ne pourrez vous connecter en SSH que si vous possédez un serveur dédié.

La ligne de commande permet de réaliser un grand nombre d'opérations à distance, notamment l'administration de serveurs ou bien le transfert de fichiers.

Sous Linux et Mac, vous n’avez rien besoin de télécharger, les systèmes intègrent déjà un outil nommé la plupart du temps « Terminal »

Sous windows, vous pouvez télécharger PUTTY (par exemple).

rond Installer PUTTY et vous connecter

PUTTY est un logiciel qui se télécharge et s'installe classiquement.
Vous pouvez le trouver sur le site de putty.org.

Putty settings

Une fois installé et lancé, vous entrez vos identifiants SSH fournis par votre hébergeur.
Vous arrivez à la ligne de commandes.

rond Les commandes de base

loupe

la notice sous la main :
Pour avoir plus d'informations sur une commande ou un programme, utilisez le manuel Linux en tapant la commande "man" suivie du nom de la commande.
Comme pour les méthodes précédentes, la syntaxe est très simple : tapez la commande, suivie du nom de dossier ou fichier concerné. 
Les séparateurs tels que *, -, /, .., : permettent de préciser les commandes.

Un petit exemple de syntaxe :
mv truc.txt schpoulniz.txt
permet de renommer (la commande mv) le fichier « truc.txt » en « schpoulniz.txt »

Voici une petite liste non exhaustive qui vous permettra d'avoir une idée de ce qu'on peut faite en ligne de commande. Pour en savoir plus, notamment sur la syntaxe par des exemples et les attributs des commandes de base, rendez-vous sur le site de wiki linux très complet.

man : Affiche le manuel des commandes. (syntaxe : man man pour avoir tout par exemple)
pwd : Connaître le chemin du serveur.
ls : Affiche le contenu d’un répertoire.
cd : Navigation d’un répertoire à un autre (cd + nom du répertoire).
cp : Créer une copie d’un fichier.
mv : Déplacer un fichier, permet de le renommer.
rm : Effacer un fichier ou répertoire.
mkdir : Créer un répertoire.
touch : Créer un fichier (avec l’extension désirée).
chown : Si vous créez, modifiez, téléchargez un fichier en root, le propriétaire sera "root". Il faudra donc changer le propriétaire pour y accéder par le ftp, cette commande permet de le faire.
vi : Modifier un fichier avec un éditeur de texte.
nano : Un autre éditeur de texte.
chmod : Change les droits d’un fichier ou répertoire.
ssh : Connexion sécurisée à une machine distante.
scp : Copie des fichiers entre serveur et client en ssh (sécurisé).
rsync : Copie de fichiers vers ou depuis un hôte distant (syncronisation).
find : Chercher et exécuter des commandes sur la recherche.
apt : Installer, désinstaller des packages.
tar : Créer, exécuter, compresser ou décompresser des archives.
restart : Relancer le serveur.
exit : Sortie de la cession ssh.

loupe

Trouver le chemin de votre hébergement :
Il suffit de taper la commande "pwd" à l'invite de commande.

rond Vi éditor : l'éditeur de texte

Il en éxiste d'autres, nous parlerons de "vi" dans cet article. Cet éditeur vous permet de modifier plus simplement le contenu d'un fichier qu'en passant pas les lignes de commandes unix. 
"vi" offre deux modes de fonctionnement : le mode commande et le mode insertion.
Au démarrage il est en mode commande, qui permet de déplacer le curseur, de parcourir le document et de copier-coller. On le quitte en entrant du même coup en mode insertion, en utilisant une commande d'insertion (touche "i") ou de modification.
En mode insertion il est possible de saisir du texte. Appuyer sur la touche [ESC] pour revenir en mode commande.
Consultez l'article sur vi de site de wiki linux pour en savoir plus.

rond Modifier le php.ini

Nous allons modifier la valeur de "max_upload", pour garder le même exemple que précédemment.
Connectez-vous en ROOT, accédez à la ligne de commandes :

145190

Nous accedons au dossier, et sauvegardons le fichier php.ini sous le nom "php.ini.bak" grâce au code ci-dessous (on ne veut pas "faire tout planter", n'est-ce pas ? :

cd /usr/local/lib
cp php.ini php.ini.bak

Nous l'éditons grâce à l'éditeur de texte accessible avec la commande "vi"

vi php.ini

Appuyez sur la touche i afin de passer en mode édition. Trouvez la directive que vous souhaitez modifier, en faisant une recherche vers le bas de la page à l'aide de la commande "/" de vi éditor ainsi :

/upload_max_filesize

Puis "entrée". Renseignez la valeur souhaitée.

Si vous voulez remettre la version précédente du php.ini :

cd /usr/local/lib
mv php.ini php.ini.modifie && mv php.ini.bak php.ini

Appuyez sur la touche Echap pour quitter le mode édition, et enregistrez le fichier avec la commande suivante :

:wq

Relancez votre serveur pour que les modifications soient prises en compte :

reboot

Vérifiez que tout fonctionne bien... C'est fait !

carreLe ventre bien tendu

fin

Le plat d'aujourd'hui était particulièrement copieux pour les méninges. Une bonne digestion est nécessaire, surtout si on y ajoute la dinde de noël !

Début février nous aborderons donc le dernier plat de notre menu. En dessert vous saurez tout sur les noms de domaines et leur configuration, ce qui achèvera en beauté votre installation et mise en ligne de votre site Joomla!.

Et bien sûr n'hésitez pas à réagir, préciser, rectifier, partagez vos expériences sur ce sujet !



Notez cet article:
4
Le sondage du mois
Les goodies webdesign Janvier 2016

Commentaires 5

 
Arkantalis le mardi 2 février 2016 07:18

Merci pour cette excellent article qui a le mérite d'aborder un sujet trop peu abordé dans le domaine de Joomla et en français !
Serait-il possible d'approfondir encore un peu plus pour ceux ayant déjà franchi le cap et tentant d'aborder les serveurs dédiés avec tous les problèmes que peuvent poser suphp ou suexec ?

Merci pour cette excellent article qui a le mérite d'aborder un sujet trop peu abordé dans le domaine de Joomla et en français ! Serait-il possible d'approfondir encore un peu plus pour ceux ayant déjà franchi le cap et tentant d'aborder les serveurs dédiés avec tous les problèmes que peuvent poser suphp ou suexec ?
Elizabeth le lundi 8 février 2016 10:12

Bonjour Arkantalis,
merci de ton commentaire,
je n'ai pas les connaissances nécessaires pour aller plus loin sur suphp ou suexec, alors je soumet ta demande à l'équipe pour trouver un rédacteur qui pourrait proposer un article à ce sujet,

à bientôt !

E.

Bonjour Arkantalis, merci de ton commentaire, je n'ai pas les connaissances nécessaires pour aller plus loin sur suphp ou suexec, alors je soumet ta demande à l'équipe pour trouver un rédacteur qui pourrait proposer un article à ce sujet, à bientôt ! E.
Arkantalis le lundi 8 février 2016 13:24

Salut Elizabeth, pour info si ca peux aider nous avons avancé sur le montage de serveur webdédié sous linux Debian et la nouvelle version (Debian 8 Jessie) change tout pour le probleme dont je parlais (SuPHP et SuEXEC). Ene effet SuPHP n'est plus supporté et tout est remplacé par PHP-FPM qui est claireme,nt plussimple a mettre en place et plus stable.
Voilou si ca peux servir a quelqu'un ;)

Salut Elizabeth, pour info si ca peux aider nous avons avancé sur le montage de serveur webdédié sous linux Debian et la nouvelle version (Debian 8 Jessie) change tout pour le probleme dont je parlais (SuPHP et SuEXEC). Ene effet SuPHP n'est plus supporté et tout est remplacé par PHP-FPM qui est claireme,nt plussimple a mettre en place et plus stable. Voilou si ca peux servir a quelqu'un ;)
Elizabeth le lundi 8 février 2016 13:29

Merci Arkantalis,
Cela peut en effet être très utile à savoir, d'ailleurs si tu veux proposer un article à ce sujet...
;)

Merci Arkantalis, Cela peut en effet être très utile à savoir, d'ailleurs si tu veux proposer un article à ce sujet... ;)
Arkantalis le lundi 8 février 2016 13:34

Le sujet est interessant mais n'étant clairement pas un spécialiste je ne me sentirai pas légitime sur un sujet aussi complexe et pointilleux que DEBIAN. Le moindre écart de ma part, et dieu sait que j'en fais, ne serait que très peu toléré par les lecteurs et encore moins par les connaisseurs. Je pense vraiment que ce sujet peux interesser des gens mais il faut un duo Webdesigner/specialiste Linux pour faire ca bien et de maniere simple a comprendre.
Mais d'autres sujets pourquoi pas :)

Le sujet est interessant mais n'étant clairement pas un spécialiste je ne me sentirai pas légitime sur un sujet aussi complexe et pointilleux que DEBIAN. Le moindre écart de ma part, et dieu sait que j'en fais, ne serait que très peu toléré par les lecteurs et encore moins par les connaisseurs. Je pense vraiment que ce sujet peux interesser des gens mais il faut un duo Webdesigner/specialiste Linux pour faire ca bien et de maniere simple a comprendre. Mais d'autres sujets pourquoi pas :)
Déjà inscrit ? Connectez-vous ici
Guest
lundi 23 octobre 2017
Si vous souhaitez vous inscrire, veuillez saisir un nom d'utilisateur, mot de passe et nom.

Image Captcha

Sur ce site, nous utilisons des cookies.