Move_uploaded_file() e permessi

di il
5 risposte

Move_uploaded_file() e permessi

Ciao, ho un file php che comunica con il mio database creato tramite phpmyadmin. Il database ha una tabella che ho chiamato "libri_DB". Tramite una form io invio i dati al database. Tra questi dati ho anche una immagine. L'immagine mi viene caricata correttamente all'interno della cartella di upload, ma ha l'icona del lucchetto. Penso sia una questione di permessi. La mia cartella di upload ha come permesso 777.
Come posso risolvere?
Il codice è il seguente:
<?php

if(isset($_POST['mySubmit'])) {
    $db = mysqli_connect('localhost','root','','DBsito');
    if (!$db)
    {
        die('Could not connect to database: ' . mysqli_error());
    }

    $db_select = mysqli_select_db($db, 'DBsito');

        //Salva il nome del file
        $imagename = $_FILES['immagine']['name'];
        //tipo del file
        $imagetype = $_FILES['immagine']['type'];
        $imagetemp = $_FILES['immagine']['tmp_name'];
        
        //Path dell'upload
        $imagePath = "img/libri/";
        
        if(is_uploaded_file($imagetemp)) {
            if(move_uploaded_file($imagetemp, $imagePath . $imagename)) {
                echo "Sussecfully uploaded your image.";
            }
            else {
                echo "Failed to move your image.";
            }
            
        }
        else {
            echo "Failed to upload your image.";
        }


    $categoria = mysqli_real_escape_string($db, $_POST['categoria']);
    $username = mysqli_real_escape_string($db, $_POST['utente']);
    $stanza = mysqli_real_escape_string($db, $_POST['stanza']);

    $isbn = mysqli_real_escape_string($db, $_POST['isbn']);
    $note = mysqli_real_escape_string($db, $_POST['note']);
    $prezzo = mysqli_real_escape_string($db, $_POST['prezzo']);
    $quantita = mysqli_real_escape_string($db, $_POST['quantita']);

    $titolo = mysqli_real_escape_string($db, $_POST['titolo']);
    $autore = mysqli_real_escape_string($db, $_POST['autore']);
    $anno = mysqli_real_escape_string($db, $_POST['anno_pubblicazione']);
    $editore = mysqli_real_escape_string($db, $_POST['editore']);
    $pagine = mysqli_real_escape_string($db, $_POST['pagine']);


    $test = mysqli_query($db, "SELECT libri_DB.isbn FROM libri_DB WHERE BINARY libri_DB.isbn = BINARY '$isbn' ");
    
    if(!empty($isbn) && mysqli_num_rows($test)) {
        $name_error = "";
    }
    else if (!empty($isbn)){
        $query="INSERT INTO libri_DB (isbn, nome, autore, data_pubblicazione, editore, pagine, immagine_libro) 
        values ('$isbn', '$titolo', '$autore', '$anno', '$editore', '$pagine', '$imagename' )";

        if(!mysqli_query($db, $query)){
            die("DAMMIT");
        }
        else{ 
            { header("Location: thanks.php"); }
        }
        mysqli_query($db, $query);
    }
    else {
        $name_error = "";
    }
    mysqli_close($db);
}
?>
Più precisamente, l'immagine che carico tramite la form viene spostata correttamente nella cartella /img/libri, ma come ripeto ha il simbolo del lucchetto. Quindi quando vado a fare la INSERT INTO libri_DB passandogli come ultimo argomento $imagename, il tutto mi restituisce DAMMIT. Come posso fare?

5 Risposte

  • Re: Move_uploaded_file() e permessi

    Dovresti mostrare il percorso assoluto.
    Può anche essere che crei la directory al di fuori di php.
    Crea file.php nella tua document root (dentro la cartella htdocs).
    <?php echo dirname(__FILE__);
    Questo sarà il percorso assoluto, se crei un percorso diverso giustamente php non potrà accedere.
    xampp/apache/conf/http.conf
    C:/xampp/htdocs (http://localhost)
    Se inizia diversamente sei fuori root. Quindi dovrebbe risiedere in C:/xampp/htdocs/img/libri/nome_file.estensione (http://localhost/img/libri/nome_file.estension)
    Dimmi come potrò aiutarti, sai copiare un percorso di cartella e file, per poi verificare che è nella document root quando farai incolla?
  • Re: Move_uploaded_file() e permessi

    Il file php ha il seguente percorso: /opt/lampp/htdocs/progetto/php
    Mentre la cartella di upload ha questo percorso: /opt/lampp/htdocs/progetto/img/libri
    Ho notato che quando richiamo move_uploaded_file() l'immagine che mi sposta dentro la cartella "libri" ha come proprietario e gruppo "daemon". Mentre se faccio direttamente io copia e incolla di una immagine, ovviamente il proprietario e gruppo sono io e il lucchetto non c'è
  • Re: Move_uploaded_file() e permessi

    Ciao,
    nella cartella progetto chi sono i proprietari della cartella? Come utente e gruppo?

    Oltre a un chmod 777 hai fatto anche un chown con utente e gruppo?

    Quando viene scritto il file chi è il proprietario? Chi esegue il web server?

    Ciao
  • Re: Move_uploaded_file() e permessi

    Nella cartella progetto il proprietario sono io, idem utente e gruppo.
    Il problema è che se creo la cartella direttamente dal file php in questo modo:
        $categoria = mysqli_real_escape_string($db, $_POST['categoria']);
    
            //Salva il nome del file
            $imagename = $_FILES['immagine']['name'];
            //tipo del file
            $imagetype = $_FILES['immagine']['type'];
            $imagetemp = $_FILES['immagine']['tmp_name'];
    
            if(!is_dir("img/$categoria")) {
                mkdir("img/$categoria", 0777, true);
            }
            //Path dell'upload
            $imagePath = "img/$categoria/";
    
            if(is_uploaded_file($imagetemp)) {
                if(move_uploaded_file($imagetemp, $imagePath . $imagename)) {
    
                    echo "Sussecfully uploaded your image.";
                }
                else {
                    echo "Failed to move your image.";
                } 
            }
            else {
                echo "Failed to upload your image.";
            }
    la cartella "Libri" che mi crea ha come proprietario, utente e gruppo "daemon" e non prende il permesso 0777 che gli passo nella funzione mkdir(). Successivamente, se da terminale faccio
    sudo chmod 777 Libri

    allora ottengo i permessi anche io. Oppure facendo:
    sudo chown (nomeproprietario) Libri
    Posso diventare io il proprietario della cartella. Stessa cosa devo fare però all'immagine che mi è stata inserita nella cartella "Libri" tramite move_uploaded_file(). Ma ovviamente non posso risolvere il problema in questo modo, queste sono state le varie prove che ho fatto. A me servirebbe che da subito il proprietario della cartella sono io, oppure almeno avere i permessi da subito tramite chmod 777 su quella cartella. Come posso risolvere?
  • Re: Move_uploaded_file() e permessi

    La cartella che viene creata da php è il proprietario del processo e non sarai mai tu.... Tranne se cambi il proprietario che esegue il web server.

    È sbagliato impostare 777 non ti abituare così...

    Il problema tuo è richiamare i file che crei da php?

    Ciao
Devi accedere o registrarti per scrivere nel forum
5 risposte