IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Unable to open file for reading [4.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 109
    Par défaut Unable to open file for reading
    Bonjour à tous,
    Je suis en train de réaliser une application Web avec synfony 4.2.5.
    La seule chose qui ne fonctionne pas en production c est l'envoie d'un fichier PDF par email avec swiftmailer.
    En développement tout se passe très bien mais une fois en production j'ai l erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Unable to open file for reading
    Pourtant les droits du répertoire de destination sont en 777.
    Pourquoi une fois sur mon serveur de test (raspberry pi 3 b+) cela ne fonctionne plus tout d'un coup ?
    Avec vous une piste ?
    Merci

    Vincent

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 109
    Par défaut Indications
    Je souhaiterai juste préciser certains détails qui me semblent important.
    En premier la phase de développement c est faite sur mon pc en local.
    Et pour finir mon serveur de test est une raspberry pi3 b+ (donc petit processeur et peu de ram ,1go).
    Les deux systèmes tournent sous debian respectivement 9 et 10.
    J ai bien une petite hypothèse quand à cette erreur. Je pense que je n'ai peut être pas assez de ressources pour attacher le PDF en mail.
    Cependant, le PDF est bien affiché sur le navigateur que je le demande à mon application.
    Un petit htop (pour voir la conso de ram et des 4 coeurs du processeur) ne montre pas de hausse significative et durable de la consommation des ressources.
    Donc la je suis un peu perdu.
    Merci de votre aide.

    Vincent

  3. #3
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 351
    Par défaut
    Salut,

    D'après Internet, ça peut vouloir dire soit que le fichier n'existe pas à l'endroit où tu essayes de le récupérer pour le joindre au main, soit que tu n'utilises pas le chemin absolu : https://stackoverflow.com/a/39614627

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 109
    Par défaut Le même code
    Bonjour _Thomas ravi de vous revoir et merci de m'aider à nouveau,
    Alors le code est le même sur ma machine est sur mon serveur.
    Je comprends bien que le fichier n'est pas trouvé mais je ne sais pas pourquoi car le pdf est bien généré à la volé avec FPDF mais il n'est pas créé avec l'envoi par email.
    Je vous donne le code de mon controller qui gere les pdf
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
    <?php
    namespace App\Controller;
     
    use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
    use Symfony\Component\Routing\Annotation\Route;
    use Symfony\Component\HttpFoundation\Request;
    use Symfony\Component\HttpFoundation\Response;
    use App\Entity\Vehicule;
    use App\Repositoty\VehiculeRepository;
    use App\Entity\Reparation;
    use App\Repositoty\ReparationRepository;
    use FPDF;
     
    /**
     * @Route("/profile")
     */
     
    class PdfController extends AbstractController
    {
      /**
        * @Route("/pdf/{id}", name="fiche_vehicule")
        */
        public function historiqueReparations($id)
        {
          $ressourceRepository = $this->getDoctrine()->getRepository(Reparation::class);
          $reparations = $ressourceRepository->findRepByVehicule($id);
          require_once('../FPDF/fpdf.php');
          header('Content-Type: application/pdf');
          $pdf = new FPDF();
          $pdf->AddPage();
          $pdf->SetFont('Arial','B',8);
          $idRep = 1;
          //$pdf->Cell();
          foreach ($reparations as $reparation)
          {
              $pdf->Ln(7);
              $pdf->Cell(40,10, $idRep." : ". utf8_decode($reparation->getAFaire())." : ". $reparation->getEffectuerLe()->format('d-m-Y H:i'));
              $idRep++;
          }
          $pdf->Output();
          ob_end_clean();
          return new Response($pdf->Output(), 200, array('Content-Type' => 'application/pdf'));
        }
     
        /**
          * @Route("/pdfsending/{id}", name="fiche_vehicule_sending")
          */
          public function historiqueReparationsSending($vehicules)
          {
            header('Content-Type: application/pdf');
            $pdf = new FPDF();
            foreach($vehicules as $vehicule)
            {
              $id = $vehicule->getId();
              $immat = $vehicule->getImmatriculation();
              $ressourceRepository = $this->getDoctrine()->getRepository(Reparation::class);
              $reparations = $ressourceRepository->findRepByVehicule($id);
              $pdf->AddPage();
              $pdf->SetFont('Arial','B',8);
              $idRep = 1;
              $pdf->Ln(7);
              $pdf->Cell(40,10, utf8_decode("fiche du véhicule : $immat"));
              foreach ($reparations as $reparation)
              {
                  $pdf->Ln(7);
                  $pdf->Cell(40,10, $idRep." : ". utf8_decode($reparation->getAFaire())." : ". $reparation->getEffectuerLe()->format('d-m-Y H:i'));
                  $idRep++;
              }
            }
     
          $name = "FicheSuiviVehicule.pdf";
          //$CheminFichier = "../fichesVehiculesPdf/";
            //$pdf->Output(, 'F');
          // ob_end_clean();
     
            return new Response ($pdf->Output('F', $name));
          }
    }
    ?>
    Et le code qui géré l'attachement du fichier pdf au mail
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    <?php
     
    namespace App\Controller;
     
    use App\Entity\Email;
    use App\Entity\Client;
    use App\Form\EmailType;
    use App\Repository\EmailRepository;
    use App\Repository\ClientRepository;
    use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
    use Symfony\Component\HttpFoundation\Request;
    use Symfony\Component\HttpFoundation\Response;
    use Symfony\Component\Routing\Annotation\Route;
     
    /**
     * @Route("/email")
     */
    class EmailController extends AbstractController
    {
        /**
         * @Route("/new", name="email_new", methods={"GET","POST"})
         */
        public function new(Request $request, \Swift_Mailer $mailer, ClientRepository $clientRepository): Response
        {
            $email = new Email();
            $form = $this->createForm(EmailType::class, $email);
            $form->handleRequest($request);
     
            if ($form->isSubmitted() && $form->isValid()) {
              $email->setDateEmission(new \DateTime('now'));
              $sujet = $form->get('sujet')->getData();
              $priorite = strtoupper($form->get('priorite')->getData());
              $emetteur = $form->get('emetteur')->getData();
              $destinataireOrigine = $form->get('destinataire')->getData(); // le DO est en fait une collection au format brute
              //$ressourceRepository = $this->getDoctrine()->getRepository(Client::class);
              $destinataireTab = explode(" ", $destinataireOrigine->first(), 2);
              $destinataire = $clientRepository->findOneBy($critaires = array('nom' => $destinataireTab[0],'prenom' => $destinataireTab[1]))->getEmail();
              $corps = $form->get('corps')->getData();
     
                if($form->get('EnvoyerFormulaireDuVehicule')->getData())
                {
                  $message = (new \Swift_Message($priorite . ':' . $sujet))
                    ->setFrom($emetteur)
                    ->setTo($destinataire)
                    ->setReplyTo($emetteur)
                    ->setBody($corps .
                     '<br><br>' .
                     'Ce mail contient les fiches de suivi du vehicule'.
                     '<HR>' .
                     '<br>'.
                     '<small><i>Ce mail vous est envoyé avec l\'application Web FollowCarService, l\'efficacité au service de la simplicité<br>
                     Vous souhaitez vous renseigner sur FollowCarService ? => adresse email <b>|</b> num tel</i></small>',
                        'text/html'
                    )
                    ->setContentType('application/pdf');
                  //  $attachment = \Swift_Attachment::fromPath("../fichesVehiculesPdf/FicheSuiviVehicule_$id.pdf");
                    $vehicules = $clientRepository->findOneBy($critaires = array('nom' => $destinataireTab[0],'prenom' => $destinataireTab[1]))->getVehicules();
                    $this->forward('App\Controller\PdfController::historiqueReparationsSending',['vehicules'=>$vehicules]);
                    $attachment = \Swift_Attachment::fromPath('FicheSuiviVehicule.pdf', 'application/pdf');
                    $message->attach($attachment);
                }
                else {
                  //$pathDebug = getcwd() . "\n";
                  $message = (new \Swift_Message($priorite . ':' . $sujet))
                    ->setFrom($emetteur)
                    ->setTo($destinataire)
                    ->setReplyTo($emetteur)
                    ->setBody($corps .
                     '<br><br>' .
                     '<HR>' .
                     '<br>'.
                     '<small><i>Ce mail vous est envoyé avec l\'application Web FollowCarService, l\'efficacité au service de la simplicité<br>
                     Vous souhaitez vous renseigner sur FollowCarService ? => adresse email <b>|</b> num tel</i></small>',
                        'text/html'
                    );
                }
     
            $mailer->send($message);
     
            $this->addFlash(
                  'notice',
                  "Votre message a bien été envoyé à l'adresse : $destinataire"
              );
                if($form->get('EnvoyerFormulaireDuVehicule')->getData()){
                  unlink('FicheSuiviVehicule.pdf');
                }
            }
     
            return $this->render('email/new.html.twig', [
                'email' => $email,
                'form' => $form->createView(),
            ]);
        }
    }
    voila en esperant que cela vous eclairera plus que moi

    Merci de votre aide

    Vincent

  5. #5
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 351
    Par défaut
    D'après le lien stackoverflow envoyé dans mon message précédent ou encore dans les exemples de la doc officielle (ICI), il faut passer un chemin absolu pour indiquer où se trouve le fichier à joindre :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $attachment = \Swift_Attachment::fromPath('/chemin/absolu/vers/FicheSuiviVehicule.pdf', 'application/pdf');

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 109
    Par défaut cela ne fonctionne pas
    Bonsoir _Thomas,
    J'i la même erreur avec le chemin absolu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Unable to open file for reading [/var/www/html/public/FicheSuiviVehicule.pdf]
    Je pense que le pdf n'est pas généré. Pour quelle raison ? je ne sais pas.

    Merci de votre aide

    Vincent

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 30/07/2010, 15h28
  2. Linker error: unable to open file
    Par pasqual dans le forum C++Builder
    Réponses: 1
    Dernier message: 25/06/2007, 08h22
  3. PB dernière minute : Unable to open file :file.dfm
    Par kurkaine dans le forum C++Builder
    Réponses: 1
    Dernier message: 14/09/2006, 13h40
  4. Erreur: unable to open file "DCLUSR.LIB"
    Par Xavier dans le forum C++Builder
    Réponses: 3
    Dernier message: 20/06/2006, 20h33
  5. Unable to open file 'DSGNINTF.OBJ'
    Par chamamo dans le forum C++Builder
    Réponses: 2
    Dernier message: 19/06/2006, 09h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo