2017-09-16 1 views
0

J'ai un script pour télécharger des fichiers sur mon site. Cela fonctionne très bien mais maintenant je veux extraire des méta-données de fichiers vidéo en utilisant le ffmpeg/ffprobe library. Mon code:

if (!empty($_FILES)) { 
      $requestAr = requestCheck(['title', 'description']); 
      $assetName = randomString(11); 
      $assetSalt = randomString(3); 

      $bucket = "videos"; 
      $fileTmpPath = $_FILES['qqfile']['tmp_name']; 
      $filenameOrig = $_FILES['qqfile']['name']; 
      $fileExtension = pathinfo($filenameOrig, PATHINFO_EXTENSION); 
      $assetFilename = $assetName . "_$assetSalt.$fileExtension"; 

      $trustedExtensions = ['webm', 'mp4', 'ogg']; 
      if(array_search($fileExtension, $trustedExtensions) !== false) { 
       $ffprobe = FFMpeg\FFProbe::create([ 
        'ffprobe.binaries' => '/usr/bin/ffprobe' 
       ]); 
       $fileInfo = $ffprobe 
        ->format($fileTmpPath) // extracts file informations 
        ->get('duration');    // returns the duration property 
       print_r($fileInfo); 
      } 
} 

je avec cette enroule erreur:

file_exists(): open_basedir restriction in effect. File(/usr/bin/ffprobe) is not within the allowed path(s): <lists all the directories in the open_basedir variable> 

J'ai passé la bibliothèque ffmpeg le chemin absolu ffprobe pour qu'il sache où il est. Je cherchais autour et certaines personnes disaient que c'est parce que la lib ne peut pas accéder au répertoire tmp avec le fichier téléchargé. Dans les deux cas, j'ai essayé de désactiver open_basedir ou au moins d'ajouter les chemins dont j'ai besoin pour que cela fonctionne.

J'ai essayé de définir open_basedir à aucun dans mon php.ini mais cela n'a pas fonctionné. Lorsque je vois phpinfo(), il répertorie encore un tas de chemins pour ce paramètre. J'ai essayé de grep où open_basedir existe sur le serveur. En effet, ce sont les fichiers php.ini et je ne devrais pas avoir besoin de modifier un autre que celui indiqué dans phpinfo().

Répondre

0

Je l'ai corrigé. Pour une raison quelconque, grep ne retournait pas tous les fichiers avec la chaîne basedir. Je devais modifier le fichier php-fpm pour le site spécifique: /etc/php/7.0/fpm/pool.d/web8.conf et ajoutez les chemins:

/usr/bin/ffmpeg:/usr/bin/ffprobe

à la directive php_admin_value[open_basedir]. Puis systemctl reload php7.0-fpm.service et fait.