Chmod désactivé chez certains hébergeurs : Fatale en PHP 8.2 #5491

Open
opened 10 months ago by marcimat · 18 comments
Owner

@pourrito disait :

Bonjour, J'ai un "petit" souci avec spip 4.2.0-dev et php 8.2
Fatal error: Uncaught Error: Call to undefined function chmod() in ~/ecrire/inc/flock.php:284

PHP Version 8.2.2

Je suppose que l’hébergeur a désactivé certaines fonctions dont chmod, ce qui fait cette fatale car en PHP 8.2+ une fonction désactivée n’existe tout simplement plus pour PHP.

Il faudrait du coup se creer un spip_chmod() pour SPIP 4.2 ou tout préfixer d’un test d’existence de la fonction.

@pourrito disait : > Bonjour, J'ai un "petit" souci avec spip 4.2.0-dev et php 8.2 > Fatal error: Uncaught Error: Call to undefined function chmod() in ~/ecrire/inc/flock.php:284 > > PHP Version 8.2.2 Je suppose que l’hébergeur a désactivé certaines fonctions dont `chmod`, ce qui fait cette fatale car en PHP 8.2+ une fonction désactivée n’existe tout simplement plus pour PHP. ![](https://git.spip.net/attachments/b1177d01-6d61-491a-97ae-de954c2073be) Il faudrait du coup se creer un `spip_chmod()` pour SPIP 4.2 ou tout préfixer d’un test d’existence de la fonction.
Owner

il y a un moment ça va être un soucis, car on peut pas dupliquer toutes les fonctions de PHP pour ajouter un function_exists() autour... ou try/catch tout

il y a un moment ça va être un soucis, car on peut pas dupliquer toutes les fonctions de PHP pour ajouter un `function_exists()` autour... ou `try/catch` tout
Poster
Owner

Notons qu’il a d’autres erreurs :

  • undefined function \ctype_digit
  • undefined function \iconv_strlen (dans symfony/polyfill-mbstring)

Sous entendu que sur cet hébergeur

  1. ctype est désactivé (c’est actif par défaut)

https://www.php.net/manual/fr/ctype.installation.php

Le support de ctype peut être désactivé avec l'option de compilation --disable-ctype.

  1. iconv est désactivé (c’est actif par défaut)

https://www.php.net/manual/fr/iconv.installation.php

Cette extension est activée par défaut, cependant, elle peut être désactivée en compilant PHP avec l'option --without-iconv.

  1. mbstring n’est pas installé

https://www.php.net/manual/fr/mbstring.installation.php

Ça fait beaucoup…

Notons qu’il a d’autres erreurs : - undefined function `\ctype_digit` - undefined function `\iconv_strlen` (dans symfony/polyfill-mbstring) Sous entendu que sur cet hébergeur 1) ctype est désactivé (c’est actif par défaut) https://www.php.net/manual/fr/ctype.installation.php > Le support de ctype peut être désactivé avec l'option de compilation --disable-ctype. 2) iconv est désactivé (c’est actif par défaut) https://www.php.net/manual/fr/iconv.installation.php > Cette extension est activée par défaut, cependant, elle peut être désactivée en compilant PHP avec l'option --without-iconv. 3) mbstring n’est pas installé https://www.php.net/manual/fr/mbstring.installation.php Ça fait beaucoup…
Poster
Owner

L’hébergeur en question a pour le moment retiré sa version 8.2…
Je propose de fermer, on rouvrira si effectivement d’autres cas se présentent

L’hébergeur en question a pour le moment retiré sa version 8.2… Je propose de fermer, on rouvrira si effectivement d’autres cas se présentent
marcimat closed this issue 10 months ago

Salut, si on parle de L'Autre Net, c'est dispo depuis hier soir. Mais SPIP est KO en effet.

Salut, si on parle de L'Autre Net, c'est dispo depuis hier soir. Mais SPIP est KO en effet.

J'ai utilisé la v4.2.0-alpha2 sur http://php82.daffyduke.lautre.net/spip/

Je confirme la désactivation de chmod :

php_admin_value[open_basedir] = /var/www/alternc/d/daffyduke/:/var/alternc/dns/redir:/usr/share/php/:/var/alternc/tmp:/tmp:/dev/urandom
php_admin_value[disable_functions] = chmod,chown,chgrp,link,symlink,exec
J'ai utilisé la v4.2.0-alpha2 sur http://php82.daffyduke.lautre.net/spip/ Je confirme la désactivation de chmod : ``` php_admin_value[open_basedir] = /var/www/alternc/d/daffyduke/:/var/alternc/dns/redir:/usr/share/php/:/var/alternc/tmp:/tmp:/dev/urandom php_admin_value[disable_functions] = chmod,chown,chgrp,link,symlink,exec ```
Poster
Owner

Donc ce qui va nous ennuyer c’est

  • chmod (bon lui c’est pas un drame)
  • exec (qui sert sur les traitements d’image, tel que convert) c’est plus facheux. Bah iels utiliseront GD2…

@cerdic suggérait qu’on pourrait créer les fonctions si elles n’existent pas pour éviter ces fatales, peut être.

Donc ce qui va nous ennuyer c’est - chmod (bon lui c’est pas un drame) - exec (qui sert sur les traitements d’image, tel que `convert`) c’est plus facheux. Bah iels utiliseront GD2… @cerdic suggérait qu’on pourrait créer les fonctions si elles n’existent pas pour éviter ces fatales, peut être.
b_b commented 10 months ago
Owner

Question bête, ça ne pourrait pas simplement figurer dans les prérequis (et testé lors de l'install) ?

Question bête, ça ne pourrait pas simplement figurer dans les prérequis (et testé lors de l'install) ?

Pour info, j'ai passé un peu de temps à ajouter le support 8.1 chez L'Autre Net.
Pas mieux :-(

http://php81.daffyduke.lautre.net/spip/

[08-Feb-2023 20:59:56] WARNING: [pool daffyduke] child 24829 said into stderr: "Stack trace:"
[08-Feb-2023 20:59:56] WARNING: [pool daffyduke] child 24829 said into stderr: "#0 /var/www/alternc/d/daffyduke/php81/spip/index.php(3): include()"
[08-Feb-2023 20:59:56] WARNING: [pool daffyduke] child 24829 said into stderr: "#1 {main}"
[08-Feb-2023 20:59:56] WARNING: [pool daffyduke] child 24829 said into stderr: "  thrown in /var/www/alternc/d/daffyduke/php81/spip/spip.php on line 13"
Pour info, j'ai passé un peu de temps à ajouter le support 8.1 chez L'Autre Net. Pas mieux :-( http://php81.daffyduke.lautre.net/spip/ ``` [08-Feb-2023 20:59:56] WARNING: [pool daffyduke] child 24829 said into stderr: "Stack trace:" [08-Feb-2023 20:59:56] WARNING: [pool daffyduke] child 24829 said into stderr: "#0 /var/www/alternc/d/daffyduke/php81/spip/index.php(3): include()" [08-Feb-2023 20:59:56] WARNING: [pool daffyduke] child 24829 said into stderr: "#1 {main}" [08-Feb-2023 20:59:56] WARNING: [pool daffyduke] child 24829 said into stderr: " thrown in /var/www/alternc/d/daffyduke/php81/spip/spip.php on line 13" ```
Poster
Owner

Merci pour les tests !
Tu as installé quel SPIP et comment ? tu as bien un répertoire vendor/ ?

Merci pour les tests ! Tu as installé quel SPIP et comment ? tu as bien un répertoire vendor/ ?

Nope, j'ai pas de répertoire vendor, j'ai pris le dernier zip ici : https://git.spip.net/spip/spip/tags (v4.2.0-alpha2).

Nope, j'ai pas de répertoire vendor, j'ai pris le dernier zip ici : https://git.spip.net/spip/spip/tags (v4.2.0-alpha2).
Poster
Owner

Ah ok, mais à cet endroit il n’y a pas les dépendances :)

https://files.spip.net/spip/dev/spip-v4.2.0-alpha2.zip

Ah ok, mais à cet endroit il n’y a pas les dépendances :) https://files.spip.net/spip/dev/spip-v4.2.0-alpha2.zip

D'acc. Bon, pas mieux :-(

Entre temps j'ai ajouté mbstring et quelques extensions. iconv et ctype sont dans common, je n'ai pas souvenir qu'on les ait désactivées à moins que ce soit le fonctionnement par défaut ?

D'acc. Bon, pas mieux :-( Entre temps j'ai ajouté mbstring et quelques extensions. iconv et ctype sont dans common, je n'ai pas souvenir qu'on les ait désactivées à moins que ce soit le fonctionnement par défaut ?
Poster
Owner

Pas mieux, c’est à dire ?

Et donc pourtant ces extensions ctype est iconv sont indiquées comme étant compilées par défaut. Peut être ne sont elles pas activées ensuite ?

Pas mieux, c’est à dire ? Et donc pourtant ces extensions ctype est iconv sont indiquées comme étant compilées par défaut. Peut être ne sont elles pas activées ensuite ?

pas mieux = toujours une erreur 500

[09-Feb-2023 23:51:54] WARNING: [pool daffyduke] child 8307 said into stderr: "NOTICE: PHP message: PHP Fatal error:  Uncaught Error: Call to undefined function chmod() in /var/www/alternc/d/daffyduke/php82/spip/ecrire/inc/flock.php:648"
[09-Feb-2023 23:51:54] WARNING: [pool daffyduke] child 8307 said into stderr: "Stack trace:"
[09-Feb-2023 23:51:54] WARNING: [pool daffyduke] child 8307 said into stderr: "#0 /var/www/alternc/d/daffyduke/php82/spip/ecrire/inc/plugin.php(810): sous_repertoire()"
[09-Feb-2023 23:51:54] WARNING: [pool daffyduke] child 8307 said into stderr: "#1 /var/www/alternc/d/daffyduke/php82/spip/ecrire/inc/plugin.php(782): ecrire_plugin_actifs()"
[09-Feb-2023 23:51:54] WARNING: [pool daffyduke] child 8307 said into stderr: "#2 /var/www/alternc/d/daffyduke/php82/spip/ecrire/inc_version.php(519): actualise_plugins_actifs()"
[09-Feb-2023 23:51:54] WARNING: [pool daffyduke] child 8307 said into stderr: "#3 /var/www/alternc/d/daffyduke/php82/spip/spip.php(19): include_once('...')"
[09-Feb-2023 23:51:54] WARNING: [pool daffyduke] child 8307 said into stderr: "#4 /var/www/alternc/d/daffyduke/php82/spip/index.php(3): include('...')"
[09-Feb-2023 23:51:54] WARNING: [pool daffyduke] child 8307 said into stderr: "#5 {main}"
[09-Feb-2023 23:51:54] WARNING: [pool daffyduke] child 8307 said into stderr: "  thrown in /var/www/alternc/d/daffyduke/php82/spip/ecrire/inc/flock.php on line 648"

Exactement la même en 8.1.

Quant à iconv & co, OK le paquet debian ne suffit plus, il faut explicitement ajouter le .ini dans le chemin fpm (il n'y est plus en 8.2). On a bien ces extensions maintenant.

http://php82.daffyduke.lautre.net/phpinfo.php

pas mieux = toujours une erreur 500 ``` [09-Feb-2023 23:51:54] WARNING: [pool daffyduke] child 8307 said into stderr: "NOTICE: PHP message: PHP Fatal error: Uncaught Error: Call to undefined function chmod() in /var/www/alternc/d/daffyduke/php82/spip/ecrire/inc/flock.php:648" [09-Feb-2023 23:51:54] WARNING: [pool daffyduke] child 8307 said into stderr: "Stack trace:" [09-Feb-2023 23:51:54] WARNING: [pool daffyduke] child 8307 said into stderr: "#0 /var/www/alternc/d/daffyduke/php82/spip/ecrire/inc/plugin.php(810): sous_repertoire()" [09-Feb-2023 23:51:54] WARNING: [pool daffyduke] child 8307 said into stderr: "#1 /var/www/alternc/d/daffyduke/php82/spip/ecrire/inc/plugin.php(782): ecrire_plugin_actifs()" [09-Feb-2023 23:51:54] WARNING: [pool daffyduke] child 8307 said into stderr: "#2 /var/www/alternc/d/daffyduke/php82/spip/ecrire/inc_version.php(519): actualise_plugins_actifs()" [09-Feb-2023 23:51:54] WARNING: [pool daffyduke] child 8307 said into stderr: "#3 /var/www/alternc/d/daffyduke/php82/spip/spip.php(19): include_once('...')" [09-Feb-2023 23:51:54] WARNING: [pool daffyduke] child 8307 said into stderr: "#4 /var/www/alternc/d/daffyduke/php82/spip/index.php(3): include('...')" [09-Feb-2023 23:51:54] WARNING: [pool daffyduke] child 8307 said into stderr: "#5 {main}" [09-Feb-2023 23:51:54] WARNING: [pool daffyduke] child 8307 said into stderr: " thrown in /var/www/alternc/d/daffyduke/php82/spip/ecrire/inc/flock.php on line 648" ``` Exactement la même en 8.1. Quant à iconv & co, OK le paquet debian ne suffit plus, il faut explicitement ajouter le .ini dans le chemin fpm (il n'y est plus en 8.2). On a bien ces extensions maintenant. http://php82.daffyduke.lautre.net/phpinfo.php

Ca fait quand même assez cheap comme installation
disable_functions chmod,chown,chgrp,link,symlink,exec

et des tailles maxi

post_max_size	8M
upload_max_filesize	2M

Je croyais qu'on ne trouvait plus ces valeurs nulle part ^^

Ca fait quand même assez cheap comme installation `disable_functions chmod,chown,chgrp,link,symlink,exec` et des tailles maxi ``` post_max_size 8M upload_max_filesize 2M ``` Je croyais qu'on ne trouvait plus ces valeurs nulle part ^^
Poster
Owner

Ah pardon tu as raison pour les fonctions disabled

Since PHP 8.0, trying to use a disabled function provides a fatal error because the disabled function is treated like non-existent function.

Donc c’est depuis PHP 8.0, pas 8.2 comme je disais

Ah pardon tu as raison pour les fonctions disabled > Since PHP 8.0, trying to use a disabled function provides a fatal error because the disabled function is treated like non-existent function. Donc c’est depuis PHP 8.0, pas 8.2 comme je disais
b_b reopened this issue 10 months ago
b_b added the
bug
label 10 months ago
b_b added this to the 4.2 milestone 10 months ago
Poster
Owner

Notons: pour ce qui est de symfony/filesystem, iels encapsulent tout dans une fonction box https://github.com/symfony/symfony/blob/6.2/src/Symfony/Component/Filesystem/Filesystem.php#L717 qui vérifie la présence de la fonction désirée, tel que chmod. Cela dit, en absence ça génère une exception IOException quand même.

Ce qui revient au fait qu’il faudrait du coup si on utilisait cette lib un jour gérer aussi un try/catch finalement.

Notons: pour ce qui est de symfony/filesystem, iels encapsulent tout dans une fonction `box` https://github.com/symfony/symfony/blob/6.2/src/Symfony/Component/Filesystem/Filesystem.php#L717 qui vérifie la présence de la fonction désirée, tel que `chmod`. Cela dit, en absence ça génère une exception `IOException` quand même. Ce qui revient au fait qu’il faudrait du coup si on utilisait cette lib un jour gérer aussi un try/catch finalement.
Owner

Bon du coup on fait quoi ?

  • en 4.x on fait une fonction spip_io_box() sur le modèle de la static ::box du composant Symfony, qui assert/try/catch/loge les erreurs de fonction manquante ?
  • et en 5.0 on intègre le Symfony FileSystem ? (en wrappent le spip_io_box qu'on met obsolète du coup) ?
Bon du coup on fait quoi ? - en 4.x on fait une fonction spip_io_box() sur le modèle de la static ::box du composant Symfony, qui assert/try/catch/loge les erreurs de fonction manquante ? - et en 5.0 on intègre le Symfony FileSystem ? (en wrappent le spip_io_box qu'on met obsolète du coup) ?
cerdic added the
En cours
label 6 months ago
Sign in to join this conversation.
No Milestone
No project
No Assignees
5 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: spip/spip#5491
Loading…
There is no content yet.