Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    ftp_put funziona solo con FTP_ASCII

    Ciao a tutti (è il mio primo post ) !

    Mi spiace (ri)avviare ogni volta la problematica questione degli upload, ma proprio non capisco dove sta l'inghippo :master: ... Mi spiego. Ho un form per inserire delle news in un db, con questo posso poi allegare un'immagine al testo. Il form è con enctype="multipart/form-data" e la linea per scegliere il file da uploadare è la seguente, <input name="attach" type="file">.

    Per caricare il file sul server utilizzo il seguente script:

    codice:
    //if form is klikked and there's an attach to upload (not empty)
    	
    	if ($_FILES['attach']['name'] != "") {
    		
    		//...connect to server with ftp 
    		
    		$ftp_host = "....";
    		$ftp_user = ".......";
    		$ftp_pass = "..........";
    		$connect = ftp_connect($ftp_host);
    		$login = ftp_login($connect, $ftp_user, $ftp_pass);
    		
    		//put file from temp to server ($upload)
    		
    		$temp = $_FILES['attach']['tmp_name'];
    		$upload = "/team_news_attach/".$_FILES['attach']['name'];
    		
    		if (!ftp_put($connect, $upload, $temp, FTP_BINARY)) {
    			
    			echo "<script type=\"text/javascript\">alert('File NICHT upgeloaded! CAZZO sagen oder Webmaster kontaktieren...')</script>";
    			}
    		
    		else {
    			
    			echo "<script type=\"text/javascript\">alert('File upgeloaded! Jetzt kannst du den spielplan kreieren (einfach unten klikken)')</script>";
    			}
    		
    		//close ftp
    		
    		ftp_close($connect);		
    		}
    La cosa incomprensibile (a me) è che se utilizzo FTP_ASCII con ftp_put non ho nessun problema a caricare un file di testo, mentre volendo uploadare ad esempio una foto, quindi con FTP_BINARY (come nel codice postato) ho un messaggio d'errore e più precisamente un "Fatal error: Maximum execution time of 30 seconds...".

    Qualcuno ha per caso un'idea dove sbaglio?

    Grazie mille
    La penicillina può forse guarire gli uomini, ma è il vino a renderli felici (A. Flemming)

  2. #2
    Per quale motivo utilizzi le funzioni FTP per effettuare l'upload?

  3. #3
    Seguendo un po' quanto trovato nel forum e nella sezione php ho provato una volta con "move_uploaded_file", ma con scarsi successi (non ho errori di upload, ma in realtà non sono mai riuscito ad uploadare qualcosa). Così ho provato con ftp_put e con questo metodo, almeno per quanto riguarda file di testo, ho ottenuto con successo quello che volevo. Il problema è con i file non di testo, dunque con FTP_BINARY.

    Per informazione sono hostato su un server Windows 2003 (per un utente GNU/Linux come me è frustrante, ma agli inizi delle mie passioni informatiche non ho fatto caso a questo...). All'interno ho una cartella cgi-bin (era già presente) e poi quelle che ho inserito io. Non ho mai avuto una cartella Public. La cartella dove faccio gli upload è settata via ftp con CHMOD 777.

    Grazie d'anticipo per l'interesse. Un saluto
    La penicillina può forse guarire gli uomini, ma è il vino a renderli felici (A. Flemming)

  4. #4
    ho provato una volta con "move_uploaded_file", ma con scarsi successi
    Ti consiglio vivamente ti ricominciare copiando gli esempi del manuale ufficiale:

    http://www.php.net/manual/it/features.file-upload.php

    Leggi tutti i commenti e le altre informazioni del manuale e vedrai che sarai in grado di far funzionare l'upload utilizzando le funzioni messe a disposizione dal PHP (e non sto parlando di quelle FTP).

  5. #5
    Sto brancolando nel buio... Allora, dopo aver riletto quanto concerne l'upload in php sono arrivato a sperimentare il seguente script e relativo form (copiato da php.net):

    codice:
    <html>
    
    <head>
    
    <title>Prova!!! Upload, sperem...</title>
    
    </head>
    
    <body>
    
    
    
    <form enctype="multipart/form-data" action="" method="POST">
        
        <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
        
        Send this file: <input name="userfile" type="file" />
        <input type="submit" value="Send File" />
    </form>
    
    
    
    <?php
    // Nelle versioni di PHP precedenti alla 4.1.0 si deve utilizzare  $HTTP_POST_FILES anzichè 
    // $_FILES.
    $uploaddir = '/team_news_attach/';
    $uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
    echo "<pre>";
    if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
        echo "File is valid, and was successfully uploaded.\n";
    } else {
        echo "Possibile attacco tramite file upload!\n"; 
    }
    echo 'Alcune informazioni di debug:';
    print_r($_FILES); 
    
    print "</pre>";
    
    ?>
    
    </body>
    </html>
    Il risultato a video è il seguente:

    codice:
    Possibile attacco tramite file upload!
    Alcune informazioni di debug:Array
    (
        [userfile] => Array
            (
                [name] => lavori_in_corso_reduced.jpg
                [type] => image/jpeg
                [tmp_name] => C:\WINDOWS\Temp\php8D.tmp
                [error] => 0
                [size] => 18821
            )
    
    )
    Ciò che deduco, ottenendo la location del file temporale e l'errore 0 è che l'upload avviene in modo corretto! Alias, riesco ad uplodare il file sullo spazio riservato del server ai file temporanei, ma non riesco poi a spostarlo nel mio host. Essendo quest'ultimo nella partizione D:\ ed essendo il file temporaneo in una partizione C:\ su php.net ho trovato che in un server windows, lavorando su partizioni diverse si potrebbero ottenere degli errori. Ho cercato di ovviare dando alla cartella di upload la location esatta con $uploaddir = getcwd() . '/team_news_attach/'; al posto di $uploaddir = '/team_news_attach/'; ma sempre senza successo...

    Al momento non so veramente che pesci pigliare...
    La penicillina può forse guarire gli uomini, ma è il vino a renderli felici (A. Flemming)

  6. #6
    Ciò che deduco, ottenendo la location del file temporale e l'errore 0 è che l'upload avviene in modo corretto! Alias, riesco ad uplodare il file sullo spazio riservato del server ai file temporanei, ma non riesco poi a spostarlo nel mio host.
    Esatto. Questo avviene perchè utilizzi /team_news_attach/ come upload dir.

    $uploaddir = dirname(__FILE__) . '/team_news_attach/';

    Ammesso che esista una sotto cartella "team_news_attach" all'interno della cartella dove è salvato il tuo script PHP. Tale cartella DEVE avere i privilegi in scrittura abilitati (es. 777).

  7. #7
    Lo script di prova, quello postato sopra si chiama "try_upload.php" e si trova nella root principale ("/"). La funzione dirname(__script__) mi da dunque un punto.

    La cartella "team_news_attach" esiste e si trova nella root con permessi CHMOD 666 (mi sono sbagliato sopra a dire 777; in ogni caso ha i permessi di scrittura pubblici). Ho provato con $uploaddir = dirname(try_upload.php) . '/team_news_attach/'; $uploaddir = './team_news_attach/'; $uploaddir = 'team_news_attach/'; $uploaddir = dirname($_SERVER['PHP_SELF']) . '/team_news_attach/'; $uploaddir = dirname($_SERVER['try_upload.php']) . '/team_news_attach/'; Ma sempre senza successo.

    Mi domando a questo punto se non è la configurazione del server ad impedirmi l'upload ... Ma sarebbe in ogni caso strano, dal momento che nella cartella temporanea posso "Muovermi" senza problemi.
    La penicillina può forse guarire gli uomini, ma è il vino a renderli felici (A. Flemming)

  8. #8
    La funzione dirname(__script__) mi da dunque un punto.
    Per favore metti il seguente script nella stessa cartella di try_upload.php e pubblicane i risultato:

    [php]<?php
    echo(dirname(__FILE__));
    ?>[php]

  9. #9
    Intendevo il seguente codice:

    Codice PHP:
    <?php
    echo(dirname(__FILE__));
    ?>

  10. #10
    Pensavo che il simbolo __FILE__ stesse per indicare il nome del file contenente lo script... mi scuso...

    In ogni caso, l'output del tuo script inserito in try_upload.php è "D:\WWW_myWEB\Fcticino".

    Ho allora provato con "$uploaddir = dirname(__FILE__) . '/team_news_attach/';" ma sempre senza successo.

    Ho ancora pensato che magari, vista la location con i backslash (che strano... in GNU/Linux ciò non esiste) ho provato a dare la cartella anche con i backslashes e cioè $uploaddir = dirname(__FILE__) . '\team_news_attach\\'; Ma ancora una volta nada...

    Dovrò farti un monumento solo per la pazienza...
    La penicillina può forse guarire gli uomini, ma è il vino a renderli felici (A. Flemming)

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.