PHP
ftps

PHPでFTPS接続でなぜかタイムアウトして辛かった

More than 1 year has passed since last update.

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_connectimplicit mode オプションなんてない。絶望。
と思いきや、先人がいい感じのライブラリを作ってくれていた。
https://github.com/nalindaDJ/php-FTP-implicit-ssl-tls

上記ライブラリを使用すれば、 implicit mode でFTPS接続できる。

環境

php -m をコマンドラインで実行して、 curlopenssl がないといけない。
ftp も必要かもしれない。モジュールが必要ということ。

  • curl
  • openssl
  • ftp

おまけ

lftp でテストしてた。
lftp は、 open ftps://hogehoge.com のようにすると、implicit mode で接続する。

set ftp:ssl-allow yes をセットして、 open hogehoge.com のように接続すると、explicit mode FTPSで接続するらしい。
こちらは未検証。ごめんなさい。