第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Storage::append() 中“Allowed memory size

Storage::append() 中“Allowed memory size

PHP
千巷貓影 2023-03-26 14:50:48
我用 Laravel 實(shí)現(xiàn)了一個(gè)代碼來(lái)處理塊上傳,如下所示。// if total size equals length of file we have gathered all patch filesif ($size == $length) {    // write patches to file    foreach ($patch as $filename) {        // get offset from filename        list($dir, $offset) = explode('.patch.', $filename, 2);        // read patch and close        $patch_contents = Storage::disk('tmp')->get($filename);        // apply patch        Storage::disk('tmp')->append($dir . $name, $patch_contents, "");    }    // remove patches    foreach ($patch as $filename) {        Storage::disk('tmp')->delete($filename);    }}問(wèn)題是大文件會(huì)出現(xiàn)以下錯(cuò)誤。"Allowed memory size of 134217728 bytes exhausted (tried to allocate 160000008 bytes)"我知道錯(cuò)誤與 append 方法有關(guān)。我根據(jù)此鏈接中的解決方案解決了問(wèn)題,如下所示。// if total size equals length of file we have gathered all patch filesif ($size == $length) {    $time_limit = ini_get('max_execution_time');    $memory_limit = ini_get('memory_limit');    set_time_limit(0);    ini_set('memory_limit', '-1');    // write patches to file    foreach ($patch as $filename) {        // get offset from filename        list($dir, $offset) = explode('.patch.', $filename, 2);        // read patch and close        $patch_contents = Storage::disk('tmp')->get($filename);        // apply patch        Storage::disk('tmp')->append($dir . $name, $patch_contents, "");    }    // remove patches    foreach ($patch as $filename) {        Storage::disk('tmp')->delete($filename);    }    set_time_limit($time_limit);    ini_set('memory_limit', $memory_limit);}但是我對(duì)這個(gè)解決方案沒(méi)有很好的感覺(jué)!我的問(wèn)題是,首先,為什么append方法會(huì)出現(xiàn)這樣的錯(cuò)誤呢?解決方案是否合適?另一方面,Laravel 對(duì)這個(gè)問(wèn)題的解決方案是什么?
查看完整描述

1 回答

?
墨色風(fēng)雨

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超6個(gè)贊

根本原因似乎在append的來(lái)源。

$this->put($path,?$this->get($path).$separator.$data);

這將獲取文件內(nèi)容,然后連接數(shù)據(jù)并將文件放回原處。不知道為什么這樣做,但我猜這是因?yàn)樗写鎯?chǔ)類(lèi)型都不支持以追加模式打開(kāi)文件,并且必須Storage實(shí)現(xiàn)CloudFilesystemContract這意味著它適用于云存儲(chǔ)(你通常不能“追加” " 到一個(gè)文件)。

深入挖掘可以發(fā)現(xiàn) Laravel 的“驅(qū)動(dòng)程序”由FlysystemStorage支持,并且其接口中不包含功能,因此 Laravel 只能使用提供的接口方法來(lái)實(shí)現(xiàn)一個(gè)功能。append

您始終可以推出自己的解決方案:

// if total size equals length of file we have gathered all patch files

if ($size == $length) {

? ? // write patches to file

? ? foreach ($patch as $filename) {

? ? ? ? // get offset from filename

? ? ? ? list($dir, $offset) = explode('.patch.', $filename, 2);


? ? ? ? // read patch and close

? ? ? ? $patch_contents = Storage::disk('tmp')->get($filename);


? ? ? ? // apply patch

? ? ? ? $fhandle = fopen($dir.$name, "a"); // You may need to adjust the filename?

? ? ? ? fwrite($fhandle, $patch_contents);

? ? ? ? fclose($fhandle);

? ? }


? ? // remove patches

? ? foreach ($patch as $filename) {

? ? ? ? Storage::disk('tmp')->delete($filename);

? ? }

}


查看完整回答
反對(duì) 回復(fù) 2023-03-26
  • 1 回答
  • 0 關(guān)注
  • 104 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)