Version 8 — Juin 2023 — James
Voir bootstrap, framework, sdk
#!/usr/bin/env bash
# Dans SPIP lui-même, les appels de fonctions non trouvées par phpstan
grep "Function " phpstan-baseline.neon | grep 'not found' \
| sed -e 's/.*Function //' -e 's/ not found.*//' >> tmp/spip_called.txt
cat tmp/spip_called.txt
# cache_unlock
# analyser_backend
# image_du_document
# vignette_automatique
# Récupération de la liste des baselines
find plugins-dist/spip -name phpstan-baseline.neon \
| grep -v vendor > tmp/baselines.txt
# Récupération de la liste des fonctions non trouvées par phpstan
rm -f tmp/_called.txt tmp/called.txt
while read -r baseline
do
grep "Function " "$baseline" | grep 'not found' \
| sed -e 's/.*Function //' -e 's/ not found.*//' >> tmp/_called.txt
done < tmp/baselines.txt
wc -l tmp/_called.txt
# 2052 tmp/_called.txt
rm -f tmp/baselines.txt
sort tmp/_called.txt | uniq > tmp/called.txt
rm -f tmp/_called.txt
wc -l tmp/called.txt
# 330 tmp/called.txt
# Trouver les fichiers spip déclarant ces fonctions
rm -f tmp/_files.txt tmp/files.txt
while read -r fonction
do
grep -E -rn --exclude-dir tests "^function $fonction\(" ecrire \
| cut -d: -f1 >> tmp/_files.txt
done < tmp/called.txt
sort tmp/_files.txt | uniq > tmp/files.txt
rm -f tmp/_files.txt
wc -l tmp/files.txt
# 64 tmp/files.txt
rm -f tmp/spip_files_functions.txt
while read -r fichier
do
grep -E '^function (.*)\(' "$fichier" | sed -e 's/function //' -e 's/(.*//' | while read -r f
do
echo "$fichier,$f" >> tmp/spip_files_functions.txt
done
done < tmp/files.txt
wc -l tmp/spip_files_functions.txt
# 1244 tmp/spip_files_functions.txt
echo "ecrire/inc/utils.php
ecrire/base/connect_sql.php
ecrire/base/objets.php
ecrire/inc/flock.php" > tmp/bootstrap.txt
rm -f tmp/bootstrap_files_functions.txt
while read -r fichier
do
grep -E '^function (.*)\(' "$fichier" | sed -e 's/function //' -e 's/(.*//' | while read -r f
do
echo "$fichier,$f" >> tmp/bootstrap_files_functions.txt
done
done < tmp/bootstrap.txt
wc -l tmp/bootstrap_files_functions.txt
# 135 tmp/bootstrap_files_functions.txt
rm -f tmp/non_called_bootstrap.txt
while read -r f
do
fonction=$(cut -d, -f2 <<< "$f")
if ! grep -E -c "^${fonction}$" tmp/called.txt > /dev/null
then
echo "$fonction" >> tmp/non_called_bootstrap.txt
fi
done < tmp/bootstrap_files_functions.txt
wc -l tmp/non_called_bootstrap.txt
Le design pattern du front controller est lié à la conception d’applications Web. Il s’agit d’un « contrôleur qui gère toutes les demandes/requêtes d’un site Web ». SPIP dispose de 2 front controllers : spip.php
et ecrire/index.php
. Ce sont les points d’entrée pour les requêtes HTTP. On peut aller jusqu’à considérer que SPIP est un ensemble de 2 applications Web solidaires, indissociables.
grep -En "(include|require)(_once)?( |\()" spip.php
# 17:include_once _DIR_RESTREINT_ABS.'inc_version.php';
# 20:include _DIR_RESTREINT_ABS.'public.php';
grep -En "(include|require)(_once)?( |\()" ecrire/index.php
# 21: include __DIR__ . '/inc_version.php';
Les scripts web spip.php
et ecrire/index.php
exécutent de manière inconditionnelle le fichier ecrire/inc_version.php
. C’est le point d’entrée de la séquence de démarrage d’une requête HTTP. Il peut être utilisé pour des scripts en ligne de commande (CLI)
Celui-ci va charger d’autres fichiers PHP :
grep -En "(include|require)(_once)?( |\()" ecrire/inc_version.php
# 84: include $f;
# 88:require_once __DIR__ . '/../vendor/autoload.php';
# 473:require_once _ROOT_RESTREINT . 'inc/utils.php';
# 474:require_once _ROOT_RESTREINT . 'base/connect_sql.php';
# 479: include_once _FILE_OPTIONS;
# 512: include_once(_CACHE_PLUGINS_OPT);
Ligne 84, s’il existe, l’écran de sécurité (par défaut config/ecran_securite.php
).
Ligne 88, l’autoloader de composer.
Ligne 473 : le fichier ecrire/inc/utils.php
(celui-ci initialise 2 globales et déclare des fonctions, voir plus bas).
Ligne 474 : le fichier ecrire/base/connect_sql.php
(voir plus bas).
Ligne 479 : le fichier config/mes_options.php
s’il existe (voir plus bas).
Ligne 512 : le fichier tmp/cache/charger_plugins_options.php
s’il existe, sinon une suite d’appel (voir plus bas).
grep -En "(include|require)(_once)?( |\()" ecrire/inc/utils.php
# 125: include_once $file;
# 195: include_once(_ROOT_CWD . $f);
# 200: include_once(_CACHE_PLUGINS_FCT);
# 295: include_once $charger;
# 1609: include_once _ROOT_CWD . $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file];
# 1629: include_once _ROOT_CWD . $a;
# 1677: include_once(_CACHE_PLUGINS_PATH);
# 1736: include_once _ROOT_RESTREINT . 'inc/flock.php';
# 2659: include_once _FILE_CHMOD;
# 2715: include_once _ROOT_RESTREINT . 'inc/flock.php';
grep -En "(include|require)(_once)?( |\()" config/chmod.php
#
grep -En "(include|require)(_once)?( |\()" ecrire/inc/flock.php
#
Site « public » :
grep -En "(include|require)(_once)?( |\()" ecrire/base/connect_sql.php
# 20:require_once _ROOT_RESTREINT . 'base/objets.php';
# 86: include($f);
grep -En "(include|require)(_once)?( |\()" ecrire/base/objets.php
#
grep -En "(include|require)(_once)?( |\()" ecrire/public.php
# 34: include_once _ROOT_RESTREINT . 'inc_version.php';
# 151: include _ROOT_RESTREINT . 'public/evaluer_page.php';
index.php(spip.php)
ecrire/inc_version.php
config/ecran_securite.php (sous condition*)
vendor/autoload.php
side effect @umask(0) ;
ecrire/inc/utils.php
side effect déclaration 2 globales
ecrire/base/connect_sql.php
ecrire/base/objets.php
config/mes_options.php (si existe)
call spip_initialisation_core()
config/chmod.php
ecrire/inc/flock.php
inc/nfslock (par défaut ecrire/inc/nsflock.php, surchargeable) sous condition
inc/acces (par défaut ecrire/inc/acces.php, surchargeable)
side effect déclaration 1 globale
call load_path_cache()
inc/cookie sous condition + call recuperer_cookies_spip()
tmp/cache/charger_plugins_options.php (si existe) OU call spip_initialisation_suite()+inc/plugin (par défaut ecrire/inc/plugin.php, surchargeable)+ call actualise_plugins_actifs()
call spip_initialisation_suite()
call init_var_mode()
inc/autoriser (par défaut ecrire/inc/autoriser.php, surchargeable) sous condiftion
call autoriser()
inc/autoriser
aiguilleur d’installation**
cas particulier memoriser un tri sessionne eventuel***
side effect envoie d’entêtes http
side effect spip_log****
ecrire/public.php
call recuperer_fond() OU
ecrire/inc_version.php sous condition ??
aiguillage fond/page/action
...
Site privé :
ecrire/index.php
ecrire/inc_version.php
config/ecran_securite.php (sous condition*)
vendor/autoload.php
side effect @umask(0) ;
ecrire/inc/utils.php
side effect déclaration 2 globales
ecrire/base/connect_sql.php
ecrire/base/objets.php
config/mes_options.php (si existe)
call spip_initialisation_core()
config/chmod.php
ecrire/inc/flock.php
inc/nfslock (par défaut ecrire/inc/nsflock.php, surchargeable) sous condition
inc/acces (par défaut ecrire/inc/acces.php, surchargeable)
side effect déclaration 1 globale
call load_path_cache()
inc/cookie sous condition + call recuperer_cookies_spip()
tmp/cache/charger_plugins_options.php (si existe) OU call spip_initialisation_suite()+inc/plugin (par défaut ecrire/inc/plugin.php, surchargeable)+ call actualise_plugins_actifs()
call spip_initialisation_suite()
call init_var_mode()
inc/autoriser (par défaut ecrire/inc/autoriser.php, surchargeable) sous condiftion
call autoriser()
inc/autoriser (par défaut ecrire/inc/autoriser.php, surchargeable)
aiguilleur d’installation**
cas particulier memoriser un tri sessionne eventuel***
envoie d’entêtes http
spip_log****
inc/cookie (par défaut ecrire/inc/cookie.php, surchargeable)
...