Rumah > Artikel > pembangunan bahagian belakang > Apakah yang perlu saya lakukan jika ralat 500 berlaku apabila php exports excel?
Penyelesaian kepada ralat 500 semasa mengeksport excel menggunakan PHP: Gunakan kaedah [PHPExcel_Settings::setCacheStorageMethod()] untuk menetapkan cache dengan menghantar kaedah cache sebagai parameter kepada kaedah ini.
Persekitaran pengendalian artikel ini: sistem Windows 10, PHP 7, komputer thinkpad t480.
Saya rasa ramai kawan yang menghadapi masalah mengeksport excel. Tetapi anda akan mendapati bahawa ia tidak semudah itu apabila mengeksport sejumlah besar data Eksport selalunya disertai dengan beberapa masalah masa tamat atau limpahan memori. Mari kita lihat penyelesaian di bawah.
PHPExcel ialah kelas sumber terbuka PHP yang sangat berkuasa untuk memproses Excel, tetapi masalah besar ialah ia mengambil terlalu banyak memori Bermula dari 1.7.3, ia menyokong penetapan kaedah cache sel, tetapi ia disyorkan untuk menggunakan versi semasa yang stabil 1.7.6, kerana versi sebelumnya mempunyai pepijat pada tahap yang berbeza-beza.
PHPExcel menggunakan 1k/sel memori secara purata, jadi dokumen yang besar akan menggunakan memori dengan cepat. Mekanisme caching sel membolehkan PHPExcel mencache objek sel kecil dalam memori pada cakera atau dalam APC, memcache atau Wincache Walaupun ia akan mengambil sedikit masa untuk membaca data, ia boleh membantu anda mengurangkan penggunaan memori.
Secara lalai, PHPExcel masih menyimpan objek sel dalam ingatan, tetapi anda boleh menyesuaikannya. Anda boleh menggunakan kaedah PHPExcel_Settings::setCacheStorageMethod() dan lulus kaedah caching sebagai parameter kepada kaedah ini untuk menetapkan kaedah caching.
Kod Php:
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_in_memory; PHPExcel_Settings::setCacheStorageMethod($cacheMethod);
Kaedah setCacheStorageMethod() akan mengembalikan pembolehubah BOOL untuk menunjukkan sama ada tetapan itu berjaya (contohnya, jika APC tidak boleh digunakan, anda tetapkan untuk menggunakan APC cache, Akan mengembalikan palsu)
Setiap lembaran kerja akan mempunyai cache bebas Apabila lembaran kerja dibuat instantiat, ia akan dibuat secara automatik mengikut kaedah cache yang ditetapkan atau dikonfigurasikan. Sebaik sahaja anda mula membaca fail atau anda telah mencipta lembaran kerja pertama anda, anda tidak boleh menukar kaedah caching.
Pada masa ini, kaedah caching berikut tersedia:
Kod Php:
PHPExcel_CachedObjectStorageFactory::cache_in_memory;
Secara lalai, jika anda tidak memulakan sebarang kaedah caching, PHPExcel akan menggunakan cache Memori kaedah.
=========================================================== == ===
Kod Php:
PHPExcel_CachedObjectStorageFactory::cache_in_memory_serialized;
Menggunakan kaedah caching ini, sel akan disimpan dalam ingatan secara bersiri, yang merupakan cara prestasi yang agak tinggi untuk mengurangkan penggunaan memori Satu rancangan.
=========================================================== ====
Kod Php:
PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip;
Serupa dengan kaedah bersiri, kaedah ini melakukan pemampatan gzip selepas bersiri dan kemudian memasukkannya ke dalam memori, yang akan lebih Mengurangkan lagi penggunaan memori, tetapi akan menjadi sedikit perlahan apabila membaca dan menulis.
=========================================================== == ===============
Kod Php:
PHPExcel_CachedObjectStorageFactory::cache_to_discISAM;
Apabila menggunakan cache_to_discISAM, semua sel akan disimpan dalam fail cakera Sementara sahaja menyimpan lokasi mereka dalam fail dalam memori PHP Ini lebih perlahan daripada mana-mana kaedah cache dalam memori, tetapi boleh mengurangkan penggunaan memori dengan ketara. Fail cakera sementara akan dipadamkan secara automatik apabila skrip tamat.
=========================================================== == ===============
Kod Php:
PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp;
Serupa dengan cache_to_discISAM, apabila menggunakan cache_to_phpTemp, semua sel akan tetap wujud php: //temp I/O strim, hanya simpan kedudukan mereka dalam ingatan PHP. php://memory wrapper PHP menyimpan data dalam memori php://temp berkelakuan serupa, tetapi apabila saiz data yang disimpan melebihi had memori, data akan disimpan dalam fail sementara. tetapi anda boleh mengubah suainya semasa permulaan:
Kod Php:
$cacheMethod = PHPExcel_CachedObjectStorageFactory:: cache_to_phpTemp; $cacheSettings = array(’memoryCacheSize’ => ’8MB’ ); PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings); php://temp文件在脚本结束是会自动删除。
========================== ======================================
Kod Php:
PHPExcel_CachedObjectStorageFactory::cache_to_apc;
Apabila menggunakan cache_to_apc, sel disimpan dalam APC dan hanya indeks disimpan dalam ingatan. Tamat masa cache APC lalai ialah 600 saat, yang cukup untuk kebanyakan aplikasi Sudah tentu, anda juga boleh mengubah suainya semasa pemula:
Kod Php:
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_APC; $cacheSettings = array(’cacheTime’ => 600 ); PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);
Apabila skrip tamat , semua data akan dikosongkan daripada APC (mengabaikan masa cache), dan mekanisme ini tidak boleh digunakan sebagai cache berterusan.
=========================================================== == ===============
Kod Php:
PHPExcel_CachedObjectStorageFactory::cache_to_memcache
Apabila menggunakan cache_to_memory, objek sel disimpan dalam memcache dan hanya dalam memori indeks. Secara lalai, PHPExcel akan mencari perkhidmatan memcache pada localhost dan port 11211, dengan tamat masa 600 saat Jika anda menjalankan perkhidmatan memcache pada pelayan lain atau port lain, anda boleh mengubah suainya semasa permulaan:
Php. kod:
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_memcache; $cacheSettings = array( ’memcacheServer’ => ’localhost’, ‘memcachePort’ => 11211, ‘cacheTime’ => 600 ); PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);
Dari perspektif tetapan permulaan, MS belum lagi menyokong kaedah pengundian berbilang pelayan memcache, yang sayangnya.
Apabila skrip tamat, semua data akan dikosongkan daripada memcache (mengabaikan masa cache), dan mekanisme ini tidak boleh digunakan untuk storan berterusan.
=========================================================== == ===============
Kod Php:
PHPExcel_CachedObjectStorageFactory::cache_to_wincache;
使用cache_towincache方式,单元格对象会保存在Wincache中,只在内存中保存索引,默认情况下Wincache过期时间为600秒,对绝大多数应用是足够了,当然也可以在初始化时修改:
Php代码:
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_wincache; $cacheSettings = array(’cacheTime’ => 600); PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);
PHPExcel还是比较强大的,最大的问题就是内存占用的问题,PHPExcel啥时候能出一个轻量级的版本,不需要那么多花哨的功能,只需要导出最普通的数据的版本就好了!
推荐学习:php培训
Atas ialah kandungan terperinci Apakah yang perlu saya lakukan jika ralat 500 berlaku apabila php exports excel?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!