1

次のコードを使用して、250mb のような大きなファイルをダウンロードします。

if(file_exists($leadon)) 
    {
        set_time_limit(0);
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename='.$file_name);
        header('Content-Transfer-Encoding: binary');
        header('Expires: 0');
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Pragma: public');
        header('Content-Length: ' . filesize($leadon));
        header('Content-Description: File Transfer');
        ob_clean();
        flush();
        readfile($leadon);
        exit;
    }
    die();

ただし、ファイルはインターネットの速度に応じて 18 MB から 75 MB のように部分的にダウンロードされます。サーバー管理者から、私は 500 エラー コード (内部エラー) をトリガーしているとのことで、サーバー セキュリティは攻撃を受けていると見なし、私の IP をブロックします。

それを一時ディレクトリにコピーし、ユーザーがヘッダー (リダイレクト) でダウンロードできるようにし、24 時間以上経過したファイルを削除すると、ページがリロードされ、他のファイルのダウンロードが要求されます。以下にコードを示します。より良い解決策があれば教えてください。

if(file_exists($leadon)) 
        {
            $temp_folder    =   time();
            $olderTime      =   $temp_folder-(24*60*60);
            $temp_dir   =   $tempdir.$temp_folder;
            create_dir($temp_dir, 0775);
            $dirs   =   glob($tempdir.'*'); // get all file names
            foreach($dirs as $dir)
                { // iterate files
                if(is_dir($dir)) 
                    {
                    $temp_dir_name  =   explode('/',$dir);
                    $dir_name       =   $temp_dir_name['1'];
                    if(intval($dir_name) < intval($olderTime))
                        {
                        deleteDir($dir);
                        }
                    }
                }
            set_time_limit(0); //Set the execution time to infinite.
            $file_name  =   str_replace(' ', '_',  basename($leadon));
            // 
            $temp_file  =   $temp_dir."/".$file_name;
            copy($leadon, $temp_file);
            header('Location: '.$doman_name.'/'.$temp_file);
            exit();
        }
4

1 に答える 1

0

PHP を使用して出力としてファイルを作成するのはなぜですか? Web サーバーのディレクトリのどこかにファイルを保持し、ユーザーを同じディレクトリにリダイレクトするのはどうですか? ファイルを提供するタスクは Web サーバーに任せてくださいね。

于 2012-08-29T08:03:50.997 に答える