1

私はftpのようなものを作ろうとしています。私は、アプリケーションがwampに設定された自家製のサーバーを持っています。また、すべてのファイルをwampフォルダーに保持したくないので、このアプリケーションからローカルファイルにもアクセスします。

私はこれを行うことができず、ブラウザは私にこのようなことをさせてくれないという多くのスタッフをすでに読んでいます。しかし、私はそれをなんとかして管理しました。

これは私がファイルをダウンロードするために使用するコードです:

 function getFile($name,$path) {
    if(file_exists($path.$name)) {
        $name = urldecode($name);
        $fsize = filesize($path.$name); 

        header("Content-disposition: attachment; filename=\"".$name."\"");
        header("Content-type: application/force-download");
        header("Content-length: ".$fsize);

        echo file_get_contents($path.$name);
    }

そして、それは彼らがどんな拡張子を持っていても小さなファイルのために働きます、しかし私はまた200Mb以上のいくつかの.exeファイルをダウンロードしなければなりません。

私はすでにphp.iniでmemory_limitを設定しました。これが最初の問題の原因でしたが、今ではERROR:324が発生します。

それを乗り越える方法はありますか?

4

1 に答える 1

0

file_get_contentsは、最初にメモリ内のファイルを読み取り、次にそれを返します。ファイルサイズが200MBの場合、1つのスクリプトに200MBを超えるメモリが必要です。

修正するには、ファイルをブロックごとに読み取って出力する必要があります。

例えば

$fp = fopen($path.$name, "rb");
if ($fp) {
    while(!feof($fp)) {
        $str = fread($fp, 1024);
        echo $str;
    }
    fclose($fp);
}
于 2012-12-14T11:45:21.897 に答える