Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente bannato
    Registrato dal
    Jul 2007
    Messaggi
    368

    Problema con funzione "copy()".

    Stò creando uno script che (oltre a tante altre cose) uploadi anche un file. Alla fine dello script ho inserito queste due istruzioni:
    codice:
    echo $_FILES['fil']['error'] . "
    ";
    echo "OK";
    per essere sicuro che tutto sia andato tutto bene. Sul browser mi ritrovo infatti:
    codice:
    0
    OK
    ma il file da uploadare non c' è nella cartella preimpostata. Le impostazioni di PHP per l' upload dei file sono attive.

    insins.php
    codice:
    <?php
    include("../config.inc.php");
    $use = "cazzo";
    $err = "0";
    $tit = trim($_POST[tit]);
    $sec = $_POST[sec];
    $tes = trim($_POST[tes]);
    $fil = $_FILES['fil']['name'];
    $car = ".";
    if (strlen($tit) < 15){echo "Error title
    "; ++$err;};
    if (strlen($tes) < 25){echo "Error text
    "; ++$err;};
    if (strstr($fil, $car) == FALSE){echo "Error file
    "; ++$err;};
    if ($err > 0 ){break;};
    $ti = time();
    
    $db = mysql_connect($db_host, $db_user, $db_password);
    if ($db == FALSE){echo "Connection error retry later";};
    $con = mysql_select_db($db_name, $db);
    if ($con == FALSE){echo "Database error retry later";};
    $query0 = "select allega from uteinf where userna='$use'";
    $q0r = mysql_fetch_array(mysql_query($query0));
    if (strstr ($q0r[allega], $fil) != false){echo "File already exist"; break;};
    $query1 = "update uteinf set allega='$fil' where userna='$use'";
    if (mysql_query($query1) == false){echo "Error rewrite data";};
    $query2 = "INSERT INTO fileup (filena, utente) VALUES ('$fil', '$use')";
    if (mysql_query($query2) == false){echo "Error insert fileup"; break;};
    $query3 = "select id from fileup where filena='$fil'";
    $bh = mysql_query($query3);
    if ( $bh == false){echo "Error select rename"; break;};
    $q3r = mysql_fetch_array($bh);
    $nnm = $q3r[id];
    $err = copy($_FILES['fil']['tmp_name'], "../fils/".$nnm);
    echo $_FILES['fil']['error'] . "
    ";
    echo "OK";
    ?>
    Magari sostituendo il copy con qualcosa di più avanzato...

  2. #2

  3. #3
    Utente bannato
    Registrato dal
    Jul 2007
    Messaggi
    368
    Non c' ho capito niente. Ma quelle cose sevono per muovere i files dopo l' upload? Io avrei seguito questa guida: "http://www.codicefacile.it/tutorials/tutorials.php/8/Upload_di_files_con_PHP", dovè che sbaglio?

  4. #4
    dovè che sbaglio?
    A fidarti di una risorsa che si chiama CodiceFacile!!!!

    A parte gli scherzi, l'esempio mi sembra ben fatto e probabilmente il fatto che il file non venga uploadato come dovrebbe potrebbe essere dato da diversi fattori.
    Magari provi a salvare il file in una cartella dove non hai i permessi di scrittura, oppure sbagli la sintassi della funzione non saprei.... puretroppo non specifichi molto!

    Ad ogni modo, al posto della funzione copy(), prova ad usare la funzione move_uploaded_file().
    Se segui il manuale fino in fondo, trovi anche degli esempi utili per capire come funziona.

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  5. #5
    Utente bannato
    Registrato dal
    Jul 2007
    Messaggi
    368
    Stesso prob,
    codice:
    $des = "../fils/";
    $err = move_uploaded_file($_FILES['fil']['name'], $des);
    echo $_FILES['fil']['error'] . "
    ";
    echo $err."
    ";
    echo "OK";
    e questo è quello che mi ritrovo sul browser:
    codice:
    0
    
    OK
    ,

    il secondo echo restituisce una riga vuota. Significa che non ha funzionato lafunz "move_uloaded_files()"?

  6. #6
    Mi sembra che sia sbagliata la sintassi con la quale usi questa funzione.

    Quoto il manuale ufficiale.
    bool move_uploaded_file ( string $filename , string $destination )
    Per $filename, si intende il file che stai caricando, che non è identificato dal nome di quello che hai messo nella form, ma dal corrispettivo presente nella cartella tmp del server.
    Per $destination, invece non si intende solo il percorso (cioè la lista della cartelle per arrivare a quella dove vuoi salvare il tuo file), ma il percorso completo del nome che te vuoi dare al tuo file.

    Io lo script lo riscriverei così:
    Codice PHP:

    $nome_file 
    $_FILES['fil']['name'];
    $nome_tmp $_FILES['fil']['tmp_name'];

    $des "../fils/".$nome_file;

    move_uploaded_file($nome_tmp$des) OR DIE("<hr />Errore");

    echo 
    "<hr />Il file è salvato nella cartella di destinazione"
    Un po' di annotazioni al tuo script.
    Hai associato la variabile $err alla funzione move_eccetera, ma sostanzilamente non hai usato questa variabile per filtrare in alcun modo il risultato.
    Per capirci, non hai neanche messo un IF.
    Tra l'altro, c'è anche la possibilità (per fare uno script coi controfiocchi) di utilizzare la funzione is_uploaded_file(). Questa funzione, ti permette di andare a sapere da subito se è il caso di provare a spostare il file oppure mandare subito un messaggio di errore (ipotesi: il tuo utente non ha aggiunto nessun file alla form).
    Ultimissima.
    $_FILES['fil']['error'] ti tornava 0, quindi nessun errore, proprio perché il server riceveva il file e lo manteneva nella propria cartella temporanea.
    L'errore, infatti, era successivo.

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  7. #7
    Utente bannato
    Registrato dal
    Jul 2007
    Messaggi
    368
    Non funzia,
    codice:
    move_uploaded_file($_FILES['fil']['tmp_name'], $des) OR DIE("<hr />Errore upload");
    ma quando parli di files presenti nelle cartella temp del server, intendi file già uploadati? Io devo fare tutto dall' inizio cioè, prendere il file dal computer dell'utente e copiarlo in una cartella del mio spazio (detto in parole povere).

  8. #8
    Quando hai una form con un campo per selezionare un file, e premi INVIA, il file viene fisicamente trasferito in una cartella del server, la TEMP appunto. Lì il file ha un nome temporaneo definitito dal server stesso.

    Se il passaggio FORM -> Cartella Temporanea è andato a buon fine, $_FILES['file']['error'] torna 0. Questo significa che il trasferimento al server è stato effettuato con successo.
    Per un ulteriore controllo c'è anche la funzione is_uploaded_file() di cui ti ho riportato il link al manuale ufficiale nel precedente post.

    Dalla temporanea, però, il file deve andare nella cartella da te definita. Per fare questo, la cartella dove vai a spostare il file deve avere i permessi di scrittura.
    Qui sta il punto.

    La cartella il cui percorso è scritto nella variabile $des ha questi permessi?

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  9. #9
    Utente bannato
    Registrato dal
    Jul 2007
    Messaggi
    368
    Avevi (quasi) ragione sin dall' inizio, era un prob di permessi ma della cartella "/var/www/temp".

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.