2

記事が長くなって申し訳ありませんが、できる限り詳しく説明したいと思います。私はstackoverflowを初めて使用しますが、過去にここで作成されたコメントが役立つことがわかったので、誰かが私を正しい方向に向けてくれることを願っています. php4.3.9 を実行している Linux サーバーがあります。

クライアントはドキュメントをアップロードして、後でリンクをクリックしてダウンロードできます。リンクをクリックすると、データベースでドキュメントを検索してヘッダーを設定し、ファイルを読み取り、クライアント コンピューターにダウンロードする php スクリプトが実行されます。完璧に動作します。同じように作業したいWord文書をその場で作成するためにプログラミングを行いましたが、サイトにリンクを追加してクリックすると、ヘッダーが設定されていてもブラウザウィンドウにゴミが出力されますワード文書なので、ダウンロードする必要があります。

あまりにも長い間それをいじった後、他のドキュメントをダウンロードするために機能することがわかっているコードを使用し、新しいファイルのすべてを文字通り、機能することがわかっているダウンロードファイルのコンテンツに置き換えることにしました。そのため、作成した新しい php ファイルを消去し、動作するダウンロード ファイルのコードに置き換えたので、php ファイル名を除いてそれらは同一です。もう一度アップロードしましたが、まだ機能しません。したがって、ダウンロードする同じドキュメントを指す同じディレクトリに同一のphpファイルがあり、あるインスタンスでは機能し、あるインスタンスでは機能しません。

次に、web-sniffer.net を使用してヘッダーを調べたところ、機能するファイルとしてこれが見つかりました。

HTTP Response Header
Name    Value   Delim
Status: HTTP/1.1 200 OK
Date:   Wed, 02 Apr 2014 18:50:53 GMT   
Server: Apache/2.0.52 (Red Hat) 
X-Powered-By:   PHP/4.3.9   
Content-Disposition:    attachment; filename=test.docx  
Connection: close   
Content-Type:   application/vnd.openxmlformats-    officedocument.wordprocessingml.document

...そして、機能しない別の場所にある同じファイルの場合...

HTTP Response Header
Name    Value   Delim
Status: HTTP/1.1 200 OK
Date:   Wed, 02 Apr 2014 18:51:15 GMT   
Server: Apache/2.0.52 (Red Hat) 
X-Powered-By:   PHP/4.3.9   
Connection: close   
Content-Type:   text/html; charset=UTF-8

コードは同じですが、Content-Dispostion ヘッダーと Content-Type ヘッダーが送信されていない、または置き換えられていない場合があり、他のインスタンスが問題なくダウンロードしている間、コンテンツまたは (単語) ドキュメントがブラウザーにゴミとして表示されます。 ???? キャッシュをクリアし、別のブラウザーや別のコンピューターを試してみましたが、結果は同じでした。どんな助けでも大歓迎です!念のために言っておきますが、両方の場所のコードはまったく同じです。作業中のphpファイルから新しいphpファイルにコピーして貼り付けました。機能する場所から機能しない場所へのリンクをコピーして、ファイル名を置き換えただけです。私がどこを見なければならないかについて何か提案はありますか?

コード:

<?php
function connecttodb($servername,$dbname,$dbuser,$dbpassword){
global $link;
$link=mysql_connect ("$servername","$dbuser","$dbpassword");
if(!$link){die("Could not connect to MySQL");}
    mysql_select_db("$dbname",$link) or die ("could not open db".mysql_error());
}

if(isset($_GET['id']))
{
$servername='xxxx';
$dbusername='xxxx';
$dbpassword='xxxx';
$dbname='xxxx';
connecttodb($servername,$dbname,$dbusername,$dbpassword);

$id=$_GET['id'];
$query   = "SELECT name, type, size, path FROM upload WHERE fileID = '$id'";
$result  = mysql_query($query) or die('Error, query failed');
list($name, $type, $size, $filePath) = mysql_fetch_array($result);
$name=str_replace(","," - ",$name); 
header("Content-Disposition: attachment; filename=$name");
header("Content-length: $size");
header("Content-type: $type");
readfile($filePath);
mysql_close($link);
}
?>
4

0 に答える 0