2013-08-22 14 views
5

Mam dwa serwery. Mam już plik .txt w tym, z którym się łączę.PHP: Jak odczytać plik .txt z serwera FTP do zmiennej?

Potrzebuję uzyskać zawartość pliku .txt i umieścić je w zmiennej $. Tu jest mój kod, który robi praca :

$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); 

Kod ten łączy się z FTP i użyłem ftp_get skopiować z jednego pliku tekstowego do zmiennej o nazwie $ content. Wiem, że zmienna nie należy do tego parametru, ale jestem teraz sprzedawany. Nie mam pojęcia, jak odczytać ten plik .txt.

Czy można to zrobić z funkcjami FTP PHP?

Dzięki

Teraz, gdy próbuję to:

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

Daje 550 błędu mówiąc, że plik .txt nie jest zwykłym plikiem. Dlaczego otrzymuję ten błąd?

Dzięki ponownie

Oto oficjalny błąd Dostaję:

Warning: fopen (ftp://[email protected]/101Notebook zapasowa: 22-08-2013/# 11 - Cappucci Ryan/queen.txt) [funkcja .fopen]: nie udało się otworzyć strumienia: raporty serwera FTP 550/101 Notatnik Kopia zapasowa: 22-08-2013 /: nie jest to zwykły plik w /home/content/34/11614434/html/adminpdo.php w linii 269

+0

'$ fileContents =' ['file_get_contents'] (http://be2.php.net/file_get_contents)' ('ftp: // nazwa_użytkownika: hasło @ nazwa_hosta/ścieżka/do/pliku') ; ' –

+0

kiedy robię powyższe i wskazuje na mój plik .txt, to daje błąd 550, mówiąc, że nie jest zwykłym plikiem. –

Odpowiedz

10

Wypróbuj ten kod od: 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; 
?> 

Jeśli błąd, zmień uprawnienia do pliku na 777 lub 775. Mam nadzieję, że to może pomóc.

+0

Nadal dostaję błąd, gdy próbuję tego. Wysłałem powyższy błąd. –

+0

Powyższy kod działa poprawnie w przypadku zwykłego pliku .txt.Czy jest możliwe, że plik, który zamierzasz przeczytać, nie jest plikiem (zgodnie z linkiem, wygląda na to, że próbujesz odczytać folder) lub może to być plik .php lub .aspx? Jeśli tak, nie możesz pobrać tego pliku .php. –

+0

Tak, jest to plik tekstowy, ale z jakiegoś powodu niezależnie od tego, co próbuję, nadal otrzymuję błąd. –

3

Jeśli już otworzył połączenie poprzez ftp_connect, to będzie prawdopodobnie najlepszą odpowiedzią:

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

file_get_contents jest najprostszym rozwiązaniem:

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

Jeśli to nie zadziała, to prawdopodobnie dlatego, że nie masz URL wrappers enabled in PHP.


Jeśli potrzebujesz większej kontroli nad czytaniu (tryb transferu, tryb pasywny, offset, czytanie graniczną itp), użyj ftp_fget z uchwytem do 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); 

(dodać obsługa błędów)