Bonjour à tous.

ça fait quelques temps que j'essaie de mettre au point une système de news et je rencontre des problèmes avec ma fonction move_uploaded_file()

J'ai créer une fonction me permettant d'uploader des images de façon à la réutiliser quand je veux.

J'ai donc créer la possibilité aux membrex d'uploader une photo de profil, j'utilise ma fonction que j'ai nommé "upload_img" et tout fonctionne très bien.

Je créer ma page manageNews.php, où je refait un appel à cette fonction et bim voilà l'erreur :

Warning: move_uploaded_file(pics/photoprofil/21.jpg): failed to open stream: No such file or directory in /Applications/MAMP/htdocs/Archive/CrossfitWildWall2/modules/fonctions.php on line 291

Warning: move_uploaded_file(): Unable to move '/Applications/MAMP/tmp/php/php0dWDmc' to 'pics/photoprofil/21.jpg' in/Applications/MAMP/htdocs/Archive/CrossfitWildWall2/modules/fonctions.php on line 291

Erreur courrante vous diriez...

J'ai fait les choses suivantes :

  • Vérifier les droits des dossiers et fichiers
  • vérifier les chemins (après on m'a déjà dit que ça pourrait être le chemin de destination mais je voit pas en quoi il pourrait être faux)
  • j'ai recrée un autre dossier pour tester ailleurs

Voilà le code de ma fonction :

function upload_img($image, $dossier="pics/", $nom_image=NULL){

        $dossier_min = $dossier.'min/';
        $fichier = basename($image['name']);
        $taille_maxi = 2097152; //100000;  
        $taille = filesize($image['tmp_name']);
        $extensions = array('.png', '.jpg', '.jpeg', '.gif');
        $extension_img = strrchr($image['name'], '.'); 

        if( !in_array( $extension_img, $extensions ) ){   

             $erreur = 'Vous devez uploader un fichier de type png, jpg, jpeg ou gif<br>';

        }

        if( $taille > $taille_maxi ){

             $erreur = 'Le fichier est trop gros... (max 2Mo)';

        }

        //var_dump($_FILES['ImageNews']['name']);

        if( !isset( $erreur ) ){ //S'il n'y a pas d'erreur, on upload

             $fichier = strtr($fichier, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');

             $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);

            if( $nom_image == NULL ){

                if( move_uploaded_file($image['tmp_name'], $dossier . $fichier) ){

                    //echo 'Upload effectué avec succès !';

                    $lien_image = $dossier.$fichier;

                    return $lien_image;

                 }
                 else{

                      //echo 'Echec de l\'upload !';
                     return false;

                 }

            }
            else{

                if( move_uploaded_file($image['tmp_name'], $dossier . $nom_image . $extension_img) ){

                    //echo 'Upload effectué avec succès !';

                    $lien_image = $dossier.$nom_image . $extension_img;

                    return $lien_image;

                 }
                 else{ FALSE).

                      //echo 'Echec de l\'upload !';
                     return false;

                 }

            }

        }
        else{

             return false;

        }

    }

donc cette fonction fonctionne quand elle est appelé depuis ma page accountParam.php

if( session_status() == PHP_SESSION_NONE ){

        session_start();

    }

    include "modules/config.php";

    require_once "modules/include.php";

    reconnectFromCookie();

    if( !isset($_SESSION['auth']) ){

        $_SESSION['flash']['bad'] = "Vous devez être connecté pour accéder à cette page";

        header('Location: login.php');

        exit();

    }

    /* ############################################################################################### *\

        fonctions des paramètres

    \* ############################################################################################### */

    // Validation d'une photo de profil
    if( !empty($_FILES) ){  // si il y a bien un fichier envoyé

        require("modules/imgClass.php");

        if( isset($_FILES['profilPic']) ){

            // stockage du fichier dans une variable

            $img = $_FILES['profilPic'];

            // traitement de l'extension et vérif

            $extension = explode(".", $img['name']);

            //$ext = strtolower(substr($img['name'], -3));

            $allow_ext = array('jpg', 'jpeg', 'png');

            if( in_array($extension[1], $allow_ext) ){

                $bdd = connect_bdd();

                  $result_upload_img = upload_img($_FILES['profilPic'], "pics/photoprofil/", "".$_SESSION['auth']['ID_uti']."");

                                  $_SESSION['flash']['good'] = "Votre photo de profil à bien été changée";
                header("location: accountParam.php");
                exit();

            }
            else{

                $_SESSION['flash']['bad'] = "Votre image n'a pas l'une des extensions suivantes : 'jpg', 'jpeg' ou 'png'";
                //header("location: accountParam.php");
                //exit();

            }

        }

    }

    if( isset( $_POST['supImg'] ) ){        // si on supp un photo

        //echo "<span class=\"msg\">\"".$_POST['nomImg']."\" à bien été supprimée</span>";

        //unlink("pics/photoprofil/".$_POST['nomImg']);
        //unlink("pics/photoprofil/min/".$_POST['nomImg']);

    }

    require "content/part/head.php";
//    require "content/part/nav.php";

?>

<section id="param">

    <div id="paramContent">

        <h1>Paramètres</h1>

                <section id="param">

            <form class="formProfilPicture" method="post" enctype="multipart/form-data">
                <input type="file" name="profilPic">
                <input type="submit" name="Envoyer">
            </form>

        </section>

    </div>

</section>

<?php

    require "content/part/foot.php";

?>

mais ne fonctionne pas depuis cette page : manageNews.php

if( session_status() == PHP_SESSION_NONE ){

        session_start();

    }

    include "../modules/config.php";

    require_once "../modules/include.php";

    reconnectFromCookie();

    if( !isset($_SESSION['auth']) ){ // L'utilisateur est-il connecté ?

        if( $_SESSION['auth']['categorie'] > 2 ){ // l'utilisateur est-il catégorie supérieur à 2 ?

            $_SESSION['flash']['bad'] = "Vous n'avez pas les droits nécéssaire pour accéder à cette page";

            header('Location: ../account.php');

            exit();

        }

        $_SESSION['flash']['bad'] = "Vous devez être connecté pour accéder à cette page";

        header('Location: ../login.php');

        exit();

    }

    /////////////////////////////////////////////////
    //      Si l'utilisateur veux ajouter un article
    /////////////////////////////////////////////////

    if( isset($_POST['validation-ajout-article']) ){

        echo '<br><br><br><br>';

        //debug($_FILES);

        if( !empty($_FILES) ){  // si il y a bien un fichier envoyé

           //$result_upload_img = upload_img($_FILES['imageNews'], "pics/news/");
            $result_upload_img = upload_img($_FILES['imageNews'], "pics/photoprofil/", "".$_SESSION['auth']['ID_uti']."");

        }
    }
        echo '<br><br><br><br>';

//debug($_FILES['ImageNews']);
//    echo "ok";

    /////////////////////////////////////////////////

    /////////////////////////////////////////////////
    //      Création des données de pagination
    /////////////////////////////////////////////////
    $nombre_article = select_number_of_item("news");
    $nombre_article = $nombre_article['nb'];
    $article_par_page = 30;
    $nombre_de_page = ceil( (int)$nombre_article / (int)$article_par_page );

    if( isset($_GET['page']) and $_GET['page'] > 0 and $_GET['page'] <= $nombre_de_page ){

        $page_courante = $_GET['page'];

    }
    else{

        $page_courante = 1;

    }
    /////////////////////////////////////////////////

    require "../content/part/head.php";

?>

<section id="manageNews">

    <div id="manageNewsContent">

        <h1>News Management</h1>

        <h2>Ajouter une news</h2>

        <form class="form01" method="post" enctype="multipart/form-data">

            <input type="hidden" name="MAX_FILE_SIZE" value="2097152">

            <input type="file" name="imageNews" id="image">
<!--
            <input type="text" name="titre" placeholder="Titre">
            <textarea id="textarea-cke" name="contenu"></textarea>
            <input type="text" name="lien" placeholder="lien">
-->
            <input type="submit" name="validation-ajout-article" value="Ajouter">

        </form>
    </div>
    </section>

<?php

    require "../content/part/foot.php";

?>

Est-ce que quelqu'un sait-il d'où ça vient ?

Merci d'avance pour votre aide !

Tchoubisou

3 réponses


AlexJM
Réponse acceptée

Tes deux fichiers sont dans le même dossier ?

KevinTss
Auteur
Réponse acceptée

Salut Alex,
Alors non manageNews est dans manage/manageNews.php

et la fonction est dans module/fonctions.php

EDIT :

En effet c'était le soucis...
j'était tellement dedans que je passais à coté !
Tout ce temps perdu pour une si petite erreur ! Merci à toi !

De rien ;)