2011-07-06 3 views
6

私のPHPスクリプトは、.sqlファイルの内容を出力しています。PHP - それは私のDelphiデスクトップクライアントからPOSTリクエストによって呼び出された後にクライアントに自身のサイズを公開(そのクライアントがダウンロードしているどのくらい知っている)

はここで何が起こっているかである。

  1. 私のデスクトップクライアントは、私のPHPスクリプトにPOSTリクエストを送信します。
  2. スクリプトは、mysqldumpを呼び出し、ファイル生成 - その後、印刷して、それがSQLファイルを削除しかる後、デスクトップクライアントに戻しますinclude "xdb_backup.sql";xdb_backup.sql
  3. スクリプトを。

問題は、SQLファイルのサイズが変わる可能性があることです(テストのために、6メガバイトです)。しかし私は、PHPスクリプトは、それはサイズです公開されていない、私のデスクトップクライアントは、進行状況を表示できるようにしたいので、私は割り当てるには何のProgressbar.Max値を持っていません。

は、どのように私は私のPHPスクリプトは、クライアントは、それがbefore the whole thing is overでどの程度の大き知っているようにすることができますか?

注:このスクリプトは、それを破壊する必要があるため、SQLファイルをダウンロードするには、オプションではありません。 :)

+0

の大きさで、私はこれがあるフィールドどのように多くのデータをもとに大まかな近似を作り、どのように大きな、彼らがする傾向がされてやって見ることができる唯一の方法はContent-Lengthヘッダを設定することができます。しかし、Q 1 – Obto

+0

@Obto非常に興味深いが+1いただきありがとうございます:) - 答えはいえ簡単だったが判明します。 :) – Jeff

答えて

10

は、サーバーにファイルサイズを取得し、付属の次の行にヘッダを返すための$ file_pathには、生成されたファイルxdb_backup.sqlへのパスになります

$fsize = filesize($file_path); 

を行うだろう。

header("Content-Length: " . $fsize); 

ダウンロード用のPHPスクリプトについて説明しているhttp://www.hotscripts.com/forums/php/47774-download-script-not-sending-file-size-header-corrupt-files-since-using-remote-file-server.htmlをご覧ください。

+0

パーフェクト:) - 受け入れられる! – Jeff

1

あなたはheader機能を使用してContent-Lengthヘッダを送信する必要があります。このような何か:

header('Content-Length: '.filesize('yourfile.sql'));

あなたはreadfileを使用しての代わりに、インクルードファイルを送信することもできます。

+0

それでは、クライアントはsqlファイルの処理を開始する前にサイズを知っていますか? – Jeff

+0

'readfile'は私のアプリをフリーズさせました。 :P – Jeff

1

あなたはxdb_backup.sql

関連する問題