2017-10-27 13 views
0

コンテンツタイプを1つの変数に、ファイルの内容を別のものに戻すサードパーティのAPI呼び出しからファイルデータを受け取ります。ファイルの内容は「ガベージコード」です。たとえば:ファイルデータがあります(ガベージコード) - 実際のファイルをダウンロードする必要があります

$doc->fileContents = "A�[�j쎪A����Kb����m��= ...."; 
$doc->fileType = "application/msword"; 

私は、ファイルをダウンロードするための私のユーザーのクリック可能な方法を提供することができるようにする必要がありますが、単にファイルに内容を書き込み、そのコンテンツタイプをダウンロードを強制することは、単純にすべてのことを含むファイルを開きますゴミ...実際のファイルの内容ではありません。

EDIT:パトリック・Qの要求ごとに、私はそれを標準fwriteの道でした:

$fp = fopen($filename, 'w'); // filename is generated elsewhere 
fwrite($fp, $doc->fileContents); 
fclose($fp); 

をそこで質問ですが、私はこのゴミのうち、本当の、使用可能なファイルを作成するにはどうすればよいですか?

+0

。おそらく*実際のファイルデータです。 – rickdenhaan

+0

"コンテンツをファイルに書き込んでそのコンテンツタイプでダウンロードを強制する"。試したところでコードを表示できますか? –

+0

Patrick、修正された記事を参照してください。 fwriteを使用して、新しく開いたファイルにコンテンツを追加した後、強制的にダウンロードします。 – pixelsandcode

答えて

0

データはバイナリファイルデータのようです。最初にファイルに書き込む必要はありません.ヘッダーをbinaryに設定してダウンロードしてください。

適切な拡張子を持つファイルに$doc->fileTypeのマッピング方法が既にあると仮定していますが、application/mswordというドキュメントがあるので、ここでは.docというハードワイヤリングを使用しています。

// your logic here to determine the filename sent to the browser 
$filename = "file.doc"; 

// set the minimum appropriate HTTP headers 
header('Content-Type: ' . $doc->fileType); 
header('Content-Length: ' . strlen($doc->fileContents)); 
header('Content-Disposition: attachment; filename="' . $filename . '"'); 
header('Content-Transfer-Encoding: binary'); // this is an important one 

// send the file and stop 
echo $doc->fileContents; 
exit; 

あなたはは必ずバイナリモードで開き作る、それが最初のファイルへの書き込みている場合:「ごみ」は、バイナリデータのようになっていることを

$fp = fopen($filename, 'wb'); 
fwrite($fp, $doc->fileContents); 
fclose($fp); 
+0

ビンゴ!ありがとう、リック! – pixelsandcode

関連する問題