0

私は一日中この問題に取り組んできました。数時間前、私はこの質問を書きました。開発用 PC では問題なく動作する PHP スクリプトを持っていますが、実際のサーバーではうまく動作しません。

スクリプトは次のとおりです。

$conn_id = ftp_ssl_connect($ftp_server); 
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); 

//$DB = @mysqli_connect($hostname_DB,$username_DB,$password_DB,$database_DB); 

if ($login_result == null)
    die("Cannot connect");   
echo "Connected<br />Changing to passive mode <br />"; 

if (ftp_pasv($conn_id, true)) 
{
    echo "Passive mode: ON<br /><br />";
}
else
{
    echo "Passive mode: OFF<br /><br />";
}


echo "Current dir: " . ftp_pwd($conn_id) . "\n";

if (ftp_chdir($conn_id, "ABC")) {
    echo "Current dir is now: " . ftp_pwd($conn_id) . "\n";
} else { 
    echo "Dir was not changed\n";
}

$files = array();
$files = ftp_rawlist($conn_id, '.'); 
echo "<br />Files<br />";
print_r($files);

ftp_close($conn_id);

この行で:$files = ftp_rawlist($conn_id, '.'); (line 65)スクリプトは約 1 分ほどフリーズし、次のエラーが発生します。

Connected
Changing to passive mode 
Passive mode: ON

Current dir: / Current dir is now: /ABC
Warning: ftp_rawlist(): php_connect_nonb() failed: Operation now in progress (115) in /var/www/html/ftpscript.php on line 65

Files

パッシブモードに変更しなくても、警告なしで同じ出力です。ファイルもエコーされません (「ファイル」の下)。nlist、mput、mget などのコマンドでも同じことが起こりました。

この記事を読みましたが、まだ適用されるかどうかわかりませんでした。他のサイトは私のファイアウォール設定だと言っていますが、何をすべきかわかりません。私のサーバーは実行中です:

PHP 5.4.16 (cli) (built: Oct 31 2014 12:59:36) 
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies

私はポート 20、21 を開き、5000 から 5100 の範囲でした。これらすべてで、それが私の目的ではなく PHP の問題かどうかはわかりません。lftp (cli ftp クライアント) を使用すると、問題なく動作します。

編集#1

php の ftp 実装のバグのようです。ただし、ここにリストされているパッチを適用する方法がわかりませんhttps://bugs.php.net/patch-display.php?bug_id=55651&patch=ftp_usepasvaddress.patch&revision=latest

どうぞ、どんな助けでも大歓迎です。ありがとう!

4

1 に答える 1

0

さて、PHPでcurlを使ってダウンロード・アップロードと一覧表示する関数を書き終わりました。私の知る限り、組み込みの ftp 実装を使用する場合の PHP のバグです。カールは少し遅いですが、私のニーズには問題ありません。

于 2015-07-03T02:16:57.777 に答える