2017-06-15 2 views
0

J'ai une application créée dans Symfony2. L'application fonctionne dans trois conteneurs Docker:Problème d'autorisation avec Imagick et l'utilisateur www-data

  • Nginx comme proxy inverse et de servir le contenu statique
  • Apache comme serveur web
  • Mysql pour la base de données

Tous les fichiers appartiennent à root et le serveur apache et nginx s'exécute sous l'utilisateur www-data. L'application fonctionne bien.

Seul le php conjobs (exécuté sous root sur l'hôte) crée de nouvelles images et les stocke sur le serveur. D'abord, il fait un répertoire avec la permission 0755, avec le code suivant:

@mkdir('path/..', 0755, true); 

Le répertoire est fait avec ces droits correctement. Ensuite, il stocké une image dans ce répertoire avec le code suivant:

$image = new \Imagick('path/filename.jpg'); 

    $Width = $image->getImageWidth(); 
    $Height = $image->getImageHeight(); 

    if($Width > 1024 || $Height > 768) { 
     $image->resizeImage($imgWith, $imgHeight, \Imagick::FILTER_LANCZOS, 0.9); 
     $image->writeImage('path/new_filename.jpg'); 
    } 

Ces images ne sont stockées avec 0600. Par conséquent, les www-données de l'utilisateur ne peut pas lire/afficher les images dans l'application. Si je modifie manuellement les droits avec: chmod -R 0755 dir, les images s'affichent correctement.

Une suggestion sur comment stocker les images directement avec les bonnes prémssions?

+0

Si vous exécutez le php sous root, les fichiers sont créés pour l'utilisateur root. Les droits mkdir donnent accès au dossier mais pas aux fichiers. Vous devez chmod les fichiers ou changer le nom d'utilisateur pour ces fichiers à www-data – hamboy75

Répondre

0

Pouvez-vous utiliser PHP chmod

chmod ('chemin/new_filename.jpg', 0755);

après avoir créé le fichier?

+0

Cela fonctionne, merci. J'ai essayé cela aussi avant de poster cette question et ensuite cela n'a pas fonctionné. Seulement trouvé juist nos ceci était une action de déplacement du dossier entre perdre la permission encore. – Tom