0

000webhost (無料) から godaddy (有料) サーバーに切り替えたばかりですが、これまでのところ、000webhost の 10 倍悪い >.>

とにかく、私の問題はダウンロードにあります。次のコードを使用すると、ユーザーが rar ファイルをダウンロードできるように 000webhost で問題なく動作しましたが、godaddy では rar ファイルがアーカイブ エラーの終了を返します。FTP経由で確認しましたが、アップロードによってファイルが破損していません

<?php
$userAgent = $_SERVER['HTTP_USER_AGENT'];
$IP1 = $_SERVER['HTTP_X_FORWARDED_FOR'];
$IP2 = $_SERVER['REMOTE_ADDR'];
$HWID = $_GET['HWID'];
date_default_timezone_set('America/New_York');
$date = date("m/d/y g:i:sA", time());
$file = $_GET['file'];

file_put_contents('Logs/Downloaded.txt', "IP: " . $IP2 . " Downloaded On: " . $date . " File: " . $file . " User Agent: " . $userAgent . "\n", FILE_APPEND);



$path = "files/";
$fullPath = $path.$file;

if(file_exists($fullPath)){
if ($fd = fopen ($fullPath, "r")) {
    $fsize = filesize($fullPath);
    $path_parts = pathinfo($fullPath);
    $ext = strtolower($path_parts["extension"]);
    switch ($ext) {
        case "pdf":
        header("Content-type: application/pdf"); // add here more headers for diff. extensions
        break;
        case "zip":
        header("Content-type: application/zip");
    break;
        default;
        header("Content-type: application/octet-stream");
    }
    header("Content-Disposition: attachment; filename=\"".$path_parts["basename"]."\"");
    header("Content-length: $fsize");
    header("Cache-control: private"); //use this to open files directly
    while(!feof($fd)) {
        $buffer = fread($fd, 2048);
        echo $buffer;
    ob_flush();
        flush(); 
    }
}
fclose ($fd);
exit;
}else{
    die("File could not be found");
}
?>
4

1 に答える 1

0

スクリプトは完了しますか? 完了することを確認する必要がある場合がありますset_time_limit(0)

もう 1 つは、ダウンロードしたファイルを 16 進エディタで開き、異常を探すことです。そこに PHP の警告があるのではないかと思います。出力ループで呼び出しob_flushていますが、私が知る限り、出力バッファリングを実行していません。警告がトリガーされ、出力が破損している可能性があります。

于 2013-07-03T07:04:23.223 に答える