0

わかりましたので、ダウンロードしたブラウザから実行すると、データベースからcsvファイルを実行して作成するスクリプトがあります。

しかし、私は自分のサーバーから別のサーバーにファイルを公開したいと考えています。

私はこのコードでそれをやろうとしましたが、うまくいかないようです.ファイルが書かれていません. FTPアカウントの詳細も間違っていてもログインOKが返ってきます。

// header("Content-type: application/octet-stream");
// header("Content-Disposition: attachment; filename=sailings.txt");
// header("Pragma: no-cache");
// header("Expires: 0");
// print "$header\n$data";

//Connect to the FTP server
$ftpstream = ftp_connect('ftp server address');

//Login to the FTP server
$login = ftp_login($ftpstream, 'user', 'password');
if($login) {
echo "logged in ok";
//We are now connected to FTP server.
//Create a temporary file
$temp = tmpfile();
fwrite($temp, $header."\n");
fwrite($temp, $data);
fseek($temp, 0);
echo fread($temp, 0);

//Upload the temporary file to server
ftp_fput($ftpstream, '/sailings.txt', $temp, FTP_ASCII);

//Make the file writable only to owner
ftp_site($ftpstream,"CHMOD 0644 /sailings.txt");
}

//Ftp session end
fclose($temp);
ftp_close($ftpstream);

誰でも私にアドバイスできますか?

ありがとう

リッチ :)

4

1 に答える 1

0

問題は、tmpfile 関数がファイルのハンドルを返し、ftp_put 関数がアップロードするファイルのパスと名前を受け取る必要があることです。この意味で、これら 2 つの命令の操作にはミスマッチがあります。

これを解決するには:

$f = tempnam("/tmp", "FOO");
$temp = = fopen($f, "w");
fwrite($temp, $header."\n");
fwrite($temp, $data);
fseek($temp, 0);
echo fread($temp, 0);

//Upload the temporary file to server
ftp_put($ftpstream, '/sailings.txt', $f, FTP_ASCII);

// The rest is the same as you have

この解決策を試してみてください。

編集:フェリペのコメントに感謝します。ftp_fputを適切に使用しています。それにもかかわらず、問題が解決せず、それでも立ち往生する場合は、与えられた戦略を使用して何が起こるかを確認できます。

于 2012-11-24T10:11:52.080 に答える