Rumah > Soal Jawab > teks badan
P粉7757237222023-08-29 20:07:59
Beri perhatian kepada dokumentasi fungsi ftp_pasv
PHP (penekanan saya):
Juga ambil perhatian bahawa anda tidak menyemak nilai pulangan status panggilan ftp_pasv
调用的状态返回值,所以您不会注意到该调用是否实际成功(这很可能不会成功)。因此,您的脚本将尝试建立主动的 FTP 连接。这在容器中不起作用(除非使用 --network=host
, jadi anda tidak akan perasan sama ada panggilan itu benar-benar berjaya (yang kemungkinan besar tidak akan berjaya). Oleh itu, skrip anda akan cuba mewujudkan sambungan FTP yang aktif. Ini tidak berfungsi dalam bekas (melainkan dimulakan dengan --network=host
), kerana bekas berjalan dalam rangkaian peribadi melalui NAT pada mesin hos.
Penyelesaian: Log masuk dahulu, kemudian dayakan mod pasif (juga sentiasa semak nilai pulangan ralat; banyak fungsi lama daripada perpustakaan standard PHP tidak membuang pengecualian, tetapi bergantung pada nilai pulangan ralat):
if (ftp_login($connection, FTP_USERNAME, FTP_PASSWORD)) { if (ftp_pasv($connection, true) === false) { throw new \Exception("无法启用被动模式") } $stream = fopen('data://text/plain,','r'); ftp_fput($connection, $filename, $stream); }