2016-12-22 5 views
1

私は開発中のWebアプリケーションで奇妙な問題に直面しています。別の2つのPHPスクリプトから同じファイルをダウンロードしようとすると、 MS Wordによってcorruptとして検出されました。MS Word異なるPHPスクリプトからダウンロードするとファイルが破損する

enter image description here

どちらのスクリプトはまったく同じコード、一方が他方のリテラルコピーであるが含まれています。

ob_start(); 

header('Content-Description: File Transfer'); 
header("Content-Type: $contentType"); 
header('Content-Disposition: attachment; filename='.basename($file)); 
header('Content-Length: ' . filesize($file)); 
ob_clean(); 

readfile($file); 
exit; 

Apache 2.4とPHP7を実行しているWindowsサーバー2012を使用しています。私は生産と開発のために2つの異なるフォルダ/app//appBeta/をそれぞれ使用します。

プロダクションフォルダ内のダウンロードスクリプトからファイルをダウンロードするように要求すると、破損したファイルが取得されます。

私は開発フォルダ内のダウンロードスクリプトから同じファイルを要求しても問題ありません。ファイルが実動フォルダの内側にあることに注意してください。実動と開発の両方がドキュメントルートにあります。ここで

は、両方のダウンロードのリクエスト/レスポンスヘッダーは、次のとおりです。

生産(壊れた) enter image description here 開発(破損していない) enter image description here

私が気づいたもう一つは、間の相違であります"Origin"データはファイルに含まれています。私がでてる

生産(壊れた)

enter image description here

開発(破損していない)

enter image description here

(右[ファイル] - > [プロパティ] - > [詳細]をクリックします)これを引き起こしている可能性があるための損失、私はApacheや権限で何かを疑う...誰も何が起こっているか考えているここに?

EDIT:このファイルは、本番フォルダー内の既存の静的ファイルです。生成されたファイルではありません。

+0

ファイルが実際に運用サーバー上に存在していますか? – cmorrissey

+0

はい、申し訳ありませんが質問を更新しました。 –

答えて

0

私はちょうど単語のdocジェネレータで同様の問題がありました。混在したエンコードが問題だったことが判明しました。エンコーディングの問題を標準化するForceUTF8ライブラリを通じてすべてのものを供給することによって、問題を解決するための管理:その後、機能的なWord文書にレンダリング

use \ForceUTF8\Encoding; 

$output = Encoding::toUTF8($raw_input); //where $raw_input is your unsanitized source data 

$output。あなたのケースでは、ファイルが既存の静的ファイル(元の質問には記載されていない)である場合、レスポンスヘッダーによっても定義されたエンコードの問題がある可能性があります。

あなたはここで、セットアップ手順については、彼らのgithubのページを参照してください、これを使用するプロジェクトでForceUTF8ライブラリを含める必要があります。 https://github.com/neitanod/forceutf8

+0

はい、既存の静的ファイルです。私は質問を更新しました。 –

関連する問題