2009-04-04 5 views
15

Tôi đang trong quá trình xây dựng ứng dụng web, ngoài những thứ khác, cần kết nối với máy chủ FTP để tải xuống hoặc tải lên tệp. Ứng dụng này được viết bằng PHP và được lưu trữ trên máy chủ Linux.SFTP từ bên trong PHP

Điều tôi băn khoăn là liệu có thể cung cấp hỗ trợ cho các máy chủ SFTP hay không, nhưng sau một số tìm kiếm nhanh trên Google, dường như điều này không đơn giản.

Vì vậy, câu hỏi đặt ra là: Cách tốt nhất để sử dụng SFTP từ bên trong PHP là gì? Có một lớp học cũng có thể cung cấp hỗ trợ cho FTP cũng như SFTP để các chức năng giống nhau có thể được sử dụng cho cả hai?

Trả lời

14

Có, bạn có thể làm điều đó với cURL. Để chuyển từ FTP sang SFTP, tất cả những gì bạn phải làm là thay đổi biểu mẫu tùy chọn giao thức CURLPROTO_FTP thành CURLPROTO_SFTP.

cURL hỗ trợ các giao thức sau: HTTP, HTTPS, FTP, FTPS, SCP, SFTP, TELNET, LDAP, LDAPS, DICT, FILE, TFTP.

BTW. SFTP không bị nhầm lẫn với FTPS. SFTP là Giao thức truyền tệp SSH, trong khi FTPS là FTP qua SSL.

+0

Trên thực tế bạn thậm chí không cần phải mess với 'CURLOPT_PROTOCOLS'. Bạn chỉ có thể đặt 'sftp: //' ở phía trước tên máy chủ mà bạn chuyển với 'CURLOPT_URL' và cURL sẽ tự động phát hiện và sử dụng SFTP. – sakatc

4

Trong trường hợp ai đó kết thúc-up trên trang này.

Bạn cũng có thể sử dụng PHP Bindings for LIBSSH2 bằng PHP. Nó phải được cài đặt thích hợp trên hệ thống.

Trong Ubuntu 10.04 và Debian Lenny, tất nhiên với tất cả sự phụ thuộc

apt-get install libssh2-php 
3

Vấn đề với đề nghị của Igor là nó, trong số những thứ khác, làm cho mã ít hơn nhiều portable (libssh2 không được cài đặt trên rất nhiều host), nó có một API dựa trên OOP và xác thực RSA trực quan hơn thực sự có ý nghĩa (libssh2 yêu cầu bạn lưu khóa công khai và khóa riêng trên hệ thống tệp; thực tế là chúng phải được cung cấp riêng biệt là ngớ ngẩn vì các định dạng khóa riêng tư nhất bao gồm khóa công khai bên trong chúng).

phpseclib cũng là nhanh hơn:

http://kevin.vanzonneveld.net/techblog/article/make_ssh_connections_with_php/#comment_3759