4


1

ftp_putは空のファイルをアップロードします

ftp_putを介してWindowsサーバーにファイルをアップロードしようとしています。

私のコードは次のとおりです。

    $date           = date('ymd');
    $file_name      = $date.'.csv';
    $file_location  = 'D:/inetpub/wwwroot/website.com/html/assets/'.$file_name;

//set up basic connection
$conn_id = ftp_connect(FTP_HOST, FTP_PORT);

// login with username and password
$login_result = ftp_login($conn_id, FTP_USER, FTP_PASS);

// check connection
if ((!$conn_id) || (!$login_result)) {
    echo "FTP connection has failed!";
    exit;
}  else {
    echo "Connected to FTP Server";
}

$upload = ftp_put($conn_id, $file_name, $file_location, FTP_ASCII);

// check upload status
if (!$upload) {
    echo "FTP upload has failed!";
} else {
    echo "File Uploaded";
}

// close the FTP stream
ftp_close($conn_id);

filezillaを使用して手動でファイルをアップロードすると、完全に機能します。 上記のコードを使用すると、空のファイルが作成されます。

5 Answer


12


パッシブモードを有効にしてファイルを転送してみてください。


7


このようにFTP_ASCIIの代わりにFTP_BINARYを使用してみてください。

$upload = ftp_put($conn_id, $file_name, $file_location, FTP_BINARY);

PHP ftpにはバグがありますが、バイナリ転送モードではほとんど機能することがわかりました。


1


UKFastが接続と転送をブロックしていたことがわかりました。 (また、アクティブモードのみであることも必要です)。

これでブロックが解除され、完全に機能しています。 (タイムアウトする前に)


1


パッシブモードをオンにします

  ftp_pasv($conn_id, true);


0


この部分を追加したとき、「Khan Muhammad」に答えてくれてありがとう。

_ ftp_pasv($ conn_id、true); _

ファイルは完全にアップロードされました。