2013-08-22 19 views
5

Ho due server. Ho già un file .txt in quello a cui mi sto connettendo.PHP: Come faccio a leggere un file .txt dal server FTP in una variabile?

Ho bisogno di ottenere il contenuto del file .txt e metterli in una variabile $. Ecco il mio codice che il lavoro pretende molto:

$ftp_server = $_POST["site"]; 
$path = $_POST["path"]; 
$ftp_user_name = $_POST["username"]; 
$ftp_user_pass = $_POST["pass"]; 

// set up basic connection 
$conn_id = ftp_connect($ftp_server); 

// login with username and password 
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); 

ftp_get($conn_id, $content,"/" . $_POST["path"] . "/" . "#" . $result["id"] 
. " - " . $result["LastName"] . ", " . $result["FirstName"] . "/" . $_POST["title"] . ".txt", FTP_ASCII); 

Questo codice si collega al FTP e ho usato il ftp_get per copiare da un file di testo a un contenuto di $ variabile chiamata. So che una variabile non appartiene a questo parametro, ma al momento sono venduta. Non ho idea di come leggere questo file .txt.

C'è un modo per farlo con le funzioni FTP PHP?

Grazie

Ora, quando provo questo:

$fileContents = file_get_contents('ftp://username:pa‌​[email protected]/path/to/file'); 

dà un errore di 550 dicendo che il file txt non è un file regolare. Perché ricevo questo errore?

Grazie ancora

Ecco l'errore ufficiale sto ottenendo:

Warning: fopen (ftp://[email protected]/101Notebook Backup: 22-08-2013/# 11 - Cappucci, Ryan/queen.txt) [funzione .fopen]: impossibile aprire lo stream: server FTP segnala 550/101Notebook Backup: 22-08-2013 /: non un file regolare in /home/content/34/11614434/html/adminpdo.php on line 269

+0

'$ fileContents =' ['file_get_contents'] (http://be2.php.net/file_get_contents)' ('ftp: // nomeutente: password @ nomehost/percorso/su/file') ; ' –

+0

quando faccio quanto sopra e punto al mio file .txt, esso dà un errore 550, dicendo che non è un file normale. –

risposta

10

Prova questo, questo codice è da http://www.php.net/manual/en/function.fread.php

<? 
$filename = "ftp://username:pa‌​[email protected]/path/to/file"; 
$handle = fopen($filename, "r"); 
$contents = fread($handle, filesize($filename)); 
fclose($handle); 

echo $contents; 
?> 

Se l'errore, si prega di modificare il permesso di file su 777 o 775. Spero che questo possa aiutare.

+0

Ho ancora un errore quando lo provo. Ho pubblicato l'errore sopra. –

+0

Il codice sopra riportato funziona perfettamente con il normale file .txt.È possibile che il file che stai per leggere non sia un file (in base al tuo link, sembra che tu stia cercando di leggere una cartella) o potrebbe essere il file .php o .aspx? Se è così non puoi ottenere quel file .php. –

+0

Sì, si tratta di un file txt, ma per qualche motivo, non importa quello che cerco, ottengo comunque l'errore. –

3

Se hai già aperto un collegamento via ftp_connect, questo sarebbe probabilmente la migliore risposta:

ob_start(); 
$result = ftp_get($conn_id, "php://output", $file, FTP_BINARY); 
$data = ob_get_contents(); 
ob_end_clean(); 
2

Il file_get_contents è la soluzione più semplice:

$contents = file_get_contents('ftp://username:pa‌​[email protected]/path/to/file'); 

Se non funziona, è probabilmente perché non hai URL wrappers enabled in PHP.


Se avete bisogno di un maggiore controllo sulla lettura (modalità di trasferimento, la modalità passiva, offset, limite di lettura, ecc), utilizzare il ftp_fget con una maniglia per il php://temp (or the php://memory) stream:

$conn_id = ftp_connect('hostname'); 

ftp_login($conn_id, 'username', 'password'); 

$h = fopen('php://temp', 'r+'); 

ftp_fget($conn_id, $h, '/path/to/file', FTP_BINARY, 0); 

$fstats = fstat($h); 
fseek($h, 0); 
$contents = fread($h, $fstats['size']); 

fclose($h); 
ftp_close($conn_id); 

(aggiungi gestione degli errori)

Problemi correlati