1

API への呼び出し (PHP サーバー) を行っており、応答を得ていることを確認できます。応答を得ていることがわかっている時点でのコードは次のとおりです。

$binaryF = $rsObject->makeCall('get', "/JobData/{$_GET["jID"]}", "?format=bin");

//header("Pragma: public"); // required
//header("Content-Type: application/zip");
//header("Content-Disposition: attachment; filename=ss.zip");
//header("Content-Length: " . filesize($binaryF.length));
//header("Content-Transfer-Encoding: binary");

file_put_contents('C:\ss.zip', $binaryF);

コードをそのままにして、このコードが記載されたページに移動するリンクをクリックすると、ss.zip が作成され、それを開いて正しい内容であることを確認します。データは最初の行の API 呼び出しから取得され、基本的に zip パッケージです。コメントを削除して file_put_contents 行をコメント アウトすると、ブラウザはファイル保存ダイアログ ボックスを開きますが、保存するとアーカイブは 0 バイトになりますか?

API 呼び出しから取得したコンテンツをブラウザーに送信するにはどうすればよいですか? 最初にディスクに保存したくありません。リクエストを直接行うブラウザに送信したいのです。

ありがとうジャック

Ok。私はそれを次のように変更しました:

header("Pragma: public"); // required
header("Content-Type: application/zip");
header("Content-Disposition: attachment; filename=ss.zip");
header("Content-Length: " . strlen($binaryF));
header("Content-Transfer-Encoding: binary");

そして今、ファイルの保存を開きます。保存して 8 K ですが、開こうとすると、「Windows はフォルダーを開けません」というメッセージが表示されます。zip が無効であると訴えます。少なくとも私はどこかに到達しています。これまでの助けに感謝します!

4

4 に答える 4

0

わかりました、@ zerkmsは私が使用する必要があることを指摘することで私を助けました:filesize($ binaryF.length)の代わりにstrlen($ binaryF)彼は私にzipアーカイブを開くように言ってチャットセッションで私を助けました(メモ帳のような単純なもので) file_put_contents('C:\ ss.zip'、$ binaryF);で取得したもの これは、生成されたものが部分的にしか正しくないことを示しており、実際の呼び出しの応答に滑り込んだHTMLコンテンツがいくつかありました。おかげで、すべてのクレジットは@zerkmsに送られます。

何がうまくいったの?以下は私のために働いた:

header("Pragma: public"); // required
header("Content-Type: application/zip");
header("Content-Disposition: attachment; filename=ss.zip");
header("Content-Length: " . filesize($binaryF.length));
header("Content-Transfer-Encoding: binary");

echo $binaryF
于 2012-11-05T00:33:24.380 に答える
0

私は、PDF をサポートしていないため、Content-Length正しく計算できませんでした。strlen()multibyte-characters

代わりにこれを試してください:

header("Content-Length: " . mb_strlen($binaryF));

詳細については、ドキュメントを参照してください: http://www.php.net/manual/en/function.mb-strlen.php

于 2012-11-03T00:15:00.263 に答える
0

試してください(未テスト):

header('Content-type: application/octet-stream');
header('Content-disposition: attachment; filename=ss.zip');

echo $binaryF;
于 2012-11-02T23:54:02.270 に答える
0

$binaryF動作させるには、提供しようとしているファイルへのファイルパスの文字列値である必要がありますfilesize()

strlen()を使用して、ContentLength ヘッダーで使用するファイル サイズを取得できます。

もちろん、実際にファイルをクライアント ブラウザに出力する必要があります。

于 2012-11-02T23:55:19.807 に答える