Leggere file tramite FTP/TLS

egialma

Nuovo Utente
3 Ott 2012
29
0
0
Ciao a tutti, ho un piccolo problema.

Fino a due giorni fa funzionava così.

Da una pagina php leggevo un file excel situato su un server remoto tramite FTP con questo semplicissimo codice


PHP:
$File = 'ftp://user:[email protected]/Dir1/file.xls';
if (is_readable($File)) {
.....
.....

leggevo il file e stampavo le informazioni

....
....
}

Poi l'amministratore del server remoto Host1 ha deciso di implementare la funzione SSL/TLS esplicita e per me sono cominciati i guai.

Non riesco più ad accedere al file, sono due giorni che cerco in internet ma non trovo nulla che sia per me comprensibile.

Ho provato con ftps, ma non funziona

Ho provato con ftp_ssl_connection, ma mi esce la dicitura funzione sconosciuta; Ho cercato di capire come attivarla, ma da quello che ho recuperato sembra che sia tutto impostato correttamente o così credo

Ho provato con varie classi come SFTP.php e con FTPCon.php, ma non funzionano: la prima mi da errore, mentre la seconda impalla il web.

Ho provato anche con cURL, ma nulla da fare.

Qualcuno potrebbe aiutarmi, sono aperto a nuove soluzioni o a rivedere le configurazioni già provate.

Grazie mille
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
Hai abilitato il supporto openssl aggiungendo l'estensione nel php.ini?

Cioè
Codice:
extension=php_openssl.dll
 

egialma

Nuovo Utente
3 Ott 2012
29
0
0
questo è il messaggio di errore che ricevo usando cURL

Warning: ftp_login(): SSL/TLS required on the control channel in

ho cercato ma sinceramente non so neppure cosa devo cercare
 

egialma

Nuovo Utente
3 Ott 2012
29
0
0
Si scusa, ho sbagliato a trascrivere il comando sul forum ma non nel php...
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
Si scusa, ho sbagliato a trascrivere il comando sul forum ma non nel php...
Allora ricapitoliamo:
Hai l'estensione openssl in locale e l'hai inserita correttamente nel php.ini (riavviando eventualmente apache) e la configurazione della connessione è tutta corretta, quindi 'dovrebbe' andare.



Proviamo soluzioni alternative, hai provato ad accedere al file in questo modo, quindi aggiungendo la porta e ftps?
PHP:
$File = "ftps://$user:[email protected]$server:$porta/Dir1/file.xls";
(non sono sicuro di questo metodo, cioè se si possa fare anche con questo protocollo comunque come dice il gatto saggio al massimo non worka)
 

egialma

Nuovo Utente
3 Ott 2012
29
0
0
Grazie per l'interessamento.

Ho provato a riscrivere il comando ftps, nelle prove precedenti, avevo omesso la porta, poiché avevo letto da qualche parte che se la porta era la 21 cioè quella di default si poteva tralasciare.

Comunque riscrivendo il comando come de te indicato, non funzionava, cioè la pagina web si bloccava e rimaneva in clessidra.

Ho provato e forse avrei dovuto farlo prima, creare una pagina ad doc, fino adesso ho tentato di inserire il nuovo codice all'interno del vecchio codice funzionante.


PHP:
        $File = 'ftps://user:[email protected]:21/Dir1/file.xls';
	if (is_readable($File)) {
		echo "connesso";
	}else{
		echo "non connesso";
	}

Con mio stupore è apparsa la scritta "connesso", ma è attendibile?

Poi ho cercato di introdurre il codice per leggere il file excel, nel mio programma funzionante facevo ricorso a phpExcelReader.


PHP:
        date_default_timezone_set('Europe/Rome'); // imposto il time zone
	$Today =(@date('Y-m-d'));
	$FileBaseline = 'ftps://egialma:[email protected]:21/SiteDevNO/NTW&WBS_Baseline.xls';
	if (is_readable($FileBaseline)) {
		echo "connesso";
		echo "<br/>";
		require_once 'class/phpExcelReader/Excel/reader.php'; // Richiamiamo la classe 
		$data = new Spreadsheet_Excel_Reader();
		$data->read($File); // Inseriamo il percorso del file che vogliamo leggere
		$Campo1 = $data->sheets[3]['cells'][1][5];
		$Campo2 = $data->sheets[3]['cells'][1][6]);
		echo "Campo1: ".$Campo1."    Campo2: ".$Campo2;
	}else{
		echo "non connesso";
	}


Ma aggiungendo il codice per la lettura del file si pianta tutto.

Potrebbe essere che tale codice/classe non sia compatibile con il ftps?

Come alternativa ho pensato di copiarmi in locale il file remoto e dopo averlo letto cancellarlo?

Ho provato con copy:

PHP:
	 date_default_timezone_set('Europe/Rome'); // imposto il time zone
	$Today =(@date('Y-m-d'));
	$FileBaseline = 'ftps://egialma:[email protected]:21/SiteDevNO/NTW&WBS_Baseline.xls';
	if (is_readable($FileBaseline)) {
		echo "connesso";
		echo "<br/>";
		copy ( $File, "localdir1/file.xls" );
	}else{
		echo "non connesso";
	}

ma anche in questo caso si pianta tutto e il file non appare nella cartella locale.

Anche in questo caso potrebbe essere che tale codice non sia compatibile con il ftps? Non ho mai usato la funzione copy perciò non so neppure se è corretta come l'ho scritta.

Mi potreste dare altri suggerimenti?

Grazie mille
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
probailmente devi dare il nome del file che devi copiare e $file non lo vedo da nessuna parte.
copy: http://www.php.net/manual/en/function.copy.php
prova
PHP:
<?php
 date_default_timezone_set('Europe/Rome'); // imposto il time zone
    $Today =date('Y-m-d');//non usare il silent
    $FileBaseline = 'ftps://egialma:[email protected]:21/SiteDevNO/NTW&WBS_Baseline.xls';
    if (is_readable($FileBaseline)) {
        echo "connesso";
        echo "<br/>";
        copy ( $FileBaseline, "localdir1/file.xls" );
    }else{
        echo "non connesso";
    } 
?>
anche se non so, ma probabilmente al posto di "localdir1/file.xls" dovresti dargli qualcosa di simile se vuoi che lo copi sul tuo pc
"C://localdir1/file.xls" o "http://localhost:8080/localdir1/file.xls" o se in un tuo sito "http://www.tuo_sito.it/cartella/file.xls"

p.s.
una solita put... sei sicuro che sia .xls? le ultime versioni di excel hanno .xlsx
 

egialma

Nuovo Utente
3 Ott 2012
29
0
0
Allora...

Il file è xls, ho aggiunto il percorso completo di destinazione del file da salvare nel comando copy:


PHP:
	$FileBaseline = 'ftps://erivosti:[email protected]:21/AccBBNO/NTW.xls';
	if (is_readable($FileBaseline)) {
		echo "connesso";
		echo "<br/>";
		copy ( $FileBaseline, "http://localhost:81/file/NTW.xls" );
		
	}else{
		echo "non connesso";
	}

e qualcosa in più l'ha fatta, mi è apparsa questa:

connesso

Warning: copy(http://localhost:81/file/NTW.xls): failed to open stream: HTTP wrapper does not support writeable connections in C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\prova.php on line 8

Warning: copy(): FTP server error 450:450 Transfer aborted. Link to file server lost in C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\prova.php on line 8


la linea 8 del file prova.php è la seguente

PHP:
copy ( $FileBaseline, "http://localhost:81/file/NTW.xls" );
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
Allora...

Il file è xls, ho aggiunto il percorso completo di destinazione del file da salvare nel comando copy:


PHP:
	$FileBaseline = 'ftps://erivosti:[email protected]:21/AccBBNO/NTW.xls';
	if (is_readable($FileBaseline)) {
		echo "connesso";
		echo "<br/>";
		copy ( $FileBaseline, "http://localhost:81/file/NTW.xls" );
		
	}else{
		echo "non connesso";
	}

e qualcosa in più l'ha fatta, mi è apparsa questa:

connesso

Warning: copy(http://localhost:81/file/NTW.xls): failed to open stream: HTTP wrapper does not support writeable connections in C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\prova.php on line 8

Warning: copy(): FTP server error 450:450 Transfer aborted. Link to file server lost in C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\prova.php on line 8


la linea 8 del file prova.php è la seguente

PHP:
copy ( $FileBaseline, "http://localhost:81/file/NTW.xls" );
Hai provato mettendo solo il path locale? Cioè file/NTW.xls
 

egialma

Nuovo Utente
3 Ott 2012
29
0
0
Ciao e grazie a tutti per l'interesse....

Per qualche ragione che ignoro ho provato a riutilizzare il codice scritto qualche discussione fa:

PHP:
    date_default_timezone_set('Europe/Rome'); // imposto il time zone 
    $Today =(@date('Y-m-d')); 
    $File = 'ftps://user:[email protected]:21/Dir1/file.xls'; 
    if (is_readable($File)) { 
        echo "connesso"; 
        echo "<br/>"; 
        require_once 'class/phpExcelReader/Excel/reader.php'; // Richiamiamo la classe  
        $data = new Spreadsheet_Excel_Reader(); 
        $data->read($File); // Inseriamo il percorso del file che vogliamo leggere 
        $Campo1 = $data->sheets[3]['cells'][1][5]; 
        $Campo2 = $data->sheets[3]['cells'][1][6]); 
        echo "Campo1: ".$Campo1."    Campo2: ".$Campo2; 
    }else{ 
        echo "non connesso"; 
    }

e questa volta ha funzionato, mi sono apparse a video le informazioni lette nel file remoto.

Ho provato ha inserire il nuovo codice, ovvero

PHP:
  $File = 'ftps://user:[email protected]:21/Dir1/file.xls';

al posto di quello vecchio era

PHP:
  $File = 'ftp://user:[email protected]/Dir1/file.xls';

nel programma che usavo senza problemi da diverse settimane.

Inserendo il nuovo codice si piantava tutto...

Ho cercato di capire quale porzione di codice provocasse il blocco e dopo vari tentativi ho notato che eliminando un else da un blocco if il programma girava.

La porzione di codice per la lettura del file xls remoto è racchiusa tra if e l'else:


PHP:
if ( verifica se leggere il file o se leggere le tabelle) {
    date_default_timezone_set('Europe/Rome'); // imposto il time zone 
    $Today =(@date('Y-m-d')); 
    $File = 'ftps://user:[email protected]:21/Dir1/file.xls'; 
    if (is_readable($File)) { 
        echo "connesso"; 
        echo "<br/>"; 
        require_once 'class/phpExcelReader/Excel/reader.php'; // Richiamiamo la classe  
        $data = new Spreadsheet_Excel_Reader(); 
        $data->read($File); // Inseriamo il percorso del file che vogliamo leggere 
        $Campo1 = $data->sheets[3]['cells'][1][5]; 
        $Campo2 = $data->sheets[3]['cells'][1][6]); 
        echo "Campo1: ".$Campo1."    Campo2: ".$Campo2; 
    }else{ 
        echo "non connesso"; 
    }  
}else{

legge tabelle del db

}

Ho fatto vari tentativi facendo terminare il blocco if prima dell' else e tutto funzionava.

Ho controllato e ricontrollato il blocco dopo l'else ma a me sembrava corretto, anche perchè questa porzione di codice la stavo utilizzando da diverse settimane senza problemi

Senza inserire modifiche ho riattivato il blocco else e con stupore il programma girava.
ho provato diverse volte e tutto funzionava correttamente, mistero.

Ad un certo punto il programma ha smesso di funzionare e si ripiantava, dopo vari tentativi tra cui uscire dal browser e rientrare, si è rimesso a funzionare.

Le condizioni che agiscono sul blocco if sono state sempre le stesse, poiché le varie prove le ho fatte sulla medesima pagina.

Potrebbe essere un problema legato alla connessione SSL/TLS?

L'apertura FTP di un file tramite URL deve essere in qualche modo chiusa? Attualmente il codice non prevede questa funzione e non mi sono posto il problema fino ad ora poichè funzionava tutto, ma adesso mi pongo questo quesito.

Se si, come posso implementare il codice di chiusura?

Grazie a tutti
 
Discussioni simili
Autore Titolo Forum Risposte Data
L Leggere un file .txt tramite FTP e trascriverlo in una RichTextBox Visual Basic 0
G leggere file txt e stampare con php il contenuto a video PHP 7
felino Script PHP per leggere un file JSON. autenticazione? PHP 4
C Leggere dati File.XMLcon PHP XML 11
M Leggere il contenuto di una cartella e memorizzare il nome file in mysql PHP 1
I [Javascript] Leggere "var" da file .js esterno (per google map) Javascript 6
H Interpretare e leggere il file log di sfc/scannow. Windows e Software 0
P leggere file .csv con javascript/jquery Javascript 11
Monital Leggere un file php contenente dati json PHP 10
Trapano Leggere un file .txt dal fondo PHP 7
Francesco Polese Leggere linea da un file ed eliminarla PHP 2
F Leggere file contenuti in cartella e modificarne il nome PHP 3
M Leggere dati da file excel in base al nome del foglio di lavoro PHP 0
napuleone type="file" leggere con js Javascript 3
M Leggere file di grandi dimensioni Java 2
D leggere il contenuto di un file di testo in un file .JS Javascript 11
L file. leggere dall'ultima riga alla prima PHP 1
L [c++] Problema leggere file txt riga per riga C/C++ 0
Trapano [risolto] Leggere da un file txt in ordine inverso PHP 2
K Leggere contenuto di una cartella quando viene aperto il file PHP 6
F leggere file xls Classic ASP 0
neo996sps [risolto] Usare PHP per leggere da file XML PHP 3
M leggere determinati punti di un file txt PHP 2
M Problema leggere su file di testo remoti PHP 11
A Leggere file txt e azioni su form PHP 1
G leggere file xml su server remoto Ajax 0
S leggere da file e scrivere su file un carattere o una parola alla volta Visual Basic 1
F Leggere e salvare caratteri da file di testo PHP 2
L leggere file xml dove i tag sono del tipo <stringa:altra_stringa> PHP 0
L leggere un file xml XML 1
S [C] Leggere i dati da un file e salvarli in una matrice Programmazione 1
L word: leggere i file temporanei Windows e Software 1
P leggere i file in una sottodir PHP 6
D Leggere i file di una cartella ed il loro contenuto PHP 5
LaKanka Leggere dati da file xml PHP 19
F leggere file txt zippato su altro server, come fare ? PHP 4
N leggere/sostituire/restituire file txt PHP 1
T Leggere file in directory e sottodirectory con ASP Classic ASP 3
Vale1976 leggere file da altro pc in rete PHP 2
S [VB.net 2005] Leggere file di testo come un database Programmazione 0
E Leggere file txt da altro server Classic ASP 4
G Leggere file testo lato client Javascript 1
2 Leggere una pagine che è nei file temporanei HTML e CSS 1
S Leggere dati da API e visualizzarli PHP 0
elpirata Query per leggere dati da una tabella mysql e mostrarli a video in base a parametri passati tramite GET PHP 5
maxbossi Attenzione alle TRUFFE: Leggere attentamente!!! Annunci servizi di Social Media Marketing 0
J Leggere JSON da Instagram __a=1 PHP 0
L leggere RGB di un pixel dello schermo in java Java 1
Q Leggere NFC da web app - web nfc Javascript 0
G Pec come leggere il contenuto Posta Elettronica 1

Discussioni simili