Norén.phpでftp他システムとの連携などで、データファイルをFTPしたい時があるのではないでしょうか。以前はシェルの中でftpコマンドファイルを出力し、それをftpコマンドの入力にして実行していたのですが、phpにはFTP関連の関数も用意されていて、とても便利です。http://php.net/manual/ja/ref.ftp.phpと、思ったけれどあんまりうまくいかない。環境によってうまくいったりいかなかったり。うまく行く場合は当然ながら正常に接続できて、ファイルも正常に送信されるのですが、うまくいかない場合はftp_put()がなかなか終了せず、やっと終了したと思ったら0バイトのファイルができています。VPSの環境ではうまくいきましたが、とあるレンタルサーバーでは上記のような状態です。どちらの環境でもftpコマンドでは正常にファイル送信でき、処理の内容も以下の同じプログラムです。103といったエラーで終了し、FTP先には0バイトのファイルが作成されています。ftp_pasv()を実行してPASVにしてみたりしても、根拠もなくPASVにしてみただけなので特に変化はありません。ftp_put()という関数を使わずに、FTPコマンドを直接記述できるftp_raw()という関数もあるので、そちらを利用してみましたが、これも結果は全く変わりません。同じftpのライブラリを使っているので、当たり前といえば当たり前なのかもしれません。ここまででかなり時間を使ってしまったのでphpの関数を使う方法はあきらめ、system()でftpコマンドを発行する、もっと言えばftpコマンドでファイルのコマンドを実行させる従来の方法に立ち返ってみました。ftpコマンドにファイルの内容を実行させるとはどういうことなのかは、以下のとても古い記事などが参考になります。ftpなどは枯れた技術なので、まったくそのままで動きます。http://www.itmedia.co.jp/help/tips/linux/l0462.html気持ちも新たにphpのプログラムを書き換えました。[ERROR]\n";exit(1);}サクっと動きました。コードも短く、分かりやすい。この方法の欠点は、ftpコマンドの途中どこかでエラーになったことをキャッチできないということです。そのためには、ftpコマンドの出力内容をチェックする必要があります。system()関数ではなくpassthru()などを使って出力を受け取ることで実現できそうです。何というか、phpじゃなくてシェルでやれば良かったんじゃないでしょうか。ftp_put()でお悩みのあなた、参考にしてください。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。新しい投稿をメールで受け取る。