ftp_ssl_connect でFTPS接続しようとして、タイムアウトで FALSE が帰ってきた。原因が判明したのでメモ。
ftp_ssl_connect の公式リファレンス。
http://php.net/manual/ja/function.ftp-ssl-connect.php
接続先はimplicit modeではありませんか?
ftp_ssl_connect はリファレンスに何も書いてないけど、 explicit mode で接続するらしい。
接続先が implicit mode で待受していると、 ftp_ssl_connect してもタイムアウトで FALSE が帰ってく来てしまう。
じゃあどすればいいのさ
ftp_ssl_connect に implicit mode オプションなんてない。絶望。
と思いきや、先人がいい感じのライブラリを作ってくれていた。
https://github.com/nalindaDJ/php-FTP-implicit-ssl-tls
上記ライブラリを使用すれば、 implicit mode でFTPS接続できる。
環境
php -m をコマンドラインで実行して、 curl と openssl がないといけない。
ftp も必要かもしれない。モジュールが必要ということ。
- curl
- openssl
- ftp
おまけ
lftp でテストしてた。
lftp は、 open ftps://hogehoge.com のようにすると、implicit mode で接続する。
set ftp:ssl-allow yes をセットして、 open hogehoge.com のように接続すると、explicit mode FTPSで接続するらしい。
こちらは未検証。ごめんなさい。