Mit der Laravel-Excel-Erweiterung k?nnen Sie schnell mehr als 10.000 Excel-Daten importieren, ohne die Serverkonfiguration zu ?ndern, ohne einen 500-Fehler zu melden. Vielen Dank
這種情況一般是內(nèi)存占用超過(guò)php最大允許的配置或者執(zhí)行時(shí)間太長(zhǎng)而超時(shí)。如果直接使用Laravel excel擴(kuò)展,基于web上傳的方式導(dǎo)入的話肯定會(huì)超時(shí)同時(shí)也肯定超過(guò)內(nèi)存大小限制了的。
解決辦法是使用Laravel的定時(shí)任務(wù)或者任務(wù)隊(duì)列。
定時(shí)任務(wù)
上傳文件后,定時(shí)任務(wù)去檢查是否有新上傳的文件,如果有就執(zhí)行導(dǎo)入處理。
任務(wù)隊(duì)列
上傳文件后,發(fā)布一個(gè)異步事件,由任務(wù)listener去異步處理excel內(nèi)容的導(dǎo)入。
最后導(dǎo)入完成后再將導(dǎo)入結(jié)果寫(xiě)入數(shù)據(jù)庫(kù)或者其它存儲(chǔ)方式,這樣異步的對(duì)數(shù)據(jù)進(jìn)行導(dǎo)入就不會(huì)因?yàn)閮?nèi)存或者超時(shí)而報(bào)錯(cuò)了。
很正常。經(jīng)常遇到這個(gè)。所以我開(kāi)發(fā)了一個(gè)擴(kuò)展。
https://git.oschina.net/xavie...
https://github.com/xavieryang...
PHP導(dǎo)入xls問(wèn)題很嚴(yán)重,xlsx由于是壓縮包加xml,比xls要很好。xls是二進(jìn)制文件,必須全部加載才可以解析,而且解析比較復(fù)雜,目前比較流行的PHPEXCEL處理xls速度非常慢,導(dǎo)入xls的時(shí)候往往都死在了解析。
不用一次吧1W條讀入內(nèi)存 一條一條讀,一條一條存
function getRows($file)
{
$handle = fopen($file, 'rb');
if (!$handle) {
throw new Exception();
}
while (!feof($handle)) {
yield fgetcsv($handle);
}
fclose($handle);
}
foreach (getRows('data.csv') as $k) {
}