Visualizzazione risultati 1 fino 18 di 18

Discussione: Upload File

  1. #1
    Guest

    Angry Upload File

    Ciao a tutti :)

    Premetto che lo stesso codice funziona su un sito hostato su aruba (non mio quindi non lo posso sfruttare) e volevo applicarlo anche al sito altervista.

    Dopo un pò di ricerca ho visto che qualcuno ha avuto problemi perchè la cartella temporanea di caricamento non era autorizzato ad usarla, è possibile? Se si, non so minimamente come risolvere la situazione!

    Stampando a video il nome temporaneo che devo usare come primo paramentro nel comando move_uploaded_file() risulta questa stringa:

    /membri/.dummy/temp/php<nome variabile>


    Vi allego il codice php che uso:

    Codice PHP:
    do {
    echo(
    'Errore: '.$HTTP_POST_FILES['userfile']['error'].'<br><br>');
    if (
    is_uploaded_file($_FILES['userfile']['tmp_name'])) {
    $msg="File Caricato Correttamente";
    // Cambio il nome, se richiesto
    $ext=substr($nomeFile,-4);
    if(
    $_POST[nomefile]!=""){
    $nomeFile=$_POST[nomefile].$ext;
    }
    // Verifico che sul sul server non esista già un file con lo stesso nome
    // In alternativa aggiungo un numero progressivo
    if (file_exists($path.'/'.$nomeFile)) {
    if(
    $_POST[nuovonome]=="cambia"){
    $i=1;
    $Nome2=$nomeFile;
    $Nome3=substr($nomeFile,0,-4);
    while(
    file_exists($path.'/'.$Nome2)){
    $Nome2=$Nome3.'_'.$i.$ext;
    $i=$i+1;
    }
    $nomeFile=$Nome2;
    }
    }
    echo(
    'Nome Temp: '.$_FILES['userfile']['tmp_name'].'<br><br>');
    echo(
    'NomeFile: '.$nomeFile.'<br><br>');
    // Sposto il file nella cartella da me desiderata
    if (!move_uploaded_file($_FILES['userfile']['tmp_name'], $path.'/'.$nomeFile)) {
    $msg = "<p>Errore nel caricamento del file!!</p>";
    break;
    }
    }
    } while (
    false);
    echo
    $msg.'<br>Percorso da usare: <b>'.$path.'/'.$nomeFile.'</b><br><br>
    <a href="'
    .$path.'/'.$nomeFile.'">Vedi File</a><br>
    <a href="index.php?Link=DB/upload">Nuovo File</a>'
    ;
    ringrazio da subito chi tenterà si aiutarmi

  2. #2
    Guest

    Predefinito

    La prima cosa che mi è saltata all'occhio è questa:

    Codice PHP:
    $nomeFile=$_POST[nomefile].$ext;
    O mancano gli apici a nomefile oppure il dollaro della variabile

  3. #3
    Guest

    Predefinito

    no quello fa riferimento a <input type="text" name="nomefile">
    gli apici non sono obbligatori, funziona tranquillamente senza :S

  4. #4
    Guest

    Predefinito

    Io sapevo il contrario, solo con i numeri non è possibile non inserire gli apici.

    Comunque da quel che ho capito non è possibile uppare i file, perchè ogni tanto l'utente riceve l'errore che la cartella non ha i permessi di scrittura?


  5. #5
    Guest

    Predefinito

    Non so a me ha sempre funzionato sia qui che in quelli hostati su aruba anche senza apici ;D

    Sinceramente non lo so qual'è l'errore :S Non mi stampa nulla a video se non le variabili che richiedo io espressamente, quindi ho pensato fosse problema di DOVE viene messo il file in modo temporaneo, ovvero la cartella

    /membri/.dummy/temp/php<nome variabile>

    Ma sinceramente non ne ho idea, di sicuro però è qualcosa di particolare di altervista perchè sull'altro appunto mi è sempre andato!

    ---
    Edit:

    Per risolvere, se fosse questo il problema, posso cambiare la cartella temporanea tramite htaccess? Oppure devo creare la cartella membri, ma non so cosa voglia dire la cartella successiva in cui c'è il punto (membri/.dummy/etc).

    Ci sono cartelle in cui NON si può uploadare? Io tentavo di farlo in _altervista_ht perchè i file caricati spesso saranno immagini e vi è necessità di linkarli altrove.

    E' vero inoltre, che non si può creare cartelle con mkdir?
    Ultima modifica di ordineunicorno : 04-04-2009 alle ore 23.17.26 Motivo: aggiunta

  6. #6
    Guest

    Lightbulb

    Dopo ricerche estenuanti sono riuscita a trovare i numeri corrispondenti agli errori ed ho scoperto che... non ce ne sono!! X___X
    Cioè, la variabile $_FILES['userfile']['error'] mi risulta avere valore 0 che corrisponde a "nessun errore".

    questo è quello che mi ritorna la pagina vera e propria:

    Errore: 0

    Path: ../_altervista_ht

    Nome Temp: /membri/.dummy/temp/phpl3seP0

    NomeFile: sfondo.jpg


    Errore nel caricamento del file!!
    Il problema dunque sta nello spostamento vero e proprio perchè le variabili di cartelle etc sono tutte a posto, errori nell'upload non ce ne sono.
    Che sia un problema di permessi quindi? A questo punto non so come risolvere, non sono pratica di permessi altervista ma ho letto da qualche parte che non si possono cambiare, come faccio?

    per vostro comodità riporto la parte di codice incriminata, magari nel cambiare i valori ho fatto qualche errore che non vedo.

    Codice PHP:
    if (!move_uploaded_file($_FILES['userfile']['tmp_name'], $path.'/'.$nomeFile)) {
    $msg = "<p>Errore nel caricamento del file!!</p>";
    break;
    }

  7. #7
    Guest

    Predefinito

    I permessi devono essere 777 cioè, di lettura e scrittura, e li puoi cambiare con un programma FTP, esempio Filezilla FTP Client

  8. #8
    Guest

    Predefinito

    mi sono accorta che non davo il percorso assoluto alla funzione di spostamento, cambiando questa piccola cosa non mi da nessun errore, ma il file comunque non c'è sul sito O_O

    I permessi si possono cambiare solo con il programma ftp? Cercavo di non usarlo perchè spesso lavoricchio anche su pc non miei e non volevo usare programmi aggiuntivi :S

  9. #9
    Guest

  10. #10
    Guest

    Predefinito

    secondo te quindi il problema che comunque il file non appaia sul sito è mera questione di permessi? Ora provo comunque ^^

  11. #11
    Guest

    Predefinito

    Dato che non gestisci l'errore nel caso l'immagine non sia fisicamente nella cartella, è possibile che sioa un problema di permessi, perchè di base, nei server apache linux, se non sbaglio, i permessi sono 774, cioè solo di Lettura

  12. #12
    palla000 non è connesso Utente attivo
    Data registrazione
    12-07-2008
    Residenza
    trieste
    Messaggi
    278

    Predefinito

    io so che qui su altervista non serve cambiare i permessi
    http://forum.it.altervista.org/i-ser...mod-777-a.html
    Ultima modifica di palla000 : 05-04-2009 alle ore 14.44.02

  13. #13
    Guest

    Predefinito

    anche io come palla000 ho letto che su Altervista non serve però di fatto io non vedo apparire i file che tento di caricare! Sto diventando matta..

  14. #14
    palla000 non è connesso Utente attivo
    Data registrazione
    12-07-2008
    Residenza
    trieste
    Messaggi
    278

    Predefinito

    prova con questo

    form.html
    Codice HTML:
    <form enctype="multipart/form-data" action="uploader.php" method="POST">
    <input type="hidden" name="MAX_FILE_SIZE" value="100000" />
    Choose a file to upload: <input name="uploadedfile" type="file" /><br />
    <input type="submit" value="Upload File" />
    </form>
    uploader.php

    Codice PHP:
    <?php

    $target_path
    = "uploads/";

    $target_path = $target_path . basename( $_FILES['uploadedfile']['name']);

    if(
    move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
    echo
    "The file ". basename( $_FILES['uploadedfile']['name']).
    " has been uploaded";
    } else{
    echo
    "There was an error uploading the file, please try again!";
    }

    ?>
    è più semplice e funziona

  15. #15
    Guest

    Predefinito

    azz funziona :S
    Quindi ho fatto qualche cavolata nel codice, lo riscriverò da capo.

    Certo che mi fa strano, sul sito aruba viene usato tranquillamente... mhà :S

  16. #16
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    tralasciando tutti i post sopra: il problema è il contenuto della variabile $path, che indica allo script dove spostare i file che ha ricevuto, e che sono in attesa nella directory temporanea.

    Nello spezzone di codice disponibile nel primo post non è presente l'assegnazione, quindi presumo avvenga prima - in ogni caso $path dovrebbe contenere una directory a cui tu hai accesso, quindi o un percorso relativo, oppure uno assoluto che inizi con /membri/tuonick, e.g.
    Codice PHP:
    $path = '/membri/<tuonick>/filericevuti';
    Per quanto riguarda gli apici mancanti che ti ha indicato Biccheddu, mettili perché al momento lo script è incorretto. Funzionerà anche senza, ma se aggiungi un error_reporting(E_ALL); in cima alla pagina vedrai una marea di messaggi di errore

    Quindi:
    Codice PHP:
    ...
    if(
    $_POST['nomefile']!=""){
    $nomeFile=$_POST['nomefile'].$ext;
    }
    // Verifico che sul sul server non esista già un file con lo stesso nome
    // In alternativa aggiungo un numero progressivo
    if (file_exists($path.'/'.$nomeFile)) {
    if(
    $_POST['nuovonome']=="cambia"){
    $i=1;
    $Nome2=$nomeFile;
    ...
    Ultima modifica di dreadnaut : 05-04-2009 alle ore 15.12.30

  17. #17
    Guest

    Predefinito

    ecco non sapevo che il path dovesse iniziare con quei valori, cosa che nello script viene aggirata con la funzione basename() giusto? (perchè l'altro mi va senza problemi)


    mille grazie a tutti ^_^

  18. #18
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    basename() toglie solo il percorso dal nome di un file, ad esempio trasformando
    Codice:
    /membri/.dummy/temp/php<nome variabile>
    in
    Codice:
    php<nome variabile>

Regole di scrittura

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