source: spip-zone/_plugins_/spipmotion/trunk/inc/spipmotion_verifier_binaires.php @ 103469

Last change on this file since 103469 was 103469, checked in by kent1@…, 3 years ago

Utiliser ecrire_config même pour notre table des métas différente (spipmotion_metas) bis

File size: 6.1 KB
Line 
1<?php
2/**
3 * SPIPmotion
4 * Gestion de l'encodage et des métadonnées de vidéos directement dans spip
5 *
6 * Auteurs :
7 * kent1 (http://www.kent1.info - kent1@arscenic.info)
8 * 2008-2015 - Distribué sous licence GNU/GPL
9 *
10 */
11
12if (!defined('_ECRIRE_INC_VERSION')) {
13        return;
14}
15
16/**
17 * Fonction de vérification que les binaires utilisés soient correctement installés
18 * et exécutables ainsi que quelques éléments de configuration de PHP :
19 *
20 * -* l'état du safe_mode;
21 * -* ffmpeg;
22 * -* ffprobe;
23 * -* flvtool++;
24 * -* le script spipmotion.sh;
25 * -* le script spipmotion_vignette.sh;
26 * -* mediainfo;
27 *
28 * Si le safe_mode est activé, on l'inscrit dans les metas ainsi que son exec_dir
29 * afin de retrouver le script spipmotion.sh qui doit s'y trouver
30 *
31 * Note : Les codes de retour normaux d'une application sont :
32 * -* 0 en cas de réussite
33 * -* 1 en cas d'échec (l'application est là mais retourne une erreur)
34 * -* 127 en cas d'absence de l'application
35 *
36 * @param unknown_type $valeurs
37 * @param boolean $notif : On notifie ou pas?
38 */
39function inc_spipmotion_verifier_binaires_dist($valeurs = '', $notif = false) {
40        spip_log('SPIPmotion : Vérification des binaires', 'spipmotion');
41        $erreurs = array();
42        include_spip('inc/config');
43        /**
44         * On vérifie que safe_mode soit activé ou pas
45         */
46        $safe_mode = @ini_get('safe_mode');
47        if ($safe_mode == 1) {
48                ecrire_config('/spipmotion_metas/spipmotion_safe_mode', 'oui');
49                $safe_mode_path = @ini_get('safe_mode_exec_dir');
50                ecrire_config('/spipmotion_metas/spipmotion_safe_mode_exec_dir', $safe_mode_path);
51        } else {
52                effacer_config('/spipmotion_metas/spipmotion_safe_mode');
53                effacer_config('/spipmotion_metas/spipmotion_safe_mode_exec_dir');
54        }
55
56        if (!$valeurs) {
57                $valeurs = lire_config('spipmotion', array());
58        }
59
60        if (!function_exists('exec')) {
61                ecrire_config('spipmotion_exec_casse', 'oui');
62                $erreurs[] = 'exec';
63        } else {
64                /**
65                 * Tester flvtool++
66                 */
67                $chemin_flvtool = defined('_CHEMIN_FLVTOOLPLUS') ? _CHEMIN_FLVTOOLPLUS : 'flvtool++';
68                exec($chemin_flvtool, $retour_flvtoolplus, $retour_flvtoolplus_int);
69                if ($retour_flvtoolplus_int != 0 and $retour_flvtoolplus_int != 255) {
70                        ecrire_config('spipmotion_flvtoolplus_casse', 'oui');
71                        $erreurs[] = 'flvtool++';
72                } else {
73                        effacer_config('spipmotion_flvtoolplus_casse');
74                }
75
76                if (!in_array('flvtool++', $erreurs)) {
77                        foreach ($erreurs as $erreur => $soft) {
78                                if ($soft == 'flvtool++') {
79                                        unset($erreurs[$erreur]);
80                                }
81                        }
82                }
83
84                /**
85                 * Tester mediainfo
86                 * MediaInfo n'est pas indispensable au bon fonctionnement
87                 * On n'envoie pas de mail de notification
88                 * On ne bloquera pas les encodages
89                 */
90                $chemin_mediainfo = defined('_CHEMIN_MEDIAINFO') ? _CHEMIN_MEDIAINFO : 'mediainfo';
91                exec($chemin_mediainfo.' --help', $retour_mediainfo, $retour_mediainfo_int);
92                if (!in_array($retour_mediainfo_int, array(0,255))) {
93                        ecrire_config('spipmotion_mediainfo_casse', 'oui');
94                } else {
95                        effacer_config('spipmotion_mediainfo_casse');
96                }
97
98                /**
99                 * Tester ffprobe
100                 * ffprobe n'est pas indispensable au bon fonctionnement
101                 * On n'envoie pas de mail de notification
102                 * On ne bloquera pas les encodages
103                 */
104                $chemin_ffprobe = defined('_CHEMIN_FFPROBE') ? _CHEMIN_FFPROBE : 'ffprobe';
105                exec($chemin_ffprobe.' --help', $retour_ffprobe, $retour_ffprobe_int);
106                if ($retour_ffprobe_int != 0) {
107                        ecrire_config('spipmotion_ffprobe_casse', 'oui');
108                } else {
109                        effacer_config('spipmotion_ffprobe_casse');
110                }
111
112                /**
113                 * Tester les scripts spipmotion.sh et spipmotion_vignette.sh présents dans script_bash/
114                 * Si le safe_mode est activé, il doivent se trouver dans le répertoire des scripts autorisés
115                 */
116                if (defined('_CHEMIN_SPIPMOTIONSH')) {
117                        $spipmotion_sh = _CHEMIN_SPIPMOTIONSH;
118                }
119
120                if (defined('_CHEMIN_SPIPMOTION_VIGNETTESH')) {
121                        $spipmotion_vignette_sh = _CHEMIN_SPIPMOTION_VIGNETTESH;
122                }
123                if ($safe_mode == 1) {
124                        if (!defined('_CHEMIN_SPIPMOTIONSH')) {
125                                $spipmotion_sh = $safe_mode_path.'/spipmotion.sh';
126                        }
127                        if (!defined('_CHEMIN_SPIPMOTION_VIGNETTESH')) {
128                                $spipmotion_vignette_sh = $safe_mode_path.'/spipmotion_vignette.sh';
129                        }
130                } else {
131                        if (!defined('_CHEMIN_SPIPMOTIONSH')) {
132                                $spipmotion_sh = find_in_path('script_bash/spipmotion.sh');
133                        }
134                        if (!defined('_CHEMIN_SPIPMOTION_VIGNETTESH')) {
135                                $spipmotion_vignette_sh = find_in_path('script_bash/spipmotion_vignette.sh');
136                        }
137                }
138
139                exec($spipmotion_sh.' --help', $retour_spipmotionsh, $retour_spipmotionsh_int);
140                if ($retour_spipmotionsh_int != 0) {
141                        ecrire_config('spipmotion_spipmotionsh_casse', 'oui');
142                        $erreurs[] = 'spipmotion.sh';
143                } else {
144                        effacer_config('spipmotion_spipmotionsh_casse');
145                }
146
147                exec($spipmotion_vignette_sh.' --help', $retour_spipmotion_vignettesh, $retour_spipmotion_vignettesh_int);
148                if ($retour_spipmotion_vignettesh_int != 0) {
149                        ecrire_config('spipmotion_spipmotion_vignette_sh_casse', 'oui');
150                        $erreurs[] = 'spipmotion_vignette.sh';
151                } else {
152                        effacer_config('spipmotion_spipmotion_vignette_sh_casse');
153                }
154
155                /**
156                 * Tester ffmpeg
157                 */
158                if ($valeurs['chemin'] != '') {
159                        exec($spipmotion_sh.' --p '.$valeurs['chemin']." --info '-version'", $retour_ffmpeg, $retour_int_ffmpeg);
160                        if ($retour_int_ffmpeg != 0) {
161                                ecrire_config('spipmotion_ffmpeg_casse', 'oui');
162                                $erreurs[] = 'ffmpeg';
163                        } else {
164                                effacer_config('spipmotion_ffmpeg_casse');
165                        }
166                } else {
167                        exec($spipmotion_sh.' --info -version', $retour_ffmpeg, $retour_int_ffmpeg);
168                        if ($retour_int_ffmpeg != 0) {
169                                ecrire_config('ffmpeg_casse', 'oui');
170                                $erreurs[] = 'ffmpeg';
171                        } else {
172                                if ($GLOBALS['meta']['spipmotion_casse'] == 'oui') {
173                                        effacer_config('ffmpeg_casse');
174                                }
175                        }
176                }
177        }
178        /**
179         * On ne met spipmotion cassé que si on n'a pas ffmpeg ou spipmotion.sh
180         * Les autres restent facultatifs
181         */
182        if (in_array('ffmpeg', $erreurs) or in_array('spipmotion.sh', $erreurs)) {
183                ecrire_config('spipmotion_casse', 'oui');
184        } else {
185                effacer_config('spipmotion_casse');
186        }
187
188        if ($notif) {
189                if ($notifications = charger_fonction('notifications', 'inc')) {
190                        $notifications('spipmotion_verifier_binaires', 1,
191                                array(
192                                        'erreurs' => $erreurs
193                                )
194                        );
195                }
196        }
197        return $erreurs;
198}
Note: See TracBrowser for help on using the repository browser.