/_plugins_/spipmotion/trunk/inc/spipmotion_verifier_binaires.php

https://bitbucket.org/pombredanne/spip-zone-treemap · PHP · 217 lines · 126 code · 14 blank · 77 comment · 37 complexity · 4f9fb7e9ba387aa01b83f08a3e0cb6d0 MD5 · raw file

  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-2012 - Distribué sous licence GNU/GPL
  9. *
  10. */
  11. if (!defined("_ECRIRE_INC_VERSION")) return;
  12. /**
  13. * Fonction de vérification que les binaires utilisés soient correctement installés
  14. * et exécutables ainsi que quelques éléments de configuration de PHP :
  15. *
  16. * -* l'état du safe_mode;
  17. * -* ffmpeg;
  18. * -* ffprobe;
  19. * -* ffmpeg2theora (facultatif);
  20. * -* flvtool++;
  21. * -* flvtool2 (facultatif);
  22. * -* qt-faststart;
  23. * -* le script spipmotion.sh;
  24. * -* le script spipmotion_vignette.sh;
  25. * -* mediainfo;
  26. * -* la class ffmpeg-php (facultatif);
  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. */
  39. function 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_meta('spipmotion_safe_mode', 'oui','','spipmotion_metas');
  49. $safe_mode_path = @ini_get('safe_mode_exec_dir');
  50. ecrire_meta('spipmotion_safe_mode_exec_dir', $safe_mode_path,'','spipmotion_metas');
  51. }else{
  52. effacer_meta('spipmotion_safe_mode','spipmotion_metas');
  53. effacer_meta('spipmotion_safe_mode_exec_dir','spipmotion_metas');
  54. }
  55. if(!$valeurs)
  56. $valeurs = lire_config('spipmotion');
  57. if(!function_exists('exec')){
  58. ecrire_config('spipmotion_exec_casse', 'oui');
  59. $erreurs[] = 'exec';
  60. }
  61. else{
  62. /**
  63. * Tester ffmpeg2theora
  64. * ffmpeg2theora n'est pas indispensable au bon fonctionnement
  65. * On n'envoie pas de mail de notification
  66. * On ne bloquera pas les encodages
  67. */
  68. exec('ffmpeg2theora',$retour_ffmpeg2theora,$retour_ffmpeg2theora_int);
  69. if($retour_ffmpeg2theora_int != 0){
  70. ecrire_config('spipmotion_ffmpeg2theora_casse', 'oui');
  71. }else{
  72. effacer_config('spipmotion_ffmpeg2theora_casse');
  73. }
  74. /**
  75. * Tester flvtool2
  76. */
  77. exec('flvtool2',$retour_flvtool,$retour_flvtool_int);
  78. if($retour_flvtool_int != 0){
  79. ecrire_config('spipmotion_flvtool_casse', 'oui');
  80. $erreurs[] = 'flvtool2';
  81. }else{
  82. effacer_config('spipmotion_flvtool_casse');
  83. }
  84. /**
  85. * Tester flvtool++
  86. */
  87. exec('flvtool++',$retour_flvtoolplus,$retour_flvtoolplus_int);
  88. if($retour_flvtoolplus_int != 0 && $retour_flvtoolplus_int != 255){
  89. ecrire_config('spipmotion_flvtoolplus_casse', 'oui');
  90. $erreurs[] = 'flvtool++';
  91. }else{
  92. effacer_config('spipmotion_flvtoolplus_casse');
  93. }
  94. if(!in_array('flvtool2',$erreurs) OR !in_array('flvtool++',$erreurs)){
  95. foreach($erreurs as $erreur=>$soft){
  96. if(in_array($soft,array('flvtool2','flvtool++'))){
  97. unset($erreurs[$erreur]);
  98. }
  99. }
  100. }
  101. /**
  102. * Tester qt-faststart
  103. */
  104. exec('qt-faststart',$retour_qt_faststart,$retour_qt_faststart_int);
  105. if($retour_qt_faststart_int != 0){
  106. ecrire_config('spipmotion_qt-faststart_casse', 'oui');
  107. $erreurs[] = 'qt-faststart';
  108. }else{
  109. effacer_config('spipmotion_qt-faststart_casse');
  110. }
  111. /**
  112. * Tester mediainfo
  113. * MediaInfo n'est pas indispensable au bon fonctionnement
  114. * On n'envoie pas de mail de notification
  115. * On ne bloquera pas les encodages
  116. */
  117. exec('mediainfo --help',$retour_mediainfo,$retour_mediainfo_int);
  118. if(!in_array($retour_mediainfo_int,array(0,255))){
  119. ecrire_config('spipmotion_mediainfo_casse', 'oui');
  120. }else{
  121. effacer_config('spipmotion_mediainfo_casse');
  122. }
  123. /**
  124. * Tester ffprobe
  125. * ffprobe n'est pas indispensable au bon fonctionnement
  126. * On n'envoie pas de mail de notification
  127. * On ne bloquera pas les encodages
  128. */
  129. exec('ffprobe --help',$retour_ffprobe,$retour_ffprobe_int);
  130. if($retour_ffprobe_int != 0){
  131. ecrire_config('spipmotion_ffprobe_casse', 'oui');
  132. }else{
  133. effacer_config('spipmotion_ffprobe_casse');
  134. }
  135. /**
  136. * Tester les scripts spipmotion.sh et spipmotion_vignette.sh présents dans script_bash/
  137. * Si le safe_mode est activé, il doivent se trouver dans le répertoire des scripts autorisés
  138. */
  139. if($safe_mode == 1){
  140. $spipmotion_sh = $safe_mode_path.'/spipmotion.sh';
  141. $spipmotion_vignette_sh = $safe_mode_path.'/spipmotion_vignette.sh';
  142. }else{
  143. $spipmotion_sh = find_in_path('script_bash/spipmotion.sh');
  144. $spipmotion_vignette_sh = find_in_path('script_bash/spipmotion_vignette.sh');
  145. }
  146. exec($spipmotion_sh." --help",$retour_spipmotionsh,$retour_spipmotionsh_int);
  147. if($retour_spipmotionsh_int != 0){
  148. ecrire_config('spipmotion_spipmotionsh_casse', 'oui');
  149. $erreurs[] = 'spipmotion.sh';
  150. }else{
  151. effacer_config('spipmotion_spipmotionsh_casse');
  152. }
  153. exec($spipmotion_vignette_sh." --help",$retour_spipmotion_vignettesh,$retour_spipmotion_vignettesh_int);
  154. if($retour_spipmotion_vignettesh_int != 0){
  155. ecrire_config('spipmotion_spipmotion_vignette_sh_casse', 'oui');
  156. $erreurs[] = 'spipmotion_vignette.sh';
  157. }else{
  158. effacer_config('spipmotion_spipmotion_vignette_sh_casse');
  159. }
  160. /**
  161. * Tester ffmpeg
  162. */
  163. if($valeurs['chemin'] != ''){
  164. exec($spipmotion_sh." --p ".$valeurs['chemin']." --info '-version'",$retour_ffmpeg,$retour_int_ffmpeg);
  165. if($retour_int_ffmpeg != 0){
  166. ecrire_config('spipmotion_ffmpeg_casse', 'oui');
  167. $erreurs[] = 'ffmpeg';
  168. }else{
  169. effacer_config('spipmotion_ffmpeg_casse');
  170. }
  171. }else{
  172. exec($spipmotion_sh." --info -version",$retour_ffmpeg,$retour_int_ffmpeg);
  173. if($retour_int_ffmpeg != 0){
  174. ecrire_config('ffmpeg_casse', 'oui');
  175. $erreurs[] = 'ffmpeg';
  176. }else{
  177. if($GLOBALS['meta']['spipmotion_casse'] == 'oui'){
  178. effacer_config('ffmpeg_casse');
  179. }
  180. }
  181. }
  182. }
  183. /**
  184. * On ne met spipmotion cassé que si on n'a pas ffmpeg ou spipmotion.sh ou ffmpeg2theora
  185. * Les autres restent facultatifs
  186. */
  187. if(in_array('ffmpeg',$erreurs) OR in_array('spipmotion.sh',$erreurs)){
  188. ecrire_config('spipmotion_casse', 'oui');
  189. }else{
  190. effacer_config('spipmotion_casse');
  191. }
  192. if($notif){
  193. if ($notifications = charger_fonction('notifications', 'inc')) {
  194. $notifications('spipmotion_verifier_binaires', 1,
  195. array(
  196. 'erreurs' => $erreurs
  197. )
  198. );
  199. }
  200. }
  201. return $erreurs;
  202. }
  203. ?>