Precedente :: Successivo |
Autore |
Messaggio |
holifay Dio maturo


Registrato: 08/03/05 10:48 Messaggi: 2912 Residenza: Milano
|
Inviato: 23 Gen 2006 23:24 Oggetto: * [php] web file upload |
|
|
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?
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 
L'ultima modifica di holifay il 30 Gen 2006 22:56, modificato 1 volta |
|
Top |
|
 |
tas Eroe in grazia degli dei


Registrato: 03/10/05 09:59 Messaggi: 166 Residenza: Profondo nord
|
Inviato: 24 Gen 2006 00:17 Oggetto: |
|
|
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 |
|
 |
holifay Dio maturo


Registrato: 08/03/05 10:48 Messaggi: 2912 Residenza: Milano
|
Inviato: 24 Gen 2006 13:56 Oggetto: |
|
|
Grazie Tas
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  |
|
Top |
|
 |
holifay Dio maturo


Registrato: 08/03/05 10:48 Messaggi: 2912 Residenza: Milano
|
Inviato: 24 Gen 2006 15:31 Oggetto: |
|
|
ne aggiungo un'altra di domanda
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. |
 |
|
Top |
|
 |
rebelia Dio maturo


Registrato: 17/07/03 09:22 Messaggi: 7987
|
Inviato: 24 Gen 2006 16:02 Oggetto: |
|
|
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 |
|
 |
tas Eroe in grazia degli dei


Registrato: 03/10/05 09:59 Messaggi: 166 Residenza: Profondo nord
|
Inviato: 24 Gen 2006 16:10 Oggetto: |
|
|
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 |
|
 |
holifay Dio maturo


Registrato: 08/03/05 10:48 Messaggi: 2912 Residenza: Milano
|
Inviato: 24 Gen 2006 16:11 Oggetto: |
|
|
Grazie Reb
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  |
|
Top |
|
 |
holifay Dio maturo


Registrato: 08/03/05 10:48 Messaggi: 2912 Residenza: Milano
|
Inviato: 24 Gen 2006 16:55 Oggetto: |
|
|
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 |
|
 |
tas Eroe in grazia degli dei


Registrato: 03/10/05 09:59 Messaggi: 166 Residenza: Profondo nord
|
Inviato: 24 Gen 2006 22:33 Oggetto: |
|
|
Forse il tuo provider non ti permette di scrivere al di fuori di certe cartelle, come fa Aruba. Qual è il tuo provider? |
|
Top |
|
 |
holifay Dio maturo


Registrato: 08/03/05 10:48 Messaggi: 2912 Residenza: Milano
|
Inviato: 24 Gen 2006 22:57 Oggetto: |
|
|
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/
 |
|
Top |
|
 |
tas Eroe in grazia degli dei


Registrato: 03/10/05 09:59 Messaggi: 166 Residenza: Profondo nord
|
Inviato: 25 Gen 2006 00:33 Oggetto: |
|
|
Hanno un sito che definire "scarno" è dir poco...  |
|
Top |
|
 |
rebelia Dio maturo


Registrato: 17/07/03 09:22 Messaggi: 7987
|
Inviato: 25 Gen 2006 01:33 Oggetto: |
|
|
hai visto di peggio, lo so  |
|
Top |
|
 |
atigra Semidio

Registrato: 21/09/05 11:14 Messaggi: 249
|
Inviato: 25 Gen 2006 17:00 Oggetto: |
|
|
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 |
|
 |
holifay Dio maturo


Registrato: 08/03/05 10:48 Messaggi: 2912 Residenza: Milano
|
Inviato: 25 Gen 2006 20:30 Oggetto: |
|
|
lo sapevo che andavamo nel difficile (per me )
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?
In assenza di nuove idee (non mie, io le ho già esaurite un paio di post fa ) proverò a guardare l'applicazione che consiglia Atigra. |
|
Top |
|
 |
atigra Semidio

Registrato: 21/09/05 11:14 Messaggi: 249
|
Inviato: 25 Gen 2006 20:44 Oggetto: |
|
|
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 |
|
 |
holifay Dio maturo


Registrato: 08/03/05 10:48 Messaggi: 2912 Residenza: Milano
|
Inviato: 30 Gen 2006 15:40 Oggetto: |
|
|
Allora ci sono più o meno riuscita
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  |
|
Top |
|
 |
horus Macchinista


Registrato: 22/03/05 10:48 Messaggi: 2554 Residenza: Sirio e dintorni
|
Inviato: 30 Gen 2006 17:19 Oggetto: |
|
|
Potresti provare ad usare la funzione filesize di php. |
|
Top |
|
 |
holifay Dio maturo


Registrato: 08/03/05 10:48 Messaggi: 2912 Residenza: Milano
|
Inviato: 30 Gen 2006 19:02 Oggetto: |
|
|
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 |
|
 |
horus Macchinista


Registrato: 22/03/05 10:48 Messaggi: 2554 Residenza: Sirio e dintorni
|
Inviato: 31 Gen 2006 10:32 Oggetto: |
|
|
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 |
|
 |
holifay Dio maturo


Registrato: 08/03/05 10:48 Messaggi: 2912 Residenza: Milano
|
Inviato: 02 Feb 2006 18:37 Oggetto: |
|
|
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  |
|
Top |
|
 |
|