Difference between revisions of "PHP/fr"

From SME Server
Jump to navigationJump to search
(nczea)
Line 282: Line 282:
 
  Aug 12 17:27:42 homer httpd: PHP Warning:  main(): open_basedir restriction in effect. File(/tmp/test.php) is not within the allowed path(s): (/home/e-smith/files/ibays/Primary/html/) in /home/e-smith/files/ibays/Primary/html/test.php on line 2
 
  Aug 12 17:27:42 homer httpd: PHP Warning:  main(): open_basedir restriction in effect. File(/tmp/test.php) is not within the allowed path(s): (/home/e-smith/files/ibays/Primary/html/) in /home/e-smith/files/ibays/Primary/html/test.php on line 2
  
En général vous ne trouverez ce message que dans les fichiers journaux car, par défaut (cf. supra), PHP est configuré pour empêcher l'affichage de messages d'erreur aux utilisateurs finaux. Cela peut être modifié selon [[PHP#Display_Error_Messages|ce guide en anglais]].
+
En général vous ne trouverez ce message que dans les fichiers journaux car, par défaut (cf. supra), PHP est configuré pour empêcher l'affichage de messages d'erreur aux utilisateurs finaux. Cela peut être modifié selon [[PHP#Display_Error_Messages|ce tutoriel en anglais]].
  
 
====Modification du paramètre PHPBaseDir pour une baie d'information====
 
====Modification du paramètre PHPBaseDir pour une baie d'information====

Revision as of 21:39, 26 August 2023


PythonIcon.png Skill level: Medium
The instructions on this page require a basic knowledge of linux.




php
Php.jpg
php logo
MaintainerUnilenium, ReetP
Urlhttps://www.php.net/
Category

web

Tags wwwhttpssl


Mainteneurs

Unnilennium, ReetP

Description

A partir de la version 10 du serveur Koozali SME, le module php n'est plus utilisé pour httpd. Au lieu de cela, nous nous appuyons sur php-fpm qui peut activer toutes les versions disponibles de php.

Par défaut, nous fournissons les versions suivantes :

  • 54 (maintenue par Red-Hat jusqu'à CentOS 7 ; fin de vie : 30 juin 2024).
  • 55,56,70,71,72 (Note : non supporté !).
  • 73 (supportée jusqu'au 6 déc. 2021).
  • 74 (supportée jusqu'au 28 nov. 2022).
  • 80 (supportée jusqu'au 26 nov. 2023).


Clés db disponibles pour contrôler la configuration et les services PHP

Vous devez d'abord décider si vous souhaitez modifier le comportement de PHP pour une baie d'information (ibay) ou pour une version spécifique de PHP, ou pour toutes les versions de PHP.

Propriétés de configuration de la base de données
Clés Rôle
php personnalisation de /etc/php.ini pour php54
php55 personnalisation de /opt/remi/php55/root/etc/php.ini si aucune propriété n'est définie, les propriétés des clés php seront utilisées
php56 personnalisation de /opt/remi/php56/root/etc/php.ini
php70 personnalisation de /etc/opt/remi/php70/php.ini
php71 personnalisation def /etc/opt/remi/php71/php.ini
php72 personnalisation de /etc/opt/remi/php72/php.ini
php73 personnalisation de /etc/opt/remi/php73/php.ini
php74 personnalisation de /etc/opt/remi/php74/php.ini
php80 personnalisation de /etc/opt/remi/php80/php.ini

Chaque version de php a son propre service php-fpm en cours d'exécution, l'entrée de la base de données de configuration associée est (comme indiqué dans le tableau ci-dessus) php-fpm pour php (c'est-à-dire php54), php55-php-fpm pour php55 et ainsi de suite.

Si vous souhaitez vraiment désactiver une version de php, voici ce que vous devez faire pour php55, par exemple :

config setprop php55-php-fpm status disabled
signal-event webapps-update

Propriétés disponibles

Voici une liste des propriétés disponibles pour configurer php. Vous devez choisir à quel niveau vous souhaitez gérer le changement.

  • Voulez-vous le changement pour l'ensemble du serveur ? -- alors choisissez probablement de le changer pour la clé php) : configuration de la base de données setprop php ...
  • Voulez-vous le changement pour une version spécifique de php ? -- alors vous devriez probablement le faire avec une clé php spécifique, par exemple : configuration de base de données setprop php74 ...
  • Voulez-vous appliquer le changement pour une baie spécifique ? -- c'est ce que nous vous suggérons de faire dans la plupart des cas : dbaccounts setprop mabaie ..
paramètre php propriété de la baie propriété de php.ini par défaut note
- PHPVersion - 74 peut varier selon la mise à jour si laissé vide
allow_url_fopen AllowUrlFopen AllowUrlFopen off risque de sécurité, maintenir à off
allow_url_include - - off
auto_prepend_file AutoPrependFile - enabled /usr/share/php/auth_translation.php sauf si désactivé
disable_functions DisableFunctions - system,show_source, symlink,exec,dl,shell_exec,passthru,phpinfo,escapeshellarg,escapeshellcmd
display_errors DisplayErrors - off
error_log - - /var/log/php/$key/error.log
error_reporting ErrorReporting - E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT
expose_php - ExposePHP Off
file_upload FileUpload - Off
mail.add_x_header - MailAddXHeader disabled uniquement global, pas par version php
mail.force_extra_parameters MailForceSender MailForceSender root@$DomainName ibayname@$DomainName pour les baies d'information
mail.log - MailLog disabled
max_execution_time MaxExecutionTime MaxExecutionTime 30
max_file_uploads - MaxFileUpload 20
max_input_time MaxInputTime MaxInputTime 60
memory_limit MemoryLimit MemoryLimit 128M
open_basedir PHPBaseDir - /home/e-smith/files/ibays/IBAYNAME/:/var/lib/php/IBAYNAME/:/usr/share/php/:/usr/share/pear/:/opt/remi/php$version/root/usr/share/pear/:/opt/remi/php$version/root/usr/share/php/
post_max_size PostMaxSize PostMaxSize 20M
security.limit_extensions AllowPHTML disabled permet à php d'interpréter plus de types de fichiers (.php .htm .html .phar .phtml .xml)
sendmail_from - MailForceSender root@$DomainName
sendmail_path - SendmailPath /usr/sbin/sendmail -t -i
short_open_tag - ShortOpenTag On
upload_max_filesize UploadMaxFilesize UploadMaxFilesize 10M

Si vous souhaitez définir une valeur spécifique pour une baie, nous montrons ici comment utiliser php80 pour la baie MABAIE et éviter d'avoir une fonction désactivée :

db accounts setprop MABAIE disable_functions none PHPVersion 80
signal-event webapps-update
Important.png Note :
il est fortement suggéré d'installer la contribution smeserver-webhosting vous permettant de définir vos valeurs php de la baie depuis le gestionnaire de serveur. Tout est disponible et cela vous évite de vous tromper dans les paramètres.


Affichage des messages d'erreur

Par défaut, PHP n'affiche pas de messages d'erreur à l'écran. Parfois, vous obtenez une page blanche lors de l'exécution de scripts PHP. Habituellement, une sorte d'erreur s'est produite, mais ce texte d'erreur ne sera pas affiché car SME Server est configuré pour ne pas les afficher. Au lieu de cela, les messages d'erreur figurent dans les fichiers journaux du serveur Web et dans le fichier journal général du serveur.

Essayez d'analyser vos fichiers journaux : /var/log/httpd/error_log et /var/log/httpd/access_log et peut-être aussi /var/log/messages.


Warning.png Attention :
il est fortement conseillé de désactiver "l'affichage des erreurs" après avoir repéré et résolu le problème, car le message d'erreur affiché peut fournir des informations (telles que la disposition du système de fichiers) qui ne doivent être connues que des administrateurs système et non des utilisateurs, sans parler des personnes mal intentionnées. Il s'agit donc d'un RISQUE DE SÉCURITÉ potentiel. Après le débogage, désactivez-le à nouveau.


Activer les modifications pour toutes les versions de php

Si vous souhaitez l'activer (à des fins de débogage par exemple), vous pouvez le faire avec les instructions ci-dessous :

mkdir -p /etc/e-smith/templates-custom/etc/php.ini
cp /etc/e-smith/templates/etc/php.ini/30ErrorHandling /etc/e-smith/templates-custom/etc/php.ini

Puis après :

sed -i /etc/e-smith/templates-custom/etc/php.ini/30ErrorHandling -e 's/display_errors.*/display_errors          = On/g' 

Après cela, lancez les commandes suivantes :

signal-event webapps-updates

Accédez maintenant à nouveau à votre page et voyez quelle est l’erreur.

Annuler les modifications

Si tout fonctionne, supprimez le fichier 30ErrorHandling du dossier /etc/e-smith/templates-custom/etc/php.ini et réexécutez les deux dernières lignes :

signal-event webapps-update 

Activer les modifications pour une baie spécifique

Démarre SME10 et smeserver-php-3.0.0-39

db accounts setprop MABAIE DisplayErrors enabled 
signal-event webapps-update

Restriction d'ouverture de base

SME Server a mis en place une mesure de sécurité appelée « open basedir restriction ». Cette mesure empêche PHP d'exécuter ou d'invoquer d'autres scripts PHP en dehors de la portée de sa propre arborescence ; en d'autres termes, cela crée un « bac à sable » ou une « prison ».

La configuration globale est définie dans le fichier php.ini mais vous pouvez ajouter un modification prioritaire sur chaque baie.

Message d'erreur

La restriction d'ouverture de base PHP est habituellement indiquée à l'utilisateur dans le fichier journal /var/log/messages comme ceci :

Aug 12 17:27:42 homer httpd: PHP Warning:  main(): open_basedir restriction in effect. File(/tmp/test.php) is not within the allowed path(s): (/home/e-smith/files/ibays/Primary/html/) in /home/e-smith/files/ibays/Primary/html/test.php on line 2

En général vous ne trouverez ce message que dans les fichiers journaux car, par défaut (cf. supra), PHP est configuré pour empêcher l'affichage de messages d'erreur aux utilisateurs finaux. Cela peut être modifié selon ce tutoriel en anglais.

Modification du paramètre PHPBaseDir pour une baie d'information

    (Veuillez aussi prendre connaissance de ces instructions en anglais sur la page "commandes utiles".)
  1. Ouvrez un shell du serveur SME en tant qu'utilisateur root et documentez le paramètre actuel de la directive PHPBaseDir en notant le résultat de la commande suivante : db accounts getprop ibayname PHPBaseDir Attention à l'écrire à la lettre car nous en aurons besoin à l'étape suivante. Pour la baie d'information principale, le résultat de la commande ci-dessus ressemblerait normalement à ceci : /home/e-smith/files/ibays/Primary/html/
  2. Décidez du répertoire que vous souhaitez ajouter et lancez ce qui suit : db accounts setprop ibayname PHPBaseDir value Remplacer "ibayname" par le nom de la baie et "value" par l'ancienne valeur de la directive PHPBaseDir que vous avez écrite et deux points (:) suivis du chemin complet vers le répertoire que vous souhaitez ajouter avec une barre oblique (/), par exemple : db accounts setprop Primary PHPBaseDir /home/e-smith/files/ibays/Primary/html/:/opt/gallery2/ La commande ci-dessus permettrait à PHP d'invoquer des scripts dans le chemin /opt/gallery2 à partir du dossier HTML de la baie principale. Pour permettre le téléchargement de fichiers via http vers un wiki dénommé "ibay" : db accounts setprop wiki PHPBaseDir /home/e-smith/files/ibays/wiki/:/tmp/
  3. Après avoir défini le nouveau paramètre, nous devons refléter la modification dans le fichier de configuration du serveur Web et demander au serveur Web de recharger son fichier de configuration. Cela se fait en exécutant la commande suivante : signal-event ibay-modify ibayname Assurez-vous de remplacer "ibayname" par le nom de la baie que vous venez de modifier.

Upload_tmp_dir

upload_tmp_dir

From SME Server V8 up to and including SME Server V9, you could sometimes have an error thrown by PHP and would then need to specify a temporary directory (e.g. upload_tmp_dir) which is not set in php.ini. see bugzilla:6650 and bugzilla:7652. Many php applications need this setting, the best-known culprits are Wordpress, Roundcube, eGroupWare, and there are others. ther symptoms observed are that you can't upload contents to the PHP application.

An easy resolution is to make a Custom Template to resolve this issue. see Uploadtmpdir

Advanced use of the php-fpm pools

For the ibays with with php-fpm.d/ibays.conf

for the ibays better option is to simply use the contrib Webhosting

For the contrib sharefolders with php-fpm.d/shares.conf

similar to ibays

For the contribs with php-fpm.d/www.conf

please read Building Your Contrib

For your custom needs with php-fpm.d/custom.conf

you can build your own pool to use in any place on your server, even in a subfolder of an ibay or in place of the regular ibay php-pool (property PHPCustomPool)

There are two ways in doing that

using db php

using the default template : /etc/e-smith/templates/etc/php-fpm.d/custom.conf , you can set your own pool doing:

db php set MYPOOLNAME pool Version 81 status enabled

here are the accepted supplementary properties, as always missing or empty means using default.

property default values information
status enabled enabled,disabled
Version php version to use eg 80 for php 8.0
MemoryLimit 128M
MaxExecutionTime 30
MaxInputTime 60
AllowUrlFopen off
MaxChildren 15
PostMaxSize 10M
UploadMaxFilesize 10M
FileUpload enabled
BaseDir
DisabledFunctions system,show_source,symlink,exec,dl,shell_exec,passthru,phpinfo,escapeshellarg,escapeshellcmd
User www
Group www
DisplayErrors disabled
LogErrors disabled
MaxChildren 15
AutoPrependFile enabled will use the autoprepend file
MailForceSender php\@$DomainName

you will then need two httpd.conf custom template fragment to use your pool. You will need to change MYPOOL to what you want

mkdir -p  /etc/e-smith/templates-custom/etc/httpd/conf/httpd.conf/
vim /etc/e-smith/templates-custom/etc/httpd/conf/httpd.conf/98mypoolusage
<Directory /home/e-smith/files/ibays/test/html/mysubfolder>
    SSLRequireSSL
    Options None
    Options +Indexes
    Options +FollowSymLinks
    DirectoryIndex index.php index.shtml index.htm index.html
    <FilesMatch \.php$>
         SetHandler "proxy:unix:/var/run/php-fpm/php80-MYPOOLNAME.sock|fcgi://localhost"
    </FilesMatch>
    AllowOverride All
    order deny,allow
    deny from all
    allow from all
</Directory>

then just do signal-event webapps-update

using a templates-custom

You can write your own fragment in /etc/e-smith/templates-custom/etc/php-fpm.d/custom.conf/ e.g. /etc/e-smith/templates-custom/etc/php-fpm.d/custom.conf/15mypool

You will also need to write a httpd fragment similarly to what shown just above.

Here is an example if you want a custom pool for your ibay, in /etc/e-smith/templates-custom/etc/php-fpm.d/ibays.conf/15MYIBAY

{

use esmith::AccountsDB;
use esmith::php;
my $a = esmith::AccountsDB->open_ro || die "Couldn't open the accounts database";
my $ibay = $a->get("MYIBAY");
  my $version             = PhpFpmVersionToUse($ibay);
  my $dynamic             = $ibay->prop('CgiBin') || 'disabled';
  my $custom              = $ibay->prop('CustomPool') || undef;
  next unless ($dynamic eq 'enabled' && $version eq $PHP_VERSION && $custom);
  my $key                 = $ibay->key;
  my $name                = lc $key;
  my $pool_name           = 'php' . $version . '-' . $name;
  $OUT .=<<"_EOF" if ($version eq $PHP_VERSION);

[$pool_name]
user = www
group = www
listen.owner = root
listen.group = www
listen.mode = 0660
listen = /var/run/php-fpm/$pool_name.sock
;
;
;put whatever you need there
;
;
_EOF
}

You have then to force the ibay to use it by doing :

db accounts MYIBAY setprop CustomPool enabled

This will prevent the generation of the default ibay pool in ibays.conf , and let you use /var/run/php-fpm/php$version-$name.sock socket from your template-custom... or from the db php using the same key as the name of the ibay.

Installation of composer

This is made tricky as we do not have the PHP CLI configured.

But we can install it as follows with command line arguments. This is using php74

Download:

php74 -d allow_url_fopen=on -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"

Install:

php74 -d allow_url_fopen=on  ./composer-setup.php 

Bugs

Please raise bugs under the SME-Server 10.X section in Bugzilla and select the smeserver-php component or use this link .

Below is an overview of the current issues for this package:

"No open bugs found."