Indice del forum Olimpo Informatico
I Forum di Zeus News
Leggi la newsletter gratuita - Attiva il Menu compatto
 
 FAQFAQ   CercaCerca   Lista utentiLista utenti   GruppiGruppi   RegistratiRegistrati 
 ProfiloProfilo   Messaggi privatiMessaggi privati   Log inLog in 

    Newsletter RSS Facebook Twitter Contatti Ricerca
* [php] web file upload
Nuovo argomento   Rispondi    Indice del forum -> Linguaggi per Internet
Precedente :: Successivo  
Autore Messaggio
holifay
Dio maturo
Dio maturo


Registrato: 08/03/05 10:48
Messaggi: 2912
Residenza: Milano

MessaggioInviato: 23 Gen 2006 23:24    Oggetto: * [php] web file upload Rispondi citando

Vorrei fare una semplice form per l'invio di qualche dato nel web. Come creare la maschera in modo semplice l'ho trovato, ma per farla "lavorare" cosa mi manca? Embarassed

Citazione:
<html>
<FORM action="http://mio_sito.it/guests/" method="post">
<P>
<LABEL for="username">Username: </LABEL>
<INPUT type="text" id="user"><BR>
<LABEL for="riferimento">Riferimento: </LABEL>
<INPUT type="link" id="rif"><BR>
<LABEL for="file">File allegato: </LABEL>
<INPUT type="file" id="file"><BR>
<LABEL for="email">email (opzionale): </LABEL>
<INPUT type="text" id="email"><BR>
<INPUT type="submit" value="Invia"> <INPUT type="reset">
</P>
</FORM>
</html>


Cioè...io vorrei che mandasse i dati nel sito, invece mi apre solo la pagina "guests" del sito e basta.

Help Smile


L'ultima modifica di holifay il 30 Gen 2006 22:56, modificato 1 volta
Top
Profilo Invia messaggio privato
tas
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 03/10/05 09:59
Messaggi: 166
Residenza: Profondo nord

MessaggioInviato: 24 Gen 2006 00:17    Oggetto: Rispondi citando

Per far apparire i dati nella pagina dovresti utilizzare PHP oppure ASP (tanto per citarne due). Esempio in ASP:
Codice:

<html>
<FORM action="http://mio_sito.it/guests.asp" method="post">
<P>
<LABEL for="username">Username: </LABEL>
<INPUT type="text" id="user"><BR>
<LABEL for="riferimento">Riferimento: </LABEL>
<INPUT type="link" id="rif"><BR>
<LABEL for="file">File allegato: </LABEL>
<INPUT type="file" id="file"><BR>
<LABEL for="email">email (opzionale): </LABEL>
<INPUT type="text" id="email"><BR>
<INPUT type="submit" value="Invia"> <INPUT type="reset">
</P>
</FORM>
</html>

<!-- pagina guest.asp -->
<html>
<p>User: <% = Request.Form("user") %></p>
<p>Riferimento: <% = Request.Form("rif") %></p>
...
</html>

In PHP è analogo, cambia solamente la sintassi per recuperare i valori trasmessi dal form.
Top
Profilo Invia messaggio privato HomePage
holifay
Dio maturo
Dio maturo


Registrato: 08/03/05 10:48
Messaggi: 2912
Residenza: Milano

MessaggioInviato: 24 Gen 2006 13:56    Oggetto: Rispondi citando

Grazie Tas Smile

Quindi se ho ben capito mi serve una specie di "collettore" dall'altra parte appositamente programmato per ricevere i dati ed anche i file allegati. Da scrivere in asp o php o CGI giusto?

Avrei qualche chiarimento utonto:
  • Devo sapere che linguaggio è accettato dal server. Lo devo chiedere al provider o asp e php sono sempre supportati?
  • C'è qualche esempio già fatto da copia/incollare (volevo dire studiare..) dopo opprtuni peggioramenti personali?
  • Posso provarlo in locale in qualche modo (semplice)?
  • Cosa vuol dire il messaggio: "il server non accetta il metodo post"?
  • Come posso inviare dati se il server richiede autenticazione? Mi spiego: per accedere io ho provato: ftp://username:password@mio_sito.it e accede alla cartella. Ma se scrivo una form così tutti conosceranno leggendo l'HTML la username e password e la cosa mi piace poco

Grazie per la pazienza Smile
Top
Profilo Invia messaggio privato
holifay
Dio maturo
Dio maturo


Registrato: 08/03/05 10:48
Messaggi: 2912
Residenza: Milano

MessaggioInviato: 24 Gen 2006 15:31    Oggetto: Rispondi citando

ne aggiungo un'altra di domanda Sad

Qualcuno mi sa dire cosa significa?
Citazione:
Warning: copy(http://miosito.it/upload/prova.txt): failed to open stream: HTTP wrapper does not support writeable connections. in /home/sifree/public_html/miosito/do_upload.php on line 9
Couldn't copy file.


Sad Sad Sad
Top
Profilo Invia messaggio privato
rebelia
Dio maturo
Dio maturo


Registrato: 17/07/03 09:22
Messaggi: 7987

MessaggioInviato: 24 Gen 2006 16:02    Oggetto: Rispondi citando

se quel che ti serve e' un form per l'invio di mail tipo quello che ho piazzato nel mio sito, ti posso passare il codice che ho trovato io su aruba:

Codice:

<!--METADATA TYPE="typelib" UUID="CD000000-8B95-11D1-82DB-00C04FB1625D" NAME="CDO for Windows 2000 Type Library" -->
<!--METADATA TYPE="typelib" UUID="00000205-0000-0010-8000-00AA006D2EA4" NAME="ADODB Type Library" -->
<%
'============Linkbruttocane su specifiche MSDN================
'*   il corpo finale del messaggio contiene tutti i campi    *
'*   inseriti nella pagina html, in pratica puoi mettere     *
'*   tutti i campi che ti servono nel modulo di invio senza  *
'*   fare altre configurazioni aggiuntive.                   * 
'=============================================================

DIM corpoMessaggio, numeroCampi, invioA, invioDa, nomeDominio, indirizzoIp, modulo, browserSistemaOperativo

   '* voce da modificare con il proprio indirizzo email
   
invioA =  "morena@bymb.it"

   '* voce da modificare con un indirizzo email che funga da mittente:
   '* in caso di errore riceverete notifica a questo indirizzo un MAILER-DAEMON
   '* dato che cdosys supporta questa notifica
      
invioDa =  "morena@bymb.it"

'------------fine modifiche necessarie------------------

nomeDominio             = Request.ServerVariables("HTTP_HOST")
indirizzoIp               = Request.ServerVariables("REMOTE_ADDR")
modulo                  = Request.ServerVariables("HTTP_REFERER")
browserSistemaOperativo      = Request.ServerVariables("HTTP_USER_AGENT")

   '*rilevo i campi del form
   
FOR numeroCampi = 1 TO (Request.Form.Count() - 1)
   IF NOT Request.Form(numeroCampi) = "" THEN
      corpoMessaggio = corpoMessaggio & vbCrLf & Request.Form.Key(numeroCampi) & " = " & Trim(Request.Form(numeroCampi))
   END IF
NEXT

   '* creo gli oggetti cdosys sul server e li gestisco
   
DIM iMsg, Flds, iConf

Set iMsg = CreateObject("CDO.Message")
Set iConf = CreateObject("CDO.Configuration")
Set Flds = iConf.Fields

Flds(cdoSendUsingMethod) = cdoSendUsingPort
Flds(cdoSMTPServer) = "smtp.aruba.it"
Flds(cdoSMTPServerPort) = 25
Flds(cdoSMTPAuthenticate) = cdoAnonymous ' 0
Flds.Update

With iMsg
   Set .Configuration = iConf
   .To = invioA
   .From = Request.Form("email")
   .Sender = invioDa
   .Subject = "Contatto dal dominio " & nomeDominio
   .TextBody = "Questi i dati inseriti nel modulo presente alla pagina " & modulo & " da utente con indirizzo IP " & indirizzoIp & "  browser e sistema operativo " & browserSistemaOperativo  & vbCrLf & corpoMessaggio & ""
   .Send
End With
%>
<script>
document.location.replace('grazie.asp');
</script>


e' un file asp e si chiama formcdosys.asp

nella pagina invece ho inserito:

Codice:

<form action="formcdosys.asp" method="post" id="formcontatti" onsubmit="MM_validateForm('email','','RisEmail'); return document.MM_returnValue">
<fieldset>
<label class="etichette" for="cognomenome">[ n ] <strong>Cognome e Nome</strong><br /><input name="cognomenome" id="cognomenome" title="Cognome e nome" type="text" size="30" tabindex="1" accesskey="n" /></label><br /><br />
<label class="etichette" for="email">[ e ] <strong>E-mail *</strong><br /><input name="email" id="email" title="E-mail" type="text" size="30" maxlength="50" tabindex="2"  accesskey="e" /></label><br /><br />
<label class="etichette" for="messaggio">[ m ] <strong>Messaggio</strong><br /><textarea name="messaggio" id="messaggio" title="Messaggio" cols="30" rows="10" tabindex="3"  accesskey="m">Scrivimi</textarea></label><br /><br />            
<input class="pulsanti" type="submit" id="invia" value="    [ i ] Invia    " name="invia" tabindex="4" accesskey="i" />
<input class="pulsanti" type="reset" id="cancella" value=" [ c ] Cancella " name="cancella" tabindex="5" accesskey="c" />
</fieldset>
</form>


credo sia tutto quel che ti serve (taaaaaaas! 'iut! conferma plz)
Top
Profilo Invia messaggio privato HomePage
tas
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 03/10/05 09:59
Messaggi: 166
Residenza: Profondo nord

MessaggioInviato: 24 Gen 2006 16:10    Oggetto: Rispondi citando

Dipende da quello che vuoi fare con questa pagina, dal tuo esempio non mi è molto chiaro. In ogni caso la pagina che riceve i dati (che a volte è la stessa pagina che contiene il form) deve eseguire delle operazioni sul server, quindi è necessario un linguaggio come PHP, ASP e affini.

In risposta ai tuoi dubbi:
  • il linguaggio supportato dal server lo puoi sapere chiedendolo al provider
  • dipende da quello che vuoi fare...
  • se decidi di usare ASP devi installare IIS (dal pannello di controllo di WinXP Pro) oppure PWS (Personal Web Server, che non so dove lo puoi trovare!). Con gli altri linguaggi il discorso è analogo, devi installare in locale un web server che supporti tale linguaggio (Apache nel caso di PHP). Non sempre in locale riesci a ricreare la situazione come nel sito del provider, quindi le cose che funzionano bene sul tuo PC potrebbero non funzionare altrettanto bene sul sito...
  • evidentemente il tuo provider ha disabilitato questa opzione
  • forse stai seguendo una strada non proprio ortodossa; vorresti forse inviare dei file sul tuo spazio ftp direttamente dal sito?
  • sul messaggio di warning: la tecnica che hai utilizzato per scrivere il file non è consentita in quel percorso (per esempio i siti in Aruba possono scrivere solo dentro alla cartella "/public")
Top
Profilo Invia messaggio privato HomePage
holifay
Dio maturo
Dio maturo


Registrato: 08/03/05 10:48
Messaggi: 2912
Residenza: Milano

MessaggioInviato: 24 Gen 2006 16:11    Oggetto: Rispondi citando

Grazie Reb Smile

Devo però trovare qualcosa in php (così mi hanno detto) che possa anche inviare dei file. In realtà la form l'ho preparata e ho anche copiato il codice php (da mettere sul server) da uno già fatto, ma mi da appunto quell'errore di cui sopra.

Forse devo impostare qualche permesso di scrittura/esecuzione, almeno così capisco Rolling Eyes
Top
Profilo Invia messaggio privato
holifay
Dio maturo
Dio maturo


Registrato: 08/03/05 10:48
Messaggi: 2912
Residenza: Milano

MessaggioInviato: 24 Gen 2006 16:55    Oggetto: Rispondi citando

Ehm , scusa Tas ho letto solo adesso che avevi risposto subito dopo Reb.

Allora, ho preso uno script php per l'upload dei file e l'ho messo sul server (dimenticati il percorso ftp.. adesso va su http). Lo script upload.php si trova nella cartella /upload/ e dovrebbe inviare i file nella sottocartella /upload/files/

la form html che richiama lo script è invece nella root

Forse il messaggio significa che devo impostare qualche permesso? Io ho già dato il 0777 a /upload/ a /files/ e allo script php.
Top
Profilo Invia messaggio privato
tas
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 03/10/05 09:59
Messaggi: 166
Residenza: Profondo nord

MessaggioInviato: 24 Gen 2006 22:33    Oggetto: Rispondi citando

Forse il tuo provider non ti permette di scrivere al di fuori di certe cartelle, come fa Aruba. Qual è il tuo provider?
Top
Profilo Invia messaggio privato HomePage
holifay
Dio maturo
Dio maturo


Registrato: 08/03/05 10:48
Messaggi: 2912
Residenza: Milano

MessaggioInviato: 24 Gen 2006 22:57    Oggetto: Rispondi citando

tas ha scritto:
Forse il tuo provider non ti permette di scrivere al di fuori di certe cartelle, come fa <a href="http://clk.tradedoubler.com/click?p=3295&a=441108&g=16466" target="_blank">Aruba</a>. Qual è il tuo provider?


http://www.sifree.net/

Rolling Eyes
Top
Profilo Invia messaggio privato
tas
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 03/10/05 09:59
Messaggi: 166
Residenza: Profondo nord

MessaggioInviato: 25 Gen 2006 00:33    Oggetto: Rispondi citando

Hanno un sito che definire "scarno" è dir poco... Sad
Top
Profilo Invia messaggio privato HomePage
rebelia
Dio maturo
Dio maturo


Registrato: 17/07/03 09:22
Messaggi: 7987

MessaggioInviato: 25 Gen 2006 01:33    Oggetto: Rispondi citando

hai visto di peggio, lo so Mr. Green Wink
Top
Profilo Invia messaggio privato HomePage
atigra
Semidio
Semidio


Registrato: 21/09/05 11:14
Messaggi: 249

MessaggioInviato: 25 Gen 2006 17:00    Oggetto: Rispondi citando

Non so se ti può tornare utile, comunque in un sito che ho fatto tempo fa, dovevo dare la possibilità agli utenti di inserire nello spazio server dei file. Non essendo per niente esperto in creazione di script e affini, ho trovato parecchie soluzioni, quella più completa e che mi soddisfaceva di più per le esigenze che avevo, era usare l'ATM, Advanced Transfer Manager. E' un'applicazione/script che va installata nel tuo spazio sul server, mi pare necessiti di php e non mi sembra necessitasse di spazio database (tipo MySql).
Io usavo Aruba e avevo scoperto che l'upload di file da "esterno" (non da ftp usando username e passw) aveva un limite di 80 Mb imposto da Aruba stesso.
Su Aruba (spazio windows), l'ATM va inserito nella cartella public in quanto è l'unica che ha i permessi di scrittura settati (in altre cartelle non riusciresti a fare nessun upload). Questo sistema ha una interfaccia grafica molto semplice e completo, puoi obbligare o no gli utenti a registrarsi per fare gli upload, organizzare il materiale in cartelle, ecc. Si può anche obbligare gli utenti ad essere registrati per fare il download del materiale inserito.
Qui trovi il sito di chi ha creato l'applicazione da cui è possibile scaricare anche l'ultima versione.

Ciao!
Top
Profilo Invia messaggio privato
holifay
Dio maturo
Dio maturo


Registrato: 08/03/05 10:48
Messaggi: 2912
Residenza: Milano

MessaggioInviato: 25 Gen 2006 20:30    Oggetto: Rispondi citando

lo sapevo che andavamo nel difficile (per me Wink)

Se lo script cerca di caricare nella cartella /home/sifree/public_html/miosito/upload questo non vuol dire che la cartella è appunto "public" come quella di Aruba? Rolling Eyes

In assenza di nuove idee (non mie, io le ho già esaurite un paio di post fa Mr. Green) proverò a guardare l'applicazione che consiglia Atigra.
Top
Profilo Invia messaggio privato
atigra
Semidio
Semidio


Registrato: 21/09/05 11:14
Messaggi: 249

MessaggioInviato: 25 Gen 2006 20:44    Oggetto: Rispondi citando

Beh... anche l'ATM di cui parlavo qualche post sopra vuole la famosa cartella del tipo "public" di aruba (cioè con i permessi di scrittura).

ciao!
Top
Profilo Invia messaggio privato
holifay
Dio maturo
Dio maturo


Registrato: 08/03/05 10:48
Messaggi: 2912
Residenza: Milano

MessaggioInviato: 30 Gen 2006 15:40    Oggetto: Rispondi citando

Allora ci sono più o meno riuscita Smile
Il nocciolo della form che ho usato è questo:
Citazione:

<html>
<body>
<form action="upload.php" method="post" ENCTYPE="multipart/form-data">
File to upload:<input type="file" size=40 name="file"><br>
<input type="submit" value="upload">
</form>
</body>
</html>


mentre lo scritto upload.php è questo:
Citazione:
<?
$uploaddir="/home/miosito/public_html/upload/file/";
copy($file, $uploaddir.$file_name);
unlink($file);
?>


Adesso vorrei aggiungere un controllo lato server sulla grandezza del file e sulla estensione, abilitandone solo alcune. Ho provato con direttive scritte in un file .htaccess ma le ignora, dunque ho bisogno di metterle nello script.
C'è qualche modo semplice modificando quello che sto usando? Ho provato a guardare qualche script di esempio, ma sono abbastanza più complicati Sad
Top
Profilo Invia messaggio privato
horus
Macchinista
Macchinista


Registrato: 22/03/05 10:48
Messaggi: 2554
Residenza: Sirio e dintorni

MessaggioInviato: 30 Gen 2006 17:19    Oggetto: Rispondi citando

Potresti provare ad usare la funzione filesize di php.
Top
Profilo Invia messaggio privato
holifay
Dio maturo
Dio maturo


Registrato: 08/03/05 10:48
Messaggi: 2912
Residenza: Milano

MessaggioInviato: 30 Gen 2006 19:02    Oggetto: Rispondi citando

horus ha scritto:
Potresti provare ad usare la funzione filesize di php.


adesso la studio un po'...
Non hoi capito se può fare il controllo solo dopo che il file è stato uploadato o anche prima. Se lo fa solo dopo mi sa che il mio script non è più utilizzabile.

Per le estensioni invece? Ho cercato una funzione specifica ma non mi sembra di averla vista. Grazie per l'aiuto.
Top
Profilo Invia messaggio privato
horus
Macchinista
Macchinista


Registrato: 22/03/05 10:48
Messaggi: 2554
Residenza: Sirio e dintorni

MessaggioInviato: 31 Gen 2006 10:32    Oggetto: Rispondi citando

holifay ha scritto:
Non hoi capito se può fare il controllo solo dopo che il file è stato uploadato o anche prima. Se lo fa solo dopo mi sa che il mio script non è più utilizzabile.

Il controllo è lato server, quando invii la richiesta il file viene inviato al server e posizionato in una cartella temporanea dal quale tu poi lo sposti all'interno della tua con il comado copy, se non lo sposti allora il file semplicemente verrà cancellato automaticamente.

holifay ha scritto:
Per le estensioni invece? Ho cercato una funzione specifica ma non mi sembra di averla vista.

Non so cosa intendi per funzione specifica, qui ci sono un po' di informazioni su come gestire gli upload in php.

In alternativa puoi prendere l'estensione dal nome del file con qualcosa tipo:

Codice:
$ext = substr($file,-strrpos($file,'.')+1);
Top
Profilo Invia messaggio privato
holifay
Dio maturo
Dio maturo


Registrato: 08/03/05 10:48
Messaggi: 2912
Residenza: Milano

MessaggioInviato: 02 Feb 2006 18:37    Oggetto: Rispondi

Allora, grazie dei link e delle dritte. Ho provato un po' e ho realizzato (scopiazzando abbastanza) questo script che copio qui nel caso possa servire a qualcun altro. Permette di impostare:
- la dimensione massima dei file
- la loro estensione
- fa un controllo per evitare la sovrascrittura
- controlla che la email abbia la sintassi esatta
- invia una email di notifica a chi ha inviato il file e al proprietario del sito

La form da mettere in un file html nel proprio sito è questa:
Citazione:

<FORM action=upload/upload.php method=post encType=multipart/form-data>
<P>Your Name:<BR><INPUT name=realname></P>
<P>Email Address:<BR><INPUT size=30 name=email></P>
<P>File to upload:<BR><INPUT type=file size=60 name=file></P><INPUT type=hidden value=500000 name=MAX_FILE_SIZE>
<P><INPUT type=submit value="Upload File" name=submit></P>

poi si crea una cartella "upload" e la sottocartella "files". Nella cartella upload si mette questo script, chiamato upload.php:
Citazione:
<?
$extlimit = "yes";
$limitedext = array(".zip",".ace",".rar");
$sizelimit = "yes";
$sizebytes = "500000";
$absolute_path = "/home/username/public_html/nome_sito/upload/files/";
$thankspage = "http://www.mio_sito.it/thanks.html";
$myemail="mia@mail";
$upmessage="$realname, grazie per avermi inviato il tuo file";
$mymessage="$realname [ $email ] ti ha inviato un file chiamato $file_name\";

if ($file != "") {
$x = ereg("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,3}$",$email);
if($x==0) {
die("Devi specificare un indirizzo email valido");
}
$ext = strrchr($file_name,'.');
if (($extlimit == "yes") && (!in_array($ext,$limitedext))) {
die("Il file non ha l'estensione corretta");
}
if (($sizelimit == "yes") && ($file_size > $sizebytes)) {
die("Le dimensioni del file sono eccessive. Il limite massimo è di $sizebytes bytes");
}
if (file_exists("$absolute_path/$file_name")) {
die("Il file è già stato inviato");
}
copy($file, "$absolute_path/$file_name") or die("Il file che hai selezionato non può essere copiato sul server");
unlink($file);
}
else {
die("Devi selezionare un file");
}
Header("Location: $thankspage");
mail("$myemail", "Uploaded file", "$mymessage");
mail("$email", "Uploaded file", "$upmessage");
?>


I permessi da impostare sono "write" ed "execute" per le due cartelle "upload" e "files". Almeno, questi sono quelli che ho impostato io. Correggetemi pure se ho sbagliato qualcosa Smile
Top
Profilo Invia messaggio privato
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> Linguaggi per Internet Tutti i fusi orari sono GMT + 2 ore
Pagina 1 di 1

 
Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi