Visualizzazione risultati 1 fino 14 di 14

Discussione: [PHP] Upload multiplo con copy

  1. #1
    Guest

    Predefinito [PHP] Upload multiplo con copy

    Ciao a tutti, sto usando la funzione copy per caricare dei files mandati tramite l'apposito form (img[])... ecco il codice:
    Codice PHP:
    echo '<p align="center">';

    foreach(
    $_FILES["img"]["name"] as $name)
    {
    if(
    copy("{$dir}{$name}","{$dir}{$name}"))
    {
    echo
    "{$url}/{$dir}{$name}<br />";
    }
    else
    {
    echo
    "<b>{$dir}{$name}</b> :: Errore nel caricamento!<br />";
    }
    }

    echo
    '</p>';
    Dice che la cartella non esiste, ma non è vero!
    Lo script è nella root (in locale) e la cartella dove caricarli è nella root anch'essa:
    *root*/file_upload.php
    *root*/uploads/
    Warning: copy(uploads/od.png) [function.copy]: failed to open stream: No such file or directory in upload_img.php on line 66
    Grazie mille, ciao Davide! =)

  2. #2
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Il percorso del file da copiare si trova in tmp_name... ($_FILES['img']['tmp_name'])
    Ultima modifica di javascripter : 04-06-2010 alle ore 13.39.10

  3. #3
    Guest

    Predefinito

    Il problema e che se faccio (non l'ho provato questo ma l'avevo scritto prima è scritto velocemente):
    Codice PHP:
    foreach($_FILES['img'] as $img) { copy($dir.$img['name'],$dir.$img['tmp_name']); }
    Non funziona! =(

  4. #4
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Purtroppo quando si tratta di files multipli l'array $_FILES è ordinato piùttosto male...
    Dato che a te servono solo name e tmp_name puoi fare così:
    Codice PHP:
    $name = $_FILES['img']['name'];
    $tmp = $_FILES['img']['tmp_name'];
    $len = count($name);

    for(
    $i = 0; $i < $len; $i++) {
    copy($dir . $tmp[$i], $dir . $name[$i]);
    }

  5. #5
    Guest

    Predefinito

    Ma non funziona sempre! Non riesce ad aprire il file... com'è possibile?? O.O"
    Warning: copy(uploads/§-(.gif) [function.copy]: failed to open stream: No such file or directory in /upload_img.php on line 78
    uploads/§-(.gif :: Errore nel caricamento!
    Codice PHP:
    echo "<p align=\"center\">\n";

    $name = $_FILES["img"]["name"];
    $tmp = $_FILES["img"]["tmp_name"];
    $len = count($name);

    for(
    $i=0; $i<$len; $i++)
    {
    if(
    copy($dir.$name[$i],$dir.$tmp[$i]))
    {
    echo
    "{$url}{$dir}{$name[$i]}<br />\n";
    }
    else
    {
    echo
    "<b>{$dir}{$name[$i]}</b> :: Errore nel caricamento!<br />\n";
    }
    }

    echo
    "</p>\n";
    Dopo vorrei che PHP eliminasse ad esempio il campo file vuoto, poiché può capire che ne aggiungo 5 e ne carico 4. Così PHP deve eliminare il 5 (quello/i vuoto/i!) =)
    Grazie mille! *-*

  6. #6
    Guest

    Predefinito

    Scusa, perché non usi foreach()? $_FILES è un array e da tale usa le funzioni per lavorare con gli array, ti semplifichi la vita!

  7. #7
    Guest

    Predefinito

    Mi ha consigliato javascripter di usare il for poiché $_FILES non usa $_FILES[campo][numero][funzione] ma usa $_FILES[campo][funzione][numero] ecco il problema! xD
    Se guardi sopra capisci.......

  8. #8
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Citazione Originalmente inviato da biccheddu Visualizza messaggio
    Scusa, perché non usi foreach()? $_FILES è un array e da tale usa le funzioni per lavorare con gli array, ti semplifichi la vita!
    No, qui un foreach fa l'opposto ;) ( e poi sinceramente non mi sono mica complicato la vita )

    @sIM:
    Codice PHP:
    copy($dir.$name[$i],$dir.$tmp[$i])
    E' sbagliato... http://php.net/manual/en/function.copy.php
    bool copy ( string $source , string $dest [, resource $context ] )
    (ed io nel post sopra l'ho scritto bene)
    Ultima modifica di javascripter : 04-06-2010 alle ore 18.37.45

  9. #9
    Guest

    Predefinito

    Ho rimesso il codice iniziale, però da sempre problemi.
    Comincio a pensare che il problema sia nella path e non nella funzione!
    Codice PHP:
    $dir = "uploads/";

    for(
    $i=0; $i<$len; $i++)
    {
    copy($dir.$name[$i],$dir.$tmp[$i]);
    echo
    "{$url}{$dir}{$name[$i]}<br />\n";
    /*if(copy($dir.$name[$i],$dir.$tmp[$i]))
    {
    echo "{$url}{$dir}{$name[$i]}<br />\n";
    }
    else
    {
    echo "<b>{$dir}{$name[$i]}</b> :: Errore nel caricamento!<br />\n";
    }*/
    }

    echo
    "<form method=\"post\" enctype=\"multipart/form-data\">\n";
    echo
    "<p align=\"center\"><input type=\"submit\" value=\" Carica le foto \" /> <input style=\"margin-left:40px;\" type=\"button\" value=\" +1 File \" onClick=\"addInput();\" /></p>\n";
    echo
    "<div id=\"filediv\">\n";
    echo
    "\n<p align=\"center\"><input type=\"file\" size=\"80\" name=\"img[]\" /></p>\n";
    echo
    "\n</div>\n";
    echo
    "</form>\n\n";
    Ho copiato i pezzi di codice... grazie mille! =)

  10. #10
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Non so se hai capito che voglio dire. Devi sostituire:
    Codice PHP:
    copy($dir . $tmp[$i], $dir . $name[$i]);
    Al posto di:
    Codice PHP:
    copy($dir.$name[$i],$dir.$tmp[$i]);

  11. #11
    Guest

    Predefinito

    No non avevo capito... comunque il misterioso problema persiste! O.O
    Codice PHP:
    if(copy($dir.$tmp[$i],$dir.$name[$i]))
    {
    echo
    "{$url}{$dir}{$name[$i]}<br />\n";
    }
    else
    {
    echo
    "<b>{$dir}{$name[$i]}</b> :: Errore nel caricamento!<br />\n";
    }
    Warning: copy(uploads/C:\WINDOWS\temp\phpE2.tmp) [function.copy]: failed to open stream: Invalid argument in C:\Programmi\AppServ\www\upload_img.php on line 78
    uploads/asd.gif :: Errore nel caricamento!

  12. #12
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Che errore stupido che ho fatto!
    Codice PHP:
    copy($dir.$tmp[$i],$dir.$name[$i])
    Il file temporaneo non si trova in quella cartella ($dir) ma in C:\WINDOWS\temp\ quindi basta fare:
    Codice PHP:
    copy($tmp[$i],$dir.$name[$i])
    E dovrebbe essere ok ;)

  13. #13
    Guest

    Predefinito

    Ok funziona!! Ma come faccio a eliminare quelli vuoti ora? Perchè mostra errore in quelli vuoti! >.<"

  14. #14
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Codice PHP:
    $_FILES['img'] = array_map('array_filter', $_FILES['file']); // rimuove tutti gli elementi vuoti
    Oppure fai:
    Codice PHP:
    for($i=0; $i<$len; $i++)
    {
    if(empty(
    $name[$i])) continue;

    // resto del codice
    Ultima modifica di javascripter : 04-06-2010 alle ore 21.46.08

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •