0

ftp_get に少し問題があります。Centos 6 で実行されているローカル開発サーバーで実行すると、スクリプトは機能しません。

私はスタック オーバーフローについていくつかの調査を行い、ほとんどのソリューションを試してみましたが、機能しませんでした。

Centos 5.x + cPanel を実行している運用サーバーで同じスクリプトをテストしましたが、動作しています。

ローカルサーバーでこれが発生する原因は何ですか?

ファイル転送が機能するための特定の設定はありますか?

これまでに試したことのリストは次のとおりです。

  • エラー、error_reporting(E_ALL)およびエラーがあるかどうかを確認します。それらはありませんでした。

  • パッシブ接続ですftp_pasv($connection, true)が、何も変わりません。

  • 転送モード、FTP_BINARY と FTP_ASCII を試しました。何も変わりません。

  • ファイルハンドラーを使用してローカルサーバーに保存しようとしましたが、どちらも機能しませんでした。

元のスクリプトはバッチで実行されます (指定されたファイル名のフォルダー内のすべてのファイルをダウンロードします)。そのスクリプトを実行すると、ファイルの 3/4 が「dev」サーバーに正常に転送されたと言えます。

それらの約1/4だけが「失敗」したと言います。そのため、次のスクリプトを使用して、バッチ転送中に失敗したいくつかのファイルをトラブルシューティング/テスト ダウンロードしました。

このスクリプトを使用した転送にも失敗しました。

遠隔サーバーのすべての権限 (chmod) を確認しました。すべてが 666 に設定されています。

これが私が使用しているコードです。php.netの例と非常によく似ています

// Connection to ftp
$connection = ftp_connect($hostname);

// Login to the FTP
$login = ftp_login($connection, $username, $password);

// Passive might help?
ftp_pasv($connection, true);

// Test login
if ((!$connection) || (!$login)) {
    echo "FTP Connection failed<br /><br />";
    exit;
} else {
    echo "Connection success<br /><br />";
}

$local_file = 'file.zip';
$server_file = 'file.zip';

// Download and save file
if (ftp_get($connection, $local_file, $server_file, FTP_ASCII)){
    echo "Download win <br />";
} else {
    echo "Download failed <br />";
}

御時間ありがとうございます、

4

1 に答える 1

1

最初に、ローカルの centos マシンのコマンドライン/シェルから同じことを確認してみてください。「ftp」コマンドを使用して、そこで動作するかどうかを確認してください。ほとんどの場合、ファイアウォールの問題のように思えます。

于 2013-01-17T19:05:54.120 に答える