6

別のサーバーに移動する前は正常に機能していた不動産業者のvebraインポートスクリプトに混乱していますが、現在はまったく機能していないようです。

なぜ私が次の警告を受け取るのか誰かが知っていますか...

警告:ftp_get()[function.ftp-get]:ファイル転送用のデータチャネルを開いています。/home/username/public_html/includes/cron/import/vebra-import.phpの37行目

警告:ftp_get()[function.ftp-get]:37行目の/home/username/public_html/includes/cron/import/vebra-import.phpでOKを転送します

ftp接続コードは次のとおりです。

  $ftp = ftp_connect($ftp_host, 21) or die("FTP Connection Error");

  ftp_login($ftp, $ftp_user, $ftp_pass) or die("Can't Connect to FTP");

  $ftpdir = ftp_nlist($ftp, "/");


  if(!empty($ftpdir) && count($ftpdir) > 0) {

  foreach($ftpdir as $ftpfile) {

      if(preg_match("/\.txt$/", $ftpfile)) {
          $getfile = ftp_get($ftp, $csv_dir.$ftpfile, $ftpfile, FTP_BINARY);
          if($getfile){
              $downloaded++;
          }
          $total++;

      }

  }

  }
  ftp_close($ftp);

さらに、断続的に実行されるようで、上記のエラーで失敗する場合もあれば、正常に実行される場合もあります。

4

2 に答える 2

14

サーバーがパッシブモードではないため、次のコードを追加して処理します。

ftp_pasv($ftp, true);

詳細については、php.netのパッシブモードを参照してください。http://php.net/manual/en/function.ftp-pasv.phpパッシブ モードは、サーバーではなくクライアントによって開始されたデータを使用します。だから、これがあなたがサーバーに置くことができない理由です。これが設定されていない場合、失敗します。

注:機能のftp_pasv()後にftp_login()機能を設定します。

于 2012-10-13T22:04:51.553 に答える
1

ftp_pasv()を使用した後も、問題は引き続き発生していました。サーバーへのリクエストの数がファイアウォールに問題を引き起こしていることがわかりました(foreach()ループを使用して複数のファイルをスクロールしました)。ファイアウォールルールを変更する権限がなかったため、リクエストの間にスクリプトにスリープ()を追加しました。

これが私が警告を修正した方法です。

于 2014-12-09T10:29:42.433 に答える