Hướng dẫn php ftp_connect sftp

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters

// connect and login to FTP server
$ftp_server = "ftp.domain.com";
$ftp_conn = ftp_connect($ftp_server) or die("Could not connect to $ftp_server");
//$ftp_conn = ftp_ssl_connect($ftp_server);// for SSL-FTP connection instead of ftp_connect
$login = ftp_login($ftp_conn, $ftp_username, $ftp_userpass);
$file = "local-file.jpg";
// upload file
if (ftp_put($ftp_conn, "server-file.jpg", $file, FTP_ASCII)) {
echo "Successfully uploaded $file.";
} else {
echo "Error uploading $file.";
}
// close connection
ftp_close($ftp_conn);

Câu hỏi này phù hợp với câu hỏi này , tôi đang cố gắng kết nối với Máy chủ FTP an toàn và nó không thể kết nối, phần wierd là tôi có thể thực hiện ssh và kết nối với máy chủ nhưng khi tôi cố gắng làm điều đó từ php mã sử dụng một số cách tiếp cận khác nhau nhưng nó không hoạt động

Phương pháp tiếp cận:

  1. FTP Wrappers
  2. ftp_connect & ftp_login
  3. ftp_ssl_connect
  4. ssh2_sftp
  5. ssh2-scp-send& ssh2-scp-receive - Chưa thử cách tiếp cận này nhưng được đề xuất trong phần nhận xét và do đó sẽ hoạt động trên cách này và sẽ đăng các bản cập nhật sau.

Mã cho cách tiếp cận 1:

$ftp_server = "ftp://username::21/{$log_file_name}";
$opts = array('ftp' => array('overwrite' => TRUE));
$context = stream_context_create($opts);
$put_file = file_put_contents($ftp_server, $response, LOCK_EX,$context);

Ở đây cũng không thể kết nối với Máy chủ FTP an toàn, mọi gợi ý tại sao nó không thể kết nối?

Mã cho cách tiếp cận 2:

ftp_server = 'www.server.com';
$conn_id = ftp_connect($ftp_server) or die ("Cannot connect to host");
//Program dies out here and give error message "Cannot connect to host",
//but why ftp_login does not work here, Any Suggestions ?
$ftp_user_name = "login";
$ftp_user_pass = "password";
// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
// check connection and login result
if ((!$conn_id) || (!$login_result)) 
{ echo "FTP connection has encountered an error!";
  echo "Attempted to connect to $ftp_server for user $ftp_user_name....";
 //exit;
} else 
{ 
 echo "Connected to $ftp_server, for user $ftp_user_name".".....";
}

Mã cho cách tiếp cận 3:

Here am using same code as approach 1 but instead of ftp_connect, am using ftp_ssl_connect

Mã cho cách tiếp cận 4:

$connection = ssh2_connect('www.server.com', 22);
ssh2_auth_password($connection, 'login', 'password');
$sftp = ssh2_sftp($connection);
//exit();
$stream = fopen("ssh2.sftp://$sftp/path/to/file", 'r');

Bất cứ ai có thể tư vấn tại sao tôi không thể kết nối với Máy chủ FTP an toàn bằng cách sử dụng các phương pháp trên nhưng vẫn có thể làm như vậy bằng cách sử dụng ssh?

Có bất kỳ cách tiếp cận nào khác để kết nối với Máy chủ FTP an toàn bằng php không?

CẬP NHẬT:

Q1. Tôi đã thử lại bằng cách sử dụng ftp_connect nhưng nó chỉ chết và tại sao nó chết, các trường hợp mà ftp_connect chết là gì?

Quý 2. Chúng tôi chỉ có cách tiếp cận này để kết nối với máy chủ hay có cách nào khác mà chúng tôi có thể triển khai không?

Q3. Ngôn ngữ php này có liên quan đến việc nó không hỗ trợ Kết nối FTP an toàn không? HOẶC có bất kỳ cách nào khác để thực hiện việc này bằng php, nếu có, hãy cung cấp các cách tiếp cận khác nhau vì nó sẽ rất hữu ích.

CẬP NHẬT 1:

Tôi đã cố gắng google thêm về vấn đề này và có vẻ như nếu ftp_connect không hoạt động thì tường lửa có thể là một trong những lý do cho vấn đề này. Tôi không hoàn toàn chắc chắn có đúng như vậy không nhưng tôi đang nghiên cứu thêm về nó và đăng bản cập nhật tại đây nếu tôi thấy bất kỳ điều gì hữu ích.

Giải pháp khả thi:

Vấn đề

Nếu tôi xóa "hoặc chết" thì bạn sẽ gặp lỗi:

Khi chạy từ một trang web:

Cảnh báo: ftp_login () yêu cầu tham số 1 là tài nguyên, boolean được đưa ra trong /var/www/ftp_test.php trên dòng 28

var_dump ($ conn_id); trả về bool (false).

Từ dòng lệnh / usr / bin / php /var/www/ftp_test.php

var_dump ($ conn_id); trả về tài nguyên (4) kiểu (FTP Buffer).

Tập lệnh hoàn thành.

Giải pháp 1

Đây có thể là một trong những solution:

Hãy thử tắt selinuxvà đây là wayhoặc Tìm kiếm: Cách tắt selinux để tắt tạm thời hoặc vĩnh viễn.

Giải pháp 2

Nếu bạn không muốn tắt hoàn toàn selinux, bạn có thể nhận được những gì bạn cần bằng cách đặt httpd_can_network_connect bằng lệnh setsebool .

Xác minh rằng trước đó nó đã được đặt thành "tắt": getsebool httpd_can_network_connect

Đặt nó thành "on":

setsebool httpd_can_network_connect=1

Bật lại selinux: setenforce 1

Kiểm tra để đảm bảo php ftp_connectvẫn hoạt động khi chạy dưới httpd.

Đặt chính sách (-P) thành "bật" để chính sách vẫn tồn tại sau khi khởi động lại:

setsebool -P httpd_can_network_connect=1

Giải pháp 3

Cũng có thể có vấn đề với tường lửa của công ty. Đảm bảo rằng nó được định cấu hình đúng cách và có các quyền truy cập được đặt đúng cách.

Giải pháp 4

Một cách tiếp cận khác là sử dụng cURL: libcurl vì nó có thể được sử dụng để kết nối và giao tiếp với nhiều loại máy chủ khác nhau với nhiều loại giao thức khác nhau

Giải pháp 5

Có một dự án mã nguồn mở được gọi là Thư viện Giao tiếp Bảo mật PHP (phpspeclib) cũng có thể được sử dụng để thiết lập kết nối an toàn đến Máy chủ FTP.

13 hữu ích 3 bình luận 24k xem chia sẻ