Italian PHP per download e upload

GIS

Well-Known Member
Licensed User
ciao, l'unico dubbio che ho è sul ip del server, perché in altervista non me lo dà. Mi da il nome host. Qualcuno sa cosa devo fare? grazie

Vediamo quindi il codice commentato per Caricare file su server remoto via ftp e per Scaricare file da server remoto in locale via ftp:
PHP:
<?php
$ftp_server="xxx.xxx.xxx.xxx"; //esempio indirizzo ip del sever
$ftp_username="username";
$ftp_password="password";
// stabilisco la connessione al server ftp
$ftp_connessione = ftp_connect($ftp_server);

// effetto login sul server
$login = ftp_login($ftp_connessione, $ftp_username, $ftp_password);

// controllo se la connessione ha avuto buon fine
if(!$ftp_connessione || !$login){
echo "Connessione fallita!";
} else {
// se connessione ha avuto buon fine faccio UPLOAD del file
$file_da_caricare = "folder_locale/nomefile.ext";
$dove_carire = "folder_ftp/nomefile.ext";

$upload = ftp_put($ftp_connessione, $dove_carire, $file_da_caricare, FTP_BINARY);

// controllo se upload andato a buon fine
if (!$upload) {
echo "Si è verificato un errore durante il caricamento!";
} else {
echo "Upload avvenuto con successo";
}

//se invece voglio effettuare un DOWNLOAD:
$file_da_scaricare = "folder_ftp/nomefile.ext";
$dove_scaricare = "folder_locale/nomefile.ext";

$download = ftp_get($ftp_connessione, $dove_scaricare, $file_da_scaricare, FTP_BINARY);

// controllo se download andato a buon fine
if (!$download) {
echo "Si è verificato un errore durante il download!<br>";
} else {
echo "Download avvenuto con successo<br>";
}

// chiudo connessione FTP
ftp_quit($ftp_connessione);
}
?>



utilizzando la libbreria FTP_AUTO ho trovato questo in b4a per upload mentre per il download si utilizza il comando DownLoadFile ricordarsi dei permessi:

B4X:
'ftp was previously initialized and its event name was set to ftp:
'ftp.Initialize("ftp", "your.server", 21, "user", "password")
Dim sf As Object = ftp.UploadFile(File.DirAssets, "somefile", False, "/somefile")
Wait For (sf) ftp_UploadCompleted (ServerPath As String, Success As Boolean)
If Success Then
   Log("file was uploaded successfully")
Else
   Log("Error uploading file")
End If

cmq se qualcuno vuole aggiungere in merito al quisito che ho posto all'inizio. grazie
 
Last edited:

sirjo66

Well-Known Member
Licensed User
Longtime User
e perché vuoi usare l'indirizzo ip anziché il nome host ??
 

GIS

Well-Known Member
Licensed User
non è che voglio usare l'ip è che nell'esempio c'è. Perciò chiedevo se al posto dell'ip metto il nome host è la stessa cosa? o si deve usare un'altro comando? successivamente ho trovato la stessa cosa in b4a. Ho scritto il tutto sperando che a qualcuno gli sia utile.
 

GIS

Well-Known Member
Licensed User
ok grazie. È un argomento di cui non mi ero mai interessato.
 

sirjo66

Well-Known Member
Licensed User
Longtime User
Se tu su di un browser digiti www.b4x.com oppure digiti http://67.227.218.133 vedi che arrivi alla stessa pagina.
www.b4x.com è il dominio, mentre 67.227.218.133 è l'indirizzo al quale corrisponde il dominio.
Se un domani il sito www.b4x.com si sposta su di un altro server (ad esempio perchè si cambia gestore), l'indirizzo IP cambierà, ma il nome del dominio resterà uguale e tu sarai comunque in grado di raggiungere il sito tramite il nome del dominio.
Internet però lavora generalmente tramite indirizzo IP per trovare una determinata pagina (o un determinato server), per cui esistono i famosi DNS (di cui LucaMs ti ha dato un link per maggiori informazioni), che servono proprio per "risolvere" il nome del dominio e trasformarlo in IP.
Il tuo programma quindi chiamerà il DNS il quale risponderà con l'indirizzo IP e poi tutte le comunicazioni avverranno tramite IP.
Questo ovviamente tutto in automatico.
I DNS ovviamente funzionano per i server pubblici, per cui se devi collegarti ad un server che è presente nella tua rete LAN (e non è pubblico su internet) dovrai usare l'indirizzo IP locale, ad esempio 192.168.1.100

Spero di essere stato chiaro, altrimenti chiedi pure
 

GIS

Well-Known Member
Licensed User
tutto chiaro mi state dando più info di quelle che ho chiesto almeno mi faccio un po di cultura. Sto lavorando ad un app che faro usare ai miei colleghi di lavoro, la sto usando come studio visto che non mi ero mai cimentato in app e devo dire che mi si è aperto un mondo. Avendo solo 1/3 ore al giorno da dedicare la finirò con tempi bibblici. Cmq sono arrivato a raccogliere tutti gli elementi che mi servivano per completarla, dopo sms e-mail in automatico mi mancava solo la comunicazione col server che proverò appena possibile e speriamo bene. Grazie a tutti del supporto
ps non sarà facile liberarmi di me
 

sirjo66

Well-Known Member
Licensed User
Longtime User
Grazie a tutti del supporto
ps non sarà facile liberarmi di me

Non preoccuparti, siamo qui per questo

Quando la risposta ti è utile e/o interessante ricordati di cliccare sulla destra sulla scritta "Like"
 

udg

Expert
Licensed User
Longtime User
finirò con tempi bibblici
Su questo l'autorità indiscussa è @LucaMs ehehe
Per pedanteria e precisione, il dominio propriamente detto è b4x.com; www indica il protocollo applicato al dominio e quindi potrebbe essere sostituito da altri protocolli di rete come, ad esempio ftp.
Un giochino interessante è quello di puntare ad un server che svolga il ruolo di dispatcher, ritornando il vero indirizzo IP da utilizzare. In sostanza, nel codice, in apertura, si invia un messaggio ad uno specifico IP (il dispatcher) identificando il richiedente (es. un codice per l'app oppure un codice per il gruppo di utenti, come potrebbe essere un'azienda). Il dispatcher troverà in una sua tabella i parametri ricevuti (codice app/azienda) e risponderà con l'IP da utilizzare per le successive comunicazioni (anche evntuali credenziali se è il caso).
In quesrto modo nell'app, pur disassemblata, non si troverà traccia del vero server che sostiene il servizio ma solo dell'IP del dispatcher.
Un altro benefit è la possibilità di indirizzare il traffico generato dall'app a server diversi in funzione dell'utilizzatore (es. per aree geografiche) o in funzione della quantità di traffico registrato al momento.
 

LucaMs

Expert
Licensed User
Longtime User

udg

Expert
Licensed User
Longtime User
Per come l'ho pensato io, lo smistatore ritornerebbe direttamente l'IP, in quanto svolge anche un ruolo da DNS, se vuoi.
Ad esempio, fino a ieri per l'app 176 oppure per l'azienda 41 che utilizza una certa app, ritornava l'IP 110.23.24.77, poi per ragioni misteriose il responsabile IT decide di spostare tutto su un altro server con indirizzo 108.11.22.33. A noi basta cambiare il valore nella tabella dello smistatore da 110.23.24.77 a 108.11.22.33 senza nulla modificare a livello di app.
Così non abbiamo neanche la necessità di abbinare ad ogni IP utilizzato un dominio (risparmiando qualche euro all'anno).
 

GIS

Well-Known Member
Licensed User
B4X:
sub process_globals
    dim ftp as FTP
END SUB


ftp.Initializa ("ftp", nome host,21,nome utente, password)

ftp.UpLoadFile(File.DirRootExternal, "/ppp/ppp.txt", False, "/dirserver")


a me sembra giusta ma non funge. Qualcuno ha idea? grazie
 

udg

Expert
Licensed User
Longtime User
ftp.Initializa
non ti segnala errore su questo? La porta è 21 oppure è stata modificata?
Hai i permessi per DirRootExternal?
/ppp/ppp.txt non dovrebbe essere solo ppp.txt mentre la dir essere aggiunta a /dirserver come in /dirserver/ppp?

La risposta del server arriva nell'evento UploadCompleted e mentre "lavora" viene sollevato più volte l'evento UploadProgress
 

GIS

Well-Known Member
Licensed User
Non da nessun tipo di errore. i dati sono corretti porta 21.
Hai i permessi per DirRootExternal?
questo nn ricordo ma cmq la usa per modificare file e funziona.
/ppp/ppp.txt non dovrebbe essere solo ppp.txt mentre la dir essere aggiunta a /dirserver come in /dirserver/ppp?
il file si trova in una cartella della DirRootExternal percio ho messo /ppp/ppp.txt mentre nel server ho messo solo la cartella. Questo forse posso vedere mettendo come dir server la cartella e il nome del file.
La risposta del server arriva nell'evento UploadCompleted e mentre "lavora" viene sollevato più volte l'evento UploadProgress
qui devo vedere ho scritto una sub ma adesso non ricordo stasera a casa vedo.
 

GIS

Well-Known Member
Licensed User
ciao, ci sono riuscito. Ho messo i permessi
WRITE_EXTERNAL_STORAGE e READ.
il codice leggendo nei post l'ho cambiato.
B4X:
ftp.UpLoadFile(File.DirRootExternal, "/ppp/ppp.txt", True, "dirserver/ppp.txt")
L'unico problema che ho adesso che funziona solo con la connessione dati e non con wifi. Ovviamente ho messo i permessi INTERNET, ACCESS_WIFI_STATE E ACCESS_NETWORK_STATE

Se ai suggerimenti per wifi.....
 

GIS

Well-Known Member
Licensed User
risolto... per wifi:
B4X:
ftp.Initilize ( .......
ftp.PassiveMode = True
con PassiveMode si risolve il problema della wifi. Spero che con la mia ricerca possa essere utile....
 
Top