Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    12

    Upload: come controllare i tipi di file?

    Ciao,
    Vorrei controllare, PRIMA DELL’UPLOAD, il tipo di file che mi sarà inviato,
    (a me interessano solo JPG-GIF-JPEG-PNG, solo immagini!) e l'occupazione in kb.

    Cerco una routine d’errore e di controllo da integrare in uno scrip CGI completo e funzionante
    (ma senza controlli) che utilizza le seguenti variabili:
    -----------------------------------------------
    $upload_dir = "../../dovelametto";
    $query = new CGI;
    $filename = $query->param("immagine");
    $filename =~ s/.*[\/\\](.*)/$1/;
    $upload_filehandle = $query->upload("immagine");
    open UPLOADFILE, ">$upload_dir/$filename";
    -----------------------------------------------

    E' possibile avere disponibile l’immagine per la stampa senza memorizzarla?
    Senza fare l’upload?

    Utilizzando in qualche modo le variabili di transito/tmp create dal SUBMIT della pagina PHP che lancia lo script CGI?
    Grazie!

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Sono alcune domande diverse. Alcune hanno risposta lato server, per altre devi farlo lato client.
    In effetti, non puoi fare nulla con un'immagine lato server finche` non hai l'immagine.

    Per il controllo dell'estensione del file, il problema e` di semplice soluzione: devi fare una valutazione della stringa prima dell'upload.
    Per il controllo del tipo di file (quindi il tipo vero, che non venga imbrogliato se l'utente cambia estensione), invece il problema e` piu` complesso, e la soluzione dipende dal tipo di file.
    Dato che i file grafici hanno qualche byte in cui ci sono metainformazioni all'inizio del file, puoi iniziare l'upload, testare quei byte, ed eventualmetne interrompere (abortire) il processo. Non ti so dare info piu` dettagliate su come sono fatti i file, ma credo che le puoi trovare nei siti di grafica (o chiedere nel forum di grafica). Ricordo solo che i bmp hanno due word all'inizio che dicono le dimensioni in px in orizz e verticale.

    Invece per la stampa, devi chiarire cosa vuoi fare.
    Hai un'immagine sul computer del client e la vuoi stampare dallo stesso computer?
    Si puo` fare senza scomodare i CGI, ma se proprio vuoi gestire la cosa dall'interfaccia utente (browser) senza dover cambiare programma, qualcosa si puo` fare in JS, ma non per tutti i browser. Ma questo e` meglio che lo chiedi nel forum JS.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    12
    Grazie per avermi risposto, ma forse non hai capito il mio problema:
    Ho già pronta e funzionante la pagina.php contenente il Form e il CGI che fa l’upload e poi le elaborazioni e la stampa (tutto ok) però come vedi dal mio codice NON FA NESSUN CONTROLLO...

    Mi serve un esempio pratico... la teoria la conosco... ma utilizzo da pochissimo tempo i CGI...

    Come si fa un controllo di estensione? (con routine d’errore)
    Come si fa un controllo della dimensione in Kb? (con routine d’errore)

    Ho cercato e cercato, ma non ho trovato un esempio semplice e pratico che io possa capire... elaborare... ed integrare nel mio codice.
    Grazie

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    In effetti non avevo capito, ed ancor meno capisco adesso.

    Se hai un programma PHP, perche` i controlli non li fai in PHP?
    E se il form manda i dati al PHP a che ti serve il CGI?

    CGI (commn gateway interface) e` un protocollo di trasmissione dati client-server e gestione degli stessi sul server.
    Il PHP e` anche quello un protocollo di comunicazione, con in piu` integrato un linguaggio di programmazione (Perl-like), ed una serie di routine preconfezionate ed integrate a basso livello.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    12
    Grazie,
    Il programma in CGI è quello che elabora e stampa, è troppo complesso non posso rifarlo in PHP.

    Certo che se potessi fare il controllo in PHP e poi lanciare il CGI (se superati i controlli e senza perdere le variabili) sarebbe il top.

    Il problema è che per avere i dati da controllare devo eseguire "SUBMIT" e aprire un file.PHP di output (form action...) e poi come faccio a lanciare il CGI senza perdere le variabili?
    Grazie.

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Non ha senso quanto scrivi, alla luce di quanto ti ho appena scritto.

    Un CGI non e` un programma. Il programma lo scrivi in un linguaggio a tua scelta (ad esempio in Perl).
    Trasformi il programma in un CGI quando linki le librerie apposite e quando ti interfacci direttamente con il client.

    Se l'interfaccia la fai in PHP, puoi richiamare da PHP un programma esterno che gira sul server, nel linguaggio che preferisci.
    Ad esempio se hai gia` delle routine in Perl, puoi richiamarle da PHP: in PHP gestisci l'interfaccia, con le routine Perl fai la parte che tu definisci piu` complessa.
    In tal caso il Perl non e` piu` un CGI (non serve piu` richiamare "use CGI" o simile), ma un programma richiamato dal PHP. A tale programma puoi passare dei parametri, e/o in nome (o l'indirizzo) di un file sul filesystem.

    Naturalmente per stampare un file sul server, lo devi avere sul server. Non puoi stamparlo se non ce l'hai.

    E per i controlli su nome del file e tipo, in questa situazione sono da realizzare in PHP.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    12
    Non comprendi quanto scrivo perchè siamo a due livelli di conoscenza molto diversi.
    Ovviamente io sono al livello basso... molto basso...
    Ho capito bene?
    Una pagina es. form.php con l'Action che esegue la pagina controllo.php che fa tutte le verifiche del caso sul file inviato e se tutto ok fa l'upload e poi lancia un programma PERL.

    Se così fosse le variabili da controllo.php al Programma Perl non le perdo?

    Grazie.

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Una pagina es. form.php con l'Action che esegue la pagina controllo.php che fa tutte le verifiche del caso sul file inviato e se tutto ok fa l'upload e poi lancia un programma PERL.
    E` corretto cio` che dici.

    Se così fosse le variabili da controllo.php al Programma Perl non le perdo?
    Il passaggio delle variabili non dovrebbe essere un problema.
    Io non conosco PHP, ma ha sicuro un comando tipo system() o eval() o `` (backquote) per chiamare un programma esterno. [Tra l'altro serve per le varie elaborazioni grafiche che so possibili tramite programmi esterni.]

    Nel comando system (o sim) si possono definire dei parametri, e la stringa di chiamata puo` venir "montata" con i parametri corretti.
    Non so se in questo modo puoi passare un file intero, ma sicuramente puoi passare il nome del file, da richiamare poi dentro il Perl.

    Quindi per prima cosa cerca (in PHP) la funzione che io ho chiamato "system", e vedi
    - come chiamare un programma esterno,
    - come passare i parametri a tale programma,
    - come montare la stringa per chiamare programma con parametri arbitrari.

    Poi ti servira` in Perl un esempio di programma che legge i parametri, ma questi si trovano (chiaramente non tra i CGI, ma in raccolte di programmi Perl).
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188

    Re: Controllare l'Upload con CGI o PERL

    Bene! Ci siamo divertiti con la teoria, ma la pratica purtroppo è tutta un'altra cosa...
    Grazie per le info ma io non ho la capacità e sopratutto il tempo per provare a fare un lavoro del genere, dovrei riscrivere tutto e conoscendo pochino il PHP e pochino il Perl rischierei di perderci dei mesi e poi non risolvere nulla

    Pertanto ritorno sui miei passi e sono determinato a trovare una soluzione integrando lo script Cgi che ho già funzionante.

    DOMANDA:
    Tu saresti in grado di fare le modifiche che mi servono?
    O conosci qualche esperto?

    Per uno esperto sono poi alla fine poche righe di codice... O no?

    Topix
    Il forum e` una discussionie pubblica. Mi permetto pertanto di trascrivere qui la tua domanda (che ho ricevutoin pvt) e rispondere pubblicamente.
    Tra l'altro forse qualcuno che puo` risponderti qui c'e`: io sarei in grado di fare il tutto, se fosse per me, ma dovrei studiare un bel po' di cose, per cui non credo di essere in grado di aiutarti oltre.

    Gli esperti ogni tanto passano di qui. Ma essendo questo un forum un po' "tranquillo", non passano troppo spesso.

    Forse sono poche righe di codice, ma per farle occorre studiarsi tutto il resto del codice gia` presente, e questo non e` una cosa da farsi in pochi minuti.

    Se pensi di aver trovato i punti dove inserire le modifiche, puoi postarli qui e poi vediamo.

    Intanto quel pezzetto di codice postato, legge il nome del file (specificato nel campo immagine) e toglie il primo pezzo, fino all'ultimo slash (se presente); poi lo attacca al path defintito nella variabile e apre il file con quel nome.
    NON fa il controllo se il file esiste gia` (se esiste lo sovrascrive)
    NON fa il controllo dell'estensione
    NON fa l'upload (o comunque non salva il file - probabilmente viene fatto subito dopo)

    per il controllo dell'estensione potresti inserire:
    codice:
    $upload_dir = "../../dovelametto";
    $query = new CGI;
    $filename = $query->param("immagine");
    $filename =~ s/.*[\/\\](.*)/$1/;
    
    $validExt = ".jpg..jpeg.gif.png.";
    $filename =~ /.*(\..*)/;  /* in $1 c'e` l'estensione */
    $estens = $1.".";
    $validExt =~ /($estens)/;
    die 'estensione non riconosciuta' if(!length($1));  /* si puo` ottimizzare, ma non ricordo */
    
    open UPLOADFILE, ">$upload_dir/$filename"; 
    $upload_filehandle = $query->upload("immagine");
    E` da testare, e non solo per gli errori di sintassi. E` un po' ormai che non programmo piu` in Perl, e sono molto arrugginito.

    Per il controllo della lunghezza del file, non si puo` fare fino a che il file non e` scaricato, a meno di non riuscire ad interpretare i primi byte (ma su come interpretarli, devi cheidere in grafica, se sanno cosa e` contenuto nei primi byte di ciascun tipo di file).
    E con il solo controllo dell'estensione, e` facile fregarti (e anche inviarti dei codici maliziosi).
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    12
    Grazie per l'interessamento,
    ora ho un problema con il server locale ma appena risolto vedrò di provare a fare qualcosa...
    Se per caso ti capita di trovare qualche codice pronto fammelo sapere...

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 © 2024 vBulletin Solutions, Inc. All rights reserved.