cuốn sách gpt4 ai đã làm

Tải lên PHP qua FTP - ftp_put() Tôi sẽ không mở kết nối tới xxxx (chỉ với yyyy)

In lại Tác giả: Hồ Xil Thời gian cập nhật: 2023-11-01 13:35:14 30 4
mua khóa gpt4 Nike

Tôi đang cố gắng sử dụng một máy chủ để tải nội dung lên máy chủ khác qua FTP.

"Tôi sẽ không mở kết nối tới 172.xxx.xxx.xxx (chỉ tới 54.xxx.xxx.xxx)" thậm chí còn không liên quan vì tôi chưa kết nối với máy chủ đó. Đó là địa chỉ IP của máy chủ lưu trữ tập lệnh. Nhưng đó không phải là máy chủ được truy cập qua FTP.

$conn_id = ftp_connect('50.xxx.xxx.xxx');
ftp_pasv($conn_id, true);

$login_result = ftp_login($conn_id, 'người dùng', 'vượt qua');

$file = "http://example.com/filelocation.swf";

if (ftp_put($conn_id, "test.swf", $file, FTP_BINARY)) {
echo 'Tệp đã tải lên';
}
khác {
echo 'Có vấn đề khi tải lên';
}

ftp_put() Tôi sẽ không mở kết nối tới 172.xxx.xxx.xxx (chỉ với 54.xxx.xxx.xxx)

Địa chỉ IP trong lỗi này không đến được máy chủ mà tôi đang cố gắng kết nối. ftp_login Đã kết nối, không có vấn đề gì. (Tôi thậm chí còn không muốn nó kết nối với những địa chỉ IP đó, vậy tại sao nó lại nghĩ như vậy?)

我可以使用 ftp_mkdir Thêm một thư mục trên máy chủ. Tuy nhiên, khi tôi sử dụng ftp_put , nó báo lỗi này.

câu trả lời hay nhất

Thông báo lỗi thực sự khá có liên quan.

điều này đúng CẢNG Phản hồi lỗi Pure-FTPd đối với lệnh khi máy khách yêu cầu máy chủ mở kết nối dữ liệu bằng địa chỉ IP khác với máy khách (như máy chủ nhìn thấy). Vì vậy, đây là thông báo lỗi từ xa do máy chủ gửi chứ không phải thông báo lỗi cục bộ do PHP tạo ra.

Sự cố thường xảy ra do máy khách chỉ biết địa chỉ IP cục bộ của mình chứ không biết địa chỉ IP bên ngoài.


Bây giờ, vấn đề là khi bạn yêu cầu PHP sử dụng chế độ thụ động (ftp_pasv) khi kết nối, tại sao PHP lại sử dụng CẢNG.

Điều này rõ ràng là bởi vì trước khi bạn đăng nhập, bạn đã gọi ftp_pasv.

Vì vậy máy chủ từ chối PASV Gọi:

530 Bạn chưa đăng nhập

Thật không may, PHP không truyền tải thông điệp từ PASV Thông báo lỗi cho cuộc gọi. Nó sẽ âm thầm quay trở lại chế độ sự kiện mặc định. Bạn có thể biết rằng cuộc gọi không thành công dựa trên giá trị trả về của nó (mà bạn không kiểm tra).


Chỉ cần thay đổi ftp_pasv Cuộc gọi chuyển đến ftp_login 之后。

$conn_id = ftp_connect('50.xx.xx.xx');

ftp_login($conn_id, 'người dùng', 'vượt qua');

ftp_pasv($conn_id, true);

The documentationHãy làm rõ:

Xin lưu ý rằng ftp_pasv() chỉ có thể được gọi sau khi đăng nhập thành công, nếu không nó sẽ thất bại.


Tất nhiên bạn nên kiểm tra lỗi tốt hơn.


Đối với các câu hỏi tương tự (chỉ dành cho ProFTPd), hãy xem:
PHP ftp_put trả về "Không thể xây dựng kết nối dữ liệu: Kết nối bị từ chối"

Về việc tải lên PHP qua FTP - ftp_put() Tôi sẽ không mở kết nối tới xxxx (chỉ với yyyy), chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/31819695/

30 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress