Sujet : Problème avec l'envoi de fichier depuis WSL vers Apache

Bonjour à tous,

Je fais face à un problème lors de l'envoi de fichiers depuis un formulaire HTML situé sur mon environnement WSL (Windows Subsystem for Linux) vers un serveur Apache tournant sur la même machine.

J'ai deux scripts, support_formulaire.php qui contient le formulaire, et submit_support.php qui gère l'enregistrement du fichier sur le serveur. Lorsque j'essaie d'envoyer un fichier via le formulaire, je reçois l'erreur suivante :

yaml
Copy code

Erreur :Warning: move_uploaded_file(/var/www/html/projet_OPENCLASS/src/support/uploads/file_652d80a36e5f60.70575334.png): Failed to open stream: Permission denied in /var/www/html/projet_OPENCLASS/src/support/submit_support.php on line 18

Warning: move_uploaded_file(): Unable to move "/tmp/phpPv6ypP" to "/var/www/html/projet_OPENCLASS/src/support/uploads/file_652d80a36e5f60.70575334.png" in /var/www/html/projet_OPENCLASS/src/support/submit_support.php on line 18
Erreur : Impossible de déplacer le fichier.Erreur PHP : move_uploaded_file(): Unable to move "/tmp/phpPv6ypP" to "/var/www/html/projet_OPENCLASS/src/support/uploads/file_652d80a36e5f60.70575334.png"
Je suis certain que le problème ne vient pas du code, car il fonctionne correctement sur d'autres environnements. J'ai créé le dossier uploads avec les bonnes permissions, mais cela ne semble pas résoudre le problème.

Je travaille sur WSL et mon serveur Apache est configuré sur le même système. Est-ce que quelqu'un pourrait m'aider à comprendre pourquoi le déplacement du fichier échoue et comment je pourrais résoudre ce problème ?

Voici le code de submit_support.php :

<?php
// Vérifier si le fichier a bien été envoyé et s'il n'y a pas d'erreur
if (isset($_FILES['screenshot']) && $_FILES['screenshot']['error'] == 0) {

// Vérifier si le fichier n'est pas trop gros (limite à 1 Mo)
if ($_FILES['screenshot']['size'] <= 1000000) {

    // Vérifier si l'extension est autorisée
    $fileInfo = pathinfo($_FILES['screenshot']['name']);
    $extension = strtolower($fileInfo['extension']); // Convertir l'extension en minuscules
    $allowedExtensions = ['jpg', 'jpeg', 'gif', 'png'];

    if (in_array($extension, $allowedExtensions)) {
        // Valider le fichier et le stocker définitivement
        $uniqueFileName = uniqid('file_', true) . '.' . $extension; // Générer un nom de fichier unique
        $uploadPath = 'uploads/' . $uniqueFileName;

        if (move_uploaded_file($_FILES['screenshot']['tmp_name'], '/var/www/html/projet_OPENCLASS/src/support/uploads/' . $uniqueFileName)) {
            echo "L'envoi a bien été effectué !";
        } else {
            echo "Erreur : Impossible de déplacer le fichier.";
            echo "Erreur PHP : " . error_get_last()['message'];
        }            
    } else {
        echo "Erreur : Extension de fichier non autorisée.";
    }
} else {
    echo "Erreur : Le fichier est trop gros.";
}

} else {
echo "Erreur lors de l'envoi du fichier.";
}
?>

Et voici le code de support_formulaire.php :

<!DOCTYPE html>
<html lang="fr">

<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Formulaire avec Envoi de Fichier</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet">
</head>

<body>
<?php include_once('../footer_header/header.php'); ?>
<div class="container mt-5">
<form action="submit_support.php" method="POST" enctype="multipart/form-data">
<div class="mb-3">
<label for="email" class="form-label">Adresse Email :</label>
<input type="email" class="form-control" id="email" name="email" required>
</div>

        <div class="mb-3">
            <label for="message" class="form-label">Message :</label>
            <textarea class="form-control" id="message" name="message" placeholder="Exprimez-vous" required></textarea>
        </div>

        <div class="mb-3">
            <label for="screenshot" class="form-label">Votre capture d'écran :</label>
            <input type="file" class="form-control" id="screenshot" name="screenshot" />
        </div>

        <button type="submit" class="btn btn-primary">Envoyer</button>
    </form>
</div>
<?php include_once('../footer_header/footer.php'); ?>

</body>

</html>

Merci d'avance pour toute aide que vous pourriez fournir !

1 réponse


tiwux
Auteur
Réponse acceptée

proleme resolu si quelqu'un en a besoin