これを解決するために半日を失ったので、ここで私の問題 (および解決策) を共有する価値があると思います。
これが私の最初のコードです:
$host = ...
$user = ...
$pass = ...
$conn = ftp_ssl_connect($host, 22);
if($conn === false) {
die('could not connect :(');
}
$login_result = ftp_login($conn, $user, $pass);
ftp_pasv($conn, true);
$file = realpath('test.txt');
echo 'putting file '.$file."\n";
ftp_put($conn, 'test.txt', $file, FTP_BINARY);
ftp_close($conn);
残念ながら、接続が成功しても、これは機能しませんでした。以下は、約 1 分間ハングした後に fpt_put 行から得たメッセージです。
警告: ftp_put(): php_connect_nonb() が失敗しました: 操作が進行中です (36)
ほとんどの同様の問題で見られるように、これは受動的なトグルの問題ではないことに注意してください (私はあり、なしで試しました)。
注: 通常はポート 21 が使用されることは承知していますが、サード パーティを使用している場合は選択の余地がない場合があります。