2016年12月20日火曜日

ftp_put(): Unable to build data connection: No route to host

無料のレンタルサーバにftpするプログラムをphpで作成し使っていたのだが、OSをCentOS 7に変更した影響かエラーで動かなくなった。コマンドラインから実行し、指定のディレクトリ内の全フファイルをUploadするプログラムです。

エラーの内容は以下の通り。

A PHP Error was encountered

Severity: Warning
Message:  ftp_put(): Unable to build data connection: No route to host
Filename: controllers/xxxxxxxx.php
Line Number: xxx

phpのプログラムは以下の通り。エラーチェックを一切行っていない手抜きプログラム。

    $ftp_server = 'xxxx.xxxxxxxx.jp';
    $ftp_user   = 'xxxxxxxx';
    $ftp_pass   = 'xxxxxxxx';

    $ftp_stream = ftp_connect( $ftp_server );
    $ftp_result = ftp_login( $ftp_stream, $ftp_user, $ftp_pass );
    foreach( $files as $val ) {
      ftp_put( $ftp_stream, './'. $val, $base . $val, FTP_ASCII );
      echo "Upload: " . $val . "\n";
    }
    ftp_close( $ftp_stream );

なんだかなあと思いながら

    ftp_pasv( $ftp_stream, true );

を追加してみる。

動いたよ。

修正後のプログラムは以下の通り。

    $ftp_server = 'xxxx.xxxxxxxx.jp';
    $ftp_user   = 'xxxxxxxx';
    $ftp_pass   = 'xxxxxxxx';

    $ftp_stream = ftp_connect( $ftp_server );
    $ftp_result = ftp_login( $ftp_stream, $ftp_user, $ftp_pass );
    ftp_pasv( $ftp_stream, true );
    foreach( $files as $val ) {
      ftp_put( $ftp_stream, './'. $val, $base . $val, FTP_ASCII );
      echo "Upload: " . $val . "\n";
    }
    ftp_close( $ftp_stream );

パッシブモードの指定が必要になったようだ。CentOS 7にしてPHPのバージョンが変わって規定値が変わったのかな?それともレンタルサーバ側が変わったのだろうか。動いたからいいか。

0 件のコメント:

コメントを投稿