2013-08-22 38 views
5

Tôi có hai máy chủ. Tôi đã có tệp .txt trong tệp tôi đang kết nối.PHP: Làm cách nào để đọc tệp .txt từ máy chủ FTP thành biến?

Tôi cần lấy nội dung tệp .txt và đặt chúng vào biến $. Đây là mã của tôi rằng doesnt work:

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

Mã này kết nối với FTP và tôi đã sử dụng ftp_get để sao chép từ một file văn bản cho một biến gọi là $ nội dung. Tôi biết một biến không thuộc về tham số này, nhưng tôi được bán ngay bây giờ. Tôi không có ý tưởng làm thế nào để đọc tập tin .txt này.

Có cách nào để thực hiện việc này với các chức năng PHP FTP không?

Cảm ơn

Bây giờ, khi tôi cố gắng này:

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

Nó cung cấp cho một lỗi 550 nói rằng các tập tin .txt không phải là một tập tin thông thường. Tại sao tôi nhận được lỗi này?

Cảm ơn một lần nữa

Đây là lỗi chính thức tôi nhận được:

Cảnh báo: fopen (ftp://[email protected]/101Notebook sao lưu: 22-08-2013/# 11 - Cappucci, Ryan/queen.txt) [chức năng .fopen]: không thể mở luồng: Máy chủ FTP báo cáo 550/101Notebook Sao lưu: 22-08-2013 /: không phải là tệp thông thường trong /home/content/34/11614434/html/adminpdo.php trên dòng 269

+0

'$ fileContents =' ['file_get_contents'] (http://be2.php.net/file_get_contents)' ('ftp: // tên người dùng: mật khẩu @ hostname/path/to/file') ; ' –

+0

khi tôi thực hiện ở trên và trỏ tới tệp .txt của tôi, nó cho một lỗi 550, nói rằng nó không phải là một tập tin thường xuyên. –

Trả lời

10

Hãy thử điều này, mã này là từ 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; 
?> 

Nếu lỗi, vui lòng thay đổi quyền đối với tệp 777 hoặc 775. Hy vọng điều này có thể hữu ích.

+0

Tôi vẫn gặp lỗi khi tôi thử. Tôi đã đăng lỗi ở trên. –

+0

Đoạn mã trên hoạt động tốt với tệp .txt bình thường.Có thể tệp bạn đọc không phải là tệp (theo liên kết của bạn, có vẻ như bạn đang cố gắng đọc thư mục) hoặc có thể là tệp .php hoặc .aspx? Nếu vậy bạn không thể lấy tệp .php đó. –

+0

Có nó là một tập tin txt, nhưng đối với một số lý do không có vấn đề gì tôi cố gắng tôi vẫn nhận được lỗi. –

3

Nếu bạn đã mở một kết nối qua ftp_connect, đây có lẽ là câu trả lời tốt nhất:

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

Các file_get_contents sự là giải pháp đơn giản nhất:

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

Nếu nó không hoạt động, có thể vì bạn không có URL wrappers enabled in PHP.


Nếu bạn cần kiểm soát tốt hơn đọc (chế độ chuyển nhượng, chế độ thụ động, bù đắp, đọc giới hạn, vv), sử dụng ftp_fget với một xử lý để 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); 

(thêm xử lý lỗi)

Các vấn đề liên quan