PHPOffice / PhpSpreadsheet

A pure PHP library for reading and writing spreadsheet files
https://phpspreadsheet.readthedocs.io
MIT License
13.33k stars 3.46k forks source link

Improve memory management when loading xlsx files. Experiencing memory exhaustion. #960

Closed adjenks closed 5 years ago

adjenks commented 5 years ago

This is:

- [] a bug report
- [x] a feature request
- [ ] **not** a usage question (ask them on https://stackoverflow.com/questions/tagged/phpspreadsheet or https://gitter.im/PHPOffice/PhpSpreadsheet)

What is the expected behavior?

For it to use a comparable amount of memory to Microsoft Excel. Opening excel with no file uses 7MB of memory. Opening the same file (409KB) on windows increases memory usage to 26MB.

What is the current behavior?

Loading a file increases memory usage by 177MB for a very small xlsx file and causes a fatal error due to memory exhaustion. My script uses 1MB before loading the file. It uses 178MB of memory immediately after loading the 409KB file.

What are the steps to reproduce?

Please provide a Minimal, Complete, and Verifiable example of code that exhibits the issue without relying on an external Excel file or a web server:

<?php

require __DIR__ . '/vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\IOFactory;
print('</br>Before load:');
print(memory_get_usage());
$spreadsheet = IOFactory::load('./testfile.xlsx');
print('</br>After load:');
print(memory_get_usage());

Output:

Before load:1039272 After load:178805392

Before increasing the available memory for the script to 320MB, it would throw this error:

PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 4096 bytes)

Which versions of PhpSpreadsheet and PHP are affected?

phpoffice/phpspreadsheet 1.6.0

Comment:

Thank you for your hard work in making a great PHP library. I look forward to all future improvements.

franksl commented 5 years ago

I can confirm this issue, I have huge problems especially with xlsx files downloaded from google spreadsheet, I often have to delete emty rows and columns before exporting to avoid memory exaustion. Test is simple, just create a google spreadsheet with 10 sheets and about 50 rows of data for each sheet. Memory usage is lower when exporting to ods instead of xlsx

adjenks commented 5 years ago

@franksl My xlsx file needed to have custom properties. Instead of using an xlsx file with custom properties as a template, I worked around the problem by loading a csv and then adding the custom properties via the API. Loading the csv only used about 2MB of memory and loaded way faster. This is a fine workaround for me in this case, but if I had a very complex template that I needed to use, I would not want to rebuild it via the API.

franksl commented 5 years ago

@adjenks Thanks for the advice, unfortunately I have complex excel document with many sheets that are part of a complex automated system, using csv files would be overkill for me. The issue for me is that opening an xlsx document that contains about 1000 cells with significant values takes more than 256MB of memory, this is really strange.

adjenks commented 5 years ago

@franksl Have you tried an xls file instead of an xlsx file? Or tried converting it to an ods file?

franksl commented 5 years ago

@adjenks Yes, as I said in a previous comment I'm forced to use ods on some files actually and memory usage is lower, sometimes I still have problems even with ods.

ShahinSorkh commented 5 years ago

And also I'm experiencing memory leaks. This code:

require __DIR__ . '/vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\IOFactory;
print('step 0 load:  ');
print(memory_get_usage() / 1024 / 1024);
echo PHP_EOL;
$spreadsheet = IOFactory::load('/tmp/201906171316-638092745/001-201906171316.xlsx');
print('step 1 load:  ');
print(memory_get_usage() / 1024 / 1024);
echo PHP_EOL;
$spreadsheet = IOFactory::load('/tmp/201906171316-638092745/002-201906171316.xlsx');
print('step 2 load:  ');
print(memory_get_usage() / 1024 / 1024);
echo PHP_EOL;
$spreadsheet = IOFactory::load('/tmp/201906171316-638092745/003-201906171316.xlsx');
print('step 3 load:  ');
print(memory_get_usage() / 1024 / 1024);
echo PHP_EOL;
$spreadsheet = IOFactory::load('/tmp/201906171316-638092745/005-201906171316.xlsx');
print('step 4 load:  ');
print(memory_get_usage() / 1024 / 1024);
echo PHP_EOL;
$spreadsheet = IOFactory::load('/tmp/201906171316-638092745/006-201906171316.xlsx');
print('step 5 load:  ');
print(memory_get_usage() / 1024 / 1024);
echo PHP_EOL;
$spreadsheet = IOFactory::load('/tmp/201906171316-638092745/007-201906171316.xlsx');
print('step 6 load:  ');
print(memory_get_usage() / 1024 / 1024);
echo PHP_EOL;
$spreadsheet = IOFactory::load('/tmp/201906171316-638092745/008-201906171316.xlsx');
print('step 7 load:  ');
print(memory_get_usage() / 1024 / 1024);
echo PHP_EOL;
$spreadsheet = IOFactory::load('/tmp/201906171316-638092745/009-201906171316.xlsx');
print('step 8 load:  ');
print(memory_get_usage() / 1024 / 1024);
echo PHP_EOL;
$spreadsheet = IOFactory::load('/tmp/201906171316-638092745/001-201906171316.xlsx');
print('step 9 load:  ');
print(memory_get_usage() / 1024 / 1024);
echo PHP_EOL;

Produced following output:

step 0 load:  0.60233306884766
step 1 load:  162.00587463379
step 2 load:  337.64506530762
step 3 load:  355.55595397949
step 4 load:  357.38922119141
step 5 load:  364.33184051514
step 6 load:  365.58126831055
step 7 load:  364.88866424561
step 8 load:  363.29885101318
step 9 load:  339.1379776001

All loaded files are produced using the package itself. Details on files:

Ξ php/test → ls -lh /tmp/201906171316-638092745/* -d
-rw-r--r-- 1 www-data www-data 4.7M Jun 17 13:17 /tmp/201906171316-638092745/001-201906171316.xlsx
-rw-r--r-- 1 www-data www-data 3.4M Jun 17 13:19 /tmp/201906171316-638092745/002-201906171316.xlsx
-rw-r--r-- 1 www-data www-data 3.5M Jun 17 13:21 /tmp/201906171316-638092745/003-201906171316.xlsx
-rw-r--r-- 1 www-data www-data 3.6M Jun 17 13:23 /tmp/201906171316-638092745/004-201906171316.xlsx
-rw-r--r-- 1 www-data www-data 3.9M Jun 17 13:25 /tmp/201906171316-638092745/005-201906171316.xlsx
-rw-r--r-- 1 www-data www-data 4.3M Jun 17 13:27 /tmp/201906171316-638092745/006-201906171316.xlsx
-rw-r--r-- 1 www-data www-data 3.9M Jun 17 13:30 /tmp/201906171316-638092745/007-201906171316.xlsx
-rw-r--r-- 1 www-data www-data 4.9M Jun 17 13:32 /tmp/201906171316-638092745/008-201906171316.xlsx
-rw-r--r-- 1 www-data www-data 3.7M Jun 17 13:35 /tmp/201906171316-638092745/009-201906171316.xlsx

Tested with phpoffice/phpspreadsheet ^1.7 AND phpoffice/phpspreadsheet ^1.6

phpinfo()
PHP Version => 7.2.19-1+ubuntu16.04.1+deb.sury.org+1

System => Linux shahin-douran 4.15.0-47-generic #50~16.04.1-Ubuntu SMP Fri Mar 15 16:06:21 UTC 2019 x86_64
Build Date => May 31 2019 11:16:55
Server API => Command Line Interface
Virtual Directory Support => disabled
Configuration File (php.ini) Path => /etc/php/7.2/cli
Loaded Configuration File => /etc/php/7.2/cli/php.ini
Scan this dir for additional .ini files => /etc/php/7.2/cli/conf.d
Additional .ini files parsed => /etc/php/7.2/cli/conf.d/10-mysqlnd.ini,
/etc/php/7.2/cli/conf.d/10-opcache.ini,
/etc/php/7.2/cli/conf.d/10-pdo.ini,
/etc/php/7.2/cli/conf.d/15-xml.ini,
/etc/php/7.2/cli/conf.d/20-calendar.ini,
/etc/php/7.2/cli/conf.d/20-ctype.ini,
/etc/php/7.2/cli/conf.d/20-curl.ini,
/etc/php/7.2/cli/conf.d/20-dom.ini,
/etc/php/7.2/cli/conf.d/20-exif.ini,
/etc/php/7.2/cli/conf.d/20-fileinfo.ini,
/etc/php/7.2/cli/conf.d/20-ftp.ini,
/etc/php/7.2/cli/conf.d/20-gd.ini,
/etc/php/7.2/cli/conf.d/20-gettext.ini,
/etc/php/7.2/cli/conf.d/20-iconv.ini,
/etc/php/7.2/cli/conf.d/20-imagick.ini,
/etc/php/7.2/cli/conf.d/20-json.ini,
/etc/php/7.2/cli/conf.d/20-mbstring.ini,
/etc/php/7.2/cli/conf.d/20-mysqli.ini,
/etc/php/7.2/cli/conf.d/20-pdo_mysql.ini,
/etc/php/7.2/cli/conf.d/20-pdo_pgsql.ini,
/etc/php/7.2/cli/conf.d/20-pgsql.ini,
/etc/php/7.2/cli/conf.d/20-phar.ini,
/etc/php/7.2/cli/conf.d/20-posix.ini,
/etc/php/7.2/cli/conf.d/20-readline.ini,
/etc/php/7.2/cli/conf.d/20-shmop.ini,
/etc/php/7.2/cli/conf.d/20-simplexml.ini,
/etc/php/7.2/cli/conf.d/20-sockets.ini,
/etc/php/7.2/cli/conf.d/20-sysvmsg.ini,
/etc/php/7.2/cli/conf.d/20-sysvsem.ini,
/etc/php/7.2/cli/conf.d/20-sysvshm.ini,
/etc/php/7.2/cli/conf.d/20-tokenizer.ini,
/etc/php/7.2/cli/conf.d/20-wddx.ini,
/etc/php/7.2/cli/conf.d/20-xmlreader.ini,
/etc/php/7.2/cli/conf.d/20-xmlwriter.ini,
/etc/php/7.2/cli/conf.d/20-xsl.ini,
/etc/php/7.2/cli/conf.d/20-zip.ini

PHP API => 20170718
PHP Extension => 20170718
Zend Extension => 320170718
Zend Extension Build => API320170718,NTS
PHP Extension Build => API20170718,NTS
Debug Build => no
Thread Safety => disabled
Zend Signal Handling => enabled
Zend Memory Manager => enabled
Zend Multibyte Support => provided by mbstring
IPv6 Support => enabled
DTrace Support => available, disabled

Registered PHP Streams => https, ftps, compress.zlib, php, file, glob, data, http, ftp, phar, zip
Registered Stream Socket Transports => tcp, udp, unix, udg, ssl, tls, tlsv1.0, tlsv1.1, tlsv1.2
Registered Stream Filters => zlib.*, string.rot13, string.toupper, string.tolower, string.strip_tags, convert.*, consumed, dechunk, convert.iconv.*

This program makes use of the Zend Scripting Language Engine:
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.2.19-1+ubuntu16.04.1+deb.sury.org+1, Copyright (c) 1999-2018, by Zend Technologies

 _______________________________________________________________________

Configuration

calendar

Calendar support => enabled

Core

PHP Version => 7.2.19-1+ubuntu16.04.1+deb.sury.org+1

Directive => Local Value => Master Value
allow_url_fopen => On => On
allow_url_include => Off => Off
arg_separator.input => & => &
arg_separator.output => & => &
auto_append_file => no value => no value
auto_globals_jit => On => On
auto_prepend_file => no value => no value
browscap => no value => no value
default_charset => UTF-8 => UTF-8
default_mimetype => text/html => text/html
disable_classes => no value => no value
disable_functions => no value => no value
display_errors => Off => Off
display_startup_errors => Off => Off
doc_root => no value => no value
docref_ext => no value => no value
docref_root => no value => no value
enable_dl => Off => Off
enable_post_data_reading => On => On
error_append_string => no value => no value
error_log => no value => no value
error_prepend_string => no value => no value
error_reporting => 22527 => 22527
expose_php => On => On
extension_dir => /usr/lib/php/20170718 => /usr/lib/php/20170718
file_uploads => On => On
hard_timeout => 2 => 2
highlight.comment => <font style="color: #FF8000">#FF8000</font> => <font style="color: #FF8000">#FF8000</font>
highlight.default => <font style="color: #0000BB">#0000BB</font> => <font style="color: #0000BB">#0000BB</font>
highlight.html => <font style="color: #000000">#000000</font> => <font style="color: #000000">#000000</font>
highlight.keyword => <font style="color: #007700">#007700</font> => <font style="color: #007700">#007700</font>
highlight.string => <font style="color: #DD0000">#DD0000</font> => <font style="color: #DD0000">#DD0000</font>
html_errors => Off => Off
ignore_repeated_errors => Off => Off
ignore_repeated_source => Off => Off
ignore_user_abort => Off => Off
implicit_flush => On => On
include_path => .:/usr/share/php => .:/usr/share/php
input_encoding => no value => no value
internal_encoding => no value => no value
log_errors => On => On
log_errors_max_len => 1024 => 1024
mail.add_x_header => Off => Off
mail.force_extra_parameters => no value => no value
mail.log => no value => no value
max_execution_time => 0 => 0
max_file_uploads => 20 => 20
max_input_nesting_level => 64 => 64
max_input_time => -1 => -1
max_input_vars => 1000 => 1000
memory_limit => -1 => -1
open_basedir => no value => no value
output_buffering => 0 => 0
output_encoding => no value => no value
output_handler => no value => no value
post_max_size => 8M => 8M
precision => 14 => 14
realpath_cache_size => 4096K => 4096K
realpath_cache_ttl => 120 => 120
register_argc_argv => On => On
report_memleaks => On => On
report_zend_debug => Off => Off
request_order => GP => GP
sendmail_from => no value => no value
sendmail_path => /usr/sbin/sendmail -t -i  => /usr/sbin/sendmail -t -i 
serialize_precision => -1 => -1
short_open_tag => Off => Off
SMTP => localhost => localhost
smtp_port => 25 => 25
sys_temp_dir => no value => no value
track_errors => Off => Off
unserialize_callback_func => no value => no value
upload_max_filesize => 2M => 2M
upload_tmp_dir => no value => no value
user_dir => no value => no value
user_ini.cache_ttl => 300 => 300
user_ini.filename => .user.ini => .user.ini
variables_order => GPCS => GPCS
xmlrpc_error_number => 0 => 0
xmlrpc_errors => Off => Off
zend.assertions => -1 => -1
zend.detect_unicode => On => On
zend.enable_gc => On => On
zend.multibyte => Off => Off
zend.script_encoding => no value => no value
zend.signal_check => Off => Off

ctype

ctype functions => enabled

curl

cURL support => enabled
cURL Information => 7.47.0
Age => 3
Features
AsynchDNS => Yes
CharConv => No
Debug => No
GSS-Negotiate => No
IDN => Yes
IPv6 => Yes
krb4 => No
Largefile => Yes
libz => Yes
NTLM => Yes
NTLMWB => Yes
SPNEGO => Yes
SSL => Yes
SSPI => No
TLS-SRP => Yes
HTTP2 => No
GSSAPI => Yes
KERBEROS5 => Yes
UNIX_SOCKETS => Yes
PSL => No
Protocols => dict, file, ftp, ftps, gopher, http, https, imap, imaps, ldap, ldaps, pop3, pop3s, rtmp, rtsp, smb, smbs, smtp, smtps, telnet, tftp
Host => x86_64-pc-linux-gnu
SSL Version => OpenSSL/1.0.2g
ZLib Version => 1.2.8

date

date/time support => enabled
timelib version => 2017.09
"Olson" Timezone Database Version => 0.system
Timezone Database => internal
Default timezone => UTC

Directive => Local Value => Master Value
date.default_latitude => 31.7667 => 31.7667
date.default_longitude => 35.2333 => 35.2333
date.sunrise_zenith => 90.583333 => 90.583333
date.sunset_zenith => 90.583333 => 90.583333
date.timezone => no value => no value

dom

DOM/XML => enabled
DOM/XML API Version => 20031129
libxml Version => 2.9.4
HTML Support => enabled
XPath Support => enabled
XPointer Support => enabled
Schema Support => enabled
RelaxNG Support => enabled

exif

EXIF Support => enabled
EXIF Version => 7.2.19-1+ubuntu16.04.1+deb.sury.org+1
Supported EXIF Version => 0220
Supported filetypes => JPEG, TIFF
Multibyte decoding support using mbstring => enabled
Extended EXIF tag formats => Canon, Casio, Fujifilm, Nikon, Olympus, Samsung, Panasonic, DJI, Sony, Pentax, Minolta, Sigma, Foveon, Kyocera, Ricoh, AGFA, Epson

Directive => Local Value => Master Value
exif.decode_jis_intel => JIS => JIS
exif.decode_jis_motorola => JIS => JIS
exif.decode_unicode_intel => UCS-2LE => UCS-2LE
exif.decode_unicode_motorola => UCS-2BE => UCS-2BE
exif.encode_jis => no value => no value
exif.encode_unicode => ISO-8859-15 => ISO-8859-15

fileinfo

fileinfo support => enabled
version => 1.0.5
libmagic => 531

filter

Input Validation and Filtering => enabled
Revision => $Id: 5a34caaa246b9df197f4b43af8ac66a07464fe4b $

Directive => Local Value => Master Value
filter.default => unsafe_raw => unsafe_raw
filter.default_flags => no value => no value

ftp

FTP support => enabled
FTPS support => enabled

gd

GD Support => enabled
GD headers Version => 2.2.5
GD library Version => 2.2.5
FreeType Support => enabled
FreeType Linkage => with freetype
FreeType Version => 2.6.1
GIF Read Support => enabled
GIF Create Support => enabled
JPEG Support => enabled
libJPEG Version => 8
PNG Support => enabled
libPNG Version => 1.2.54
WBMP Support => enabled
XPM Support => enabled
libXpm Version => 30411
XBM Support => enabled
WebP Support => enabled

Directive => Local Value => Master Value
gd.jpeg_ignore_warning => 1 => 1

gettext

GetText Support => enabled

hash

hash support => enabled
Hashing Engines => md2 md4 md5 sha1 sha224 sha256 sha384 sha512/224 sha512/256 sha512 sha3-224 sha3-256 sha3-384 sha3-512 ripemd128 ripemd160 ripemd256 ripemd320 whirlpool tiger128,3 tiger160,3 tiger192,3 tiger128,4 tiger160,4 tiger192,4 snefru snefru256 gost gost-crypto adler32 crc32 crc32b fnv132 fnv1a32 fnv164 fnv1a64 joaat haval128,3 haval160,3 haval192,3 haval224,3 haval256,3 haval128,4 haval160,4 haval192,4 haval224,4 haval256,4 haval128,5 haval160,5 haval192,5 haval224,5 haval256,5 

MHASH support => Enabled
MHASH API Version => Emulated Support

iconv

iconv support => enabled
iconv implementation => glibc
iconv library version => 2.23

Directive => Local Value => Master Value
iconv.input_encoding => no value => no value
iconv.internal_encoding => no value => no value
iconv.output_encoding => no value => no value

imagick

imagick module => enabled
imagick module version => 3.4.3
imagick classes => Imagick, ImagickDraw, ImagickPixel, ImagickPixelIterator, ImagickKernel
Imagick compiled with ImageMagick version => ImageMagick 6.8.9-9 Q16 x86_64 2018-09-28 http://www.imagemagick.org
Imagick using ImageMagick library version => ImageMagick 6.8.9-9 Q16 x86_64 2018-09-28 http://www.imagemagick.org
ImageMagick copyright => Copyright (C) 1999-2014 ImageMagick Studio LLC
ImageMagick release date => 2018-09-28
ImageMagick number of supported formats:  => 205
ImageMagick supported formats => 3FR, AAI, AI, ART, ARW, AVI, AVS, BGR, BGRA, BIE, BMP, BMP2, BMP3, BRF, CAL, CALS, CANVAS, CAPTION, CIN, CIP, CLIP, CMYK, CMYKA, CR2, CRW, CUR, CUT, DCM, DCR, DCX, DDS, DFONT, DNG, DPX, DXT1, DXT5, EPDF, EPI, EPS, EPS2, EPS3, EPSF, EPSI, EPT, EPT2, EPT3, ERF, FAX, FITS, FRACTAL, FTS, G3, GIF, GIF87, GRADIENT, GRAY, GROUP4, HALD, HDR, HISTOGRAM, HRZ, HTM, HTML, ICB, ICO, ICON, INFO, INLINE, IPL, ISOBRL, JBG, JBIG, JNG, JNX, JPEG, JPG, JSON, K25, KDC, LABEL, M2V, M4V, MAC, MAP, MASK, MAT, MATTE, MEF, MIFF, MNG, MONO, MOV, MP4, MPC, MPEG, MPG, MRW, MSL, MTV, MVG, NEF, NRW, NULL, ORF, OTB, OTF, PAL, PALM, PAM, PATTERN, PBM, PCD, PCDS, PCL, PCT, PCX, PDB, PDF, PDFA, PEF, PES, PFA, PFB, PFM, PGM, PICON, PICT, PIX, PJPEG, PLASMA, PNG, PNG00, PNG24, PNG32, PNG48, PNG64, PNG8, PNM, PPM, PREVIEW, PS, PS2, PS3, PSB, PSD, PTIF, PWP, RADIAL-GRADIENT, RAF, RAS, RAW, RGB, RGBA, RGBO, RGF, RLA, RLE, RMF, RW2, SCR, SCT, SFW, SGI, SHTML, SIX, SIXEL, SPARSE-COLOR, SR2, SRF, STEGANO, SUN, TEXT, TGA, THUMBNAIL, TIFF, TIFF64, TILE, TIM, TTC, TTF, TXT, UBRL, UIL, UYVY, VDA, VICAR, VID, VIFF, VIPS, VST, WBMP, WMV, WPG, X, X3F, XBM, XC, XCF, XPM, XPS, XV, XWD, YCbCr, YCbCrA, YUV

Directive => Local Value => Master Value
imagick.locale_fix => 0 => 0
imagick.progress_monitor => 0 => 0
imagick.skip_version_check => 1 => 1

json

json support => enabled
json version => 1.6.0

libxml

libXML support => active
libXML Compiled Version => 2.9.4
libXML Loaded Version => 20904
libXML streams => enabled

mbstring

Multibyte Support => enabled
Multibyte string engine => libmbfl
HTTP input encoding translation => disabled
libmbfl version => 1.3.2
oniguruma version => 6.3.0

mbstring extension makes use of "streamable kanji code filter and converter", which is distributed under the GNU Lesser General Public License version 2.1.

Multibyte (japanese) regex support => enabled
Multibyte regex (oniguruma) backtrack check => On
Multibyte regex (oniguruma) version => 6.3.0

Directive => Local Value => Master Value
mbstring.detect_order => no value => no value
mbstring.encoding_translation => Off => Off
mbstring.func_overload => 0 => 0
mbstring.http_input => no value => no value
mbstring.http_output => no value => no value
mbstring.http_output_conv_mimetypes => ^(text/|application/xhtml\+xml) => ^(text/|application/xhtml\+xml)
mbstring.internal_encoding => no value => no value
mbstring.language => neutral => neutral
mbstring.strict_detection => Off => Off
mbstring.substitute_character => no value => no value

mysqli

MysqlI Support => enabled
Client API library version => mysqlnd 5.0.12-dev - 20150407 - $Id: 3591daad22de08524295e1bd073aceeff11e6579 $
Active Persistent Links => 0
Inactive Persistent Links => 0
Active Links => 0

Directive => Local Value => Master Value
mysqli.allow_local_infile => Off => Off
mysqli.allow_persistent => On => On
mysqli.default_host => no value => no value
mysqli.default_port => 3306 => 3306
mysqli.default_pw => no value => no value
mysqli.default_socket => no value => no value
mysqli.default_user => no value => no value
mysqli.max_links => Unlimited => Unlimited
mysqli.max_persistent => Unlimited => Unlimited
mysqli.reconnect => Off => Off
mysqli.rollback_on_cached_plink => Off => Off

mysqlnd

mysqlnd => enabled
Version => mysqlnd 5.0.12-dev - 20150407 - $Id: 3591daad22de08524295e1bd073aceeff11e6579 $
Compression => supported
core SSL => supported
extended SSL => supported
Command buffer size => 4096
Read buffer size => 32768
Read timeout => 86400
Collecting statistics => Yes
Collecting memory statistics => No
Tracing => n/a
Loaded plugins => mysqlnd,debug_trace,auth_plugin_mysql_native_password,auth_plugin_mysql_clear_password,auth_plugin_sha256_password
API Extensions => mysqli,pdo_mysql

mysqlnd statistics =>  
bytes_sent => 0
bytes_received => 0
packets_sent => 0
packets_received => 0
protocol_overhead_in => 0
protocol_overhead_out => 0
bytes_received_ok_packet => 0
bytes_received_eof_packet => 0
bytes_received_rset_header_packet => 0
bytes_received_rset_field_meta_packet => 0
bytes_received_rset_row_packet => 0
bytes_received_prepare_response_packet => 0
bytes_received_change_user_packet => 0
packets_sent_command => 0
packets_received_ok => 0
packets_received_eof => 0
packets_received_rset_header => 0
packets_received_rset_field_meta => 0
packets_received_rset_row => 0
packets_received_prepare_response => 0
packets_received_change_user => 0
result_set_queries => 0
non_result_set_queries => 0
no_index_used => 0
bad_index_used => 0
slow_queries => 0
buffered_sets => 0
unbuffered_sets => 0
ps_buffered_sets => 0
ps_unbuffered_sets => 0
flushed_normal_sets => 0
flushed_ps_sets => 0
ps_prepared_never_executed => 0
ps_prepared_once_executed => 0
rows_fetched_from_server_normal => 0
rows_fetched_from_server_ps => 0
rows_buffered_from_client_normal => 0
rows_buffered_from_client_ps => 0
rows_fetched_from_client_normal_buffered => 0
rows_fetched_from_client_normal_unbuffered => 0
rows_fetched_from_client_ps_buffered => 0
rows_fetched_from_client_ps_unbuffered => 0
rows_fetched_from_client_ps_cursor => 0
rows_affected_normal => 0
rows_affected_ps => 0
rows_skipped_normal => 0
rows_skipped_ps => 0
copy_on_write_saved => 0
copy_on_write_performed => 0
command_buffer_too_small => 0
connect_success => 0
connect_failure => 0
connection_reused => 0
reconnect => 0
pconnect_success => 0
active_connections => 0
active_persistent_connections => 0
explicit_close => 0
implicit_close => 0
disconnect_close => 0
in_middle_of_command_close => 0
explicit_free_result => 0
implicit_free_result => 0
explicit_stmt_close => 0
implicit_stmt_close => 0
mem_emalloc_count => 0
mem_emalloc_amount => 0
mem_ecalloc_count => 0
mem_ecalloc_amount => 0
mem_erealloc_count => 0
mem_erealloc_amount => 0
mem_efree_count => 0
mem_efree_amount => 0
mem_malloc_count => 0
mem_malloc_amount => 0
mem_calloc_count => 0
mem_calloc_amount => 0
mem_realloc_count => 0
mem_realloc_amount => 0
mem_free_count => 0
mem_free_amount => 0
mem_estrndup_count => 0
mem_strndup_count => 0
mem_estrdup_count => 0
mem_strdup_count => 0
mem_edupl_count => 0
mem_dupl_count => 0
proto_text_fetched_null => 0
proto_text_fetched_bit => 0
proto_text_fetched_tinyint => 0
proto_text_fetched_short => 0
proto_text_fetched_int24 => 0
proto_text_fetched_int => 0
proto_text_fetched_bigint => 0
proto_text_fetched_decimal => 0
proto_text_fetched_float => 0
proto_text_fetched_double => 0
proto_text_fetched_date => 0
proto_text_fetched_year => 0
proto_text_fetched_time => 0
proto_text_fetched_datetime => 0
proto_text_fetched_timestamp => 0
proto_text_fetched_string => 0
proto_text_fetched_blob => 0
proto_text_fetched_enum => 0
proto_text_fetched_set => 0
proto_text_fetched_geometry => 0
proto_text_fetched_other => 0
proto_binary_fetched_null => 0
proto_binary_fetched_bit => 0
proto_binary_fetched_tinyint => 0
proto_binary_fetched_short => 0
proto_binary_fetched_int24 => 0
proto_binary_fetched_int => 0
proto_binary_fetched_bigint => 0
proto_binary_fetched_decimal => 0
proto_binary_fetched_float => 0
proto_binary_fetched_double => 0
proto_binary_fetched_date => 0
proto_binary_fetched_year => 0
proto_binary_fetched_time => 0
proto_binary_fetched_datetime => 0
proto_binary_fetched_timestamp => 0
proto_binary_fetched_string => 0
proto_binary_fetched_json => 0
proto_binary_fetched_blob => 0
proto_binary_fetched_enum => 0
proto_binary_fetched_set => 0
proto_binary_fetched_geometry => 0
proto_binary_fetched_other => 0
init_command_executed_count => 0
init_command_failed_count => 0
com_quit => 0
com_init_db => 0
com_query => 0
com_field_list => 0
com_create_db => 0
com_drop_db => 0
com_refresh => 0
com_shutdown => 0
com_statistics => 0
com_process_info => 0
com_connect => 0
com_process_kill => 0
com_debug => 0
com_ping => 0
com_time => 0
com_delayed_insert => 0
com_change_user => 0
com_binlog_dump => 0
com_table_dump => 0
com_connect_out => 0
com_register_slave => 0
com_stmt_prepare => 0
com_stmt_execute => 0
com_stmt_send_long_data => 0
com_stmt_close => 0
com_stmt_reset => 0
com_stmt_set_option => 0
com_stmt_fetch => 0
com_deamon => 0
bytes_received_real_data_normal => 0
bytes_received_real_data_ps => 0

openssl

OpenSSL support => enabled
OpenSSL Library Version => OpenSSL 1.1.1c  28 May 2019
OpenSSL Header Version => OpenSSL 1.1.1b  26 Feb 2019
Openssl default config => /usr/lib/ssl/openssl.cnf

Directive => Local Value => Master Value
openssl.cafile => no value => no value
openssl.capath => no value => no value

pcntl

pcntl support => enabled

pcre

PCRE (Perl Compatible Regular Expressions) Support => enabled
PCRE Library Version => 8.42 2018-03-20
PCRE JIT Support => enabled

Directive => Local Value => Master Value
pcre.backtrack_limit => 1000000 => 1000000
pcre.jit => 1 => 1
pcre.recursion_limit => 100000 => 100000

PDO

PDO support => enabled
PDO drivers => mysql, pgsql

pdo_mysql

PDO Driver for MySQL => enabled
Client API version => mysqlnd 5.0.12-dev - 20150407 - $Id: 3591daad22de08524295e1bd073aceeff11e6579 $

Directive => Local Value => Master Value
pdo_mysql.default_socket => /var/run/mysqld/mysqld.sock => /var/run/mysqld/mysqld.sock

pdo_pgsql

PDO Driver for PostgreSQL => enabled
PostgreSQL(libpq) Version => 9.5.17
Module version => 7.2.19-1+ubuntu16.04.1+deb.sury.org+1
Revision =>  $Id: 9c5f356c77143981d2e905e276e439501fe0f419 $ 

pgsql

PostgreSQL Support => enabled
PostgreSQL(libpq) Version => 9.5.17
PostgreSQL(libpq)  => PostgreSQL 9.5.17 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609, 64-bit
Multibyte character support => enabled
SSL support => enabled
Active Persistent Links => 0
Active Links => 0

Directive => Local Value => Master Value
pgsql.allow_persistent => On => On
pgsql.auto_reset_persistent => Off => Off
pgsql.ignore_notice => Off => Off
pgsql.log_notice => Off => Off
pgsql.max_links => Unlimited => Unlimited
pgsql.max_persistent => Unlimited => Unlimited

Phar

Phar: PHP Archive support => enabled
Phar EXT version => 2.0.2
Phar API version => 1.1.1
SVN revision => $Id: f1155e62742ca367e521a3e412667d8ee34eead9 $
Phar-based phar archives => enabled
Tar-based phar archives => enabled
ZIP-based phar archives => enabled
gzip compression => enabled
bzip2 compression => disabled (install pecl/bz2)
Native OpenSSL support => enabled

Phar based on pear/PHP_Archive, original concept by Davey Shafik.
Phar fully realized by Gregory Beaver and Marcus Boerger.
Portions of tar implementation Copyright (c) 2003-2009 Tim Kientzle.
Directive => Local Value => Master Value
phar.cache_list => no value => no value
phar.readonly => On => On
phar.require_hash => On => On

posix

Revision => $Id: 0a764bab332255746424a1e6cfbaaeebab998e4c $

readline

Readline Support => enabled
Readline library => EditLine wrapper

Directive => Local Value => Master Value
cli.pager => no value => no value
cli.prompt => \b \>  => \b \> 

Reflection

Reflection => enabled
Version => $Id: 012f23982d9d94728b4da252b9f21f9de8afd4df $

session

Session Support => enabled
Registered save handlers => files user 
Registered serializer handlers => php_serialize php php_binary wddx 

Directive => Local Value => Master Value
session.auto_start => Off => Off
session.cache_expire => 180 => 180
session.cache_limiter => nocache => nocache
session.cookie_domain => no value => no value
session.cookie_httponly => no value => no value
session.cookie_lifetime => 0 => 0
session.cookie_path => / => /
session.cookie_secure => 0 => 0
session.gc_divisor => 1000 => 1000
session.gc_maxlifetime => 1440 => 1440
session.gc_probability => 0 => 0
session.lazy_write => On => On
session.name => PHPSESSID => PHPSESSID
session.referer_check => no value => no value
session.save_handler => files => files
session.save_path => /var/lib/php/sessions => /var/lib/php/sessions
session.serialize_handler => php => php
session.sid_bits_per_character => 5 => 5
session.sid_length => 26 => 26
session.upload_progress.cleanup => On => On
session.upload_progress.enabled => On => On
session.upload_progress.freq => 1% => 1%
session.upload_progress.min_freq => 1 => 1
session.upload_progress.name => PHP_SESSION_UPLOAD_PROGRESS => PHP_SESSION_UPLOAD_PROGRESS
session.upload_progress.prefix => upload_progress_ => upload_progress_
session.use_cookies => 1 => 1
session.use_only_cookies => 1 => 1
session.use_strict_mode => 0 => 0
session.use_trans_sid => 0 => 0

shmop

shmop support => enabled

SimpleXML

Simplexml support => enabled
Revision => $Id: 341daed0ee94ea8f728bfd0ba4626e6ed365c0d1 $
Schema support => enabled

sockets

Sockets Support => enabled

sodium

sodium support => enabled
libsodium headers version => 1.0.17
libsodium library version => 1.0.17

SPL

SPL support => enabled
Interfaces => OuterIterator, RecursiveIterator, SeekableIterator, SplObserver, SplSubject
Classes => AppendIterator, ArrayIterator, ArrayObject, BadFunctionCallException, BadMethodCallException, CachingIterator, CallbackFilterIterator, DirectoryIterator, DomainException, EmptyIterator, FilesystemIterator, FilterIterator, GlobIterator, InfiniteIterator, InvalidArgumentException, IteratorIterator, LengthException, LimitIterator, LogicException, MultipleIterator, NoRewindIterator, OutOfBoundsException, OutOfRangeException, OverflowException, ParentIterator, RangeException, RecursiveArrayIterator, RecursiveCachingIterator, RecursiveCallbackFilterIterator, RecursiveDirectoryIterator, RecursiveFilterIterator, RecursiveIteratorIterator, RecursiveRegexIterator, RecursiveTreeIterator, RegexIterator, RuntimeException, SplDoublyLinkedList, SplFileInfo, SplFileObject, SplFixedArray, SplHeap, SplMinHeap, SplMaxHeap, SplObjectStorage, SplPriorityQueue, SplQueue, SplStack, SplTempFileObject, UnderflowException, UnexpectedValueException

standard

Dynamic Library Support => enabled
Path to sendmail => /usr/sbin/sendmail -t -i 

Directive => Local Value => Master Value
assert.active => 1 => 1
assert.bail => 0 => 0
assert.callback => no value => no value
assert.exception => 0 => 0
assert.quiet_eval => 0 => 0
assert.warning => 1 => 1
auto_detect_line_endings => 0 => 0
default_socket_timeout => 60 => 60
from => no value => no value
session.trans_sid_hosts => no value => no value
session.trans_sid_tags => a=href,area=href,frame=src,form= => a=href,area=href,frame=src,form=
url_rewriter.hosts => no value => no value
url_rewriter.tags => form= => form=
user_agent => no value => no value

sysvmsg

sysvmsg support => enabled
Revision => $Id: 73c7c7668de72405a739f837dc62fd6ce8e5eba6 $

sysvsem

Version => 7.2.19-1+ubuntu16.04.1+deb.sury.org+1

sysvshm

Version => 7.2.19-1+ubuntu16.04.1+deb.sury.org+1

tokenizer

Tokenizer Support => enabled

wddx

WDDX Support => enabled
WDDX Session Serializer => enabled

xml

XML Support => active
XML Namespace Support => active
libxml2 Version => 2.9.4

xmlreader

XMLReader => enabled

xmlwriter

XMLWriter => enabled

xsl

XSL => enabled
libxslt Version => 1.1.28
libxslt compiled against libxml Version => 2.9.3
EXSLT => enabled
libexslt Version => 1.1.28

Zend OPcache

Opcode Caching => Disabled
Optimization => Disabled
SHM Cache => Enabled
File Cache => Disabled
Startup Failed => Opcode Caching is disabled for CLI

Directive => Local Value => Master Value
opcache.blacklist_filename => no value => no value
opcache.consistency_checks => 0 => 0
opcache.dups_fix => Off => Off
opcache.enable => On => On
opcache.enable_cli => Off => Off
opcache.enable_file_override => Off => Off
opcache.error_log => no value => no value
opcache.file_cache => no value => no value
opcache.file_cache_consistency_checks => 1 => 1
opcache.file_cache_only => 0 => 0
opcache.file_update_protection => 2 => 2
opcache.force_restart_timeout => 180 => 180
opcache.huge_code_pages => Off => Off
opcache.inherited_hack => On => On
opcache.interned_strings_buffer => 8 => 8
opcache.lockfile_path => /tmp => /tmp
opcache.log_verbosity_level => 1 => 1
opcache.max_accelerated_files => 10000 => 10000
opcache.max_file_size => 0 => 0
opcache.max_wasted_percentage => 5 => 5
opcache.memory_consumption => 128 => 128
opcache.opt_debug_level => 0 => 0
opcache.optimization_level => 0x7FFFBFFF => 0x7FFFBFFF
opcache.preferred_memory_model => no value => no value
opcache.protect_memory => 0 => 0
opcache.restrict_api => no value => no value
opcache.revalidate_freq => 2 => 2
opcache.revalidate_path => Off => Off
opcache.save_comments => 1 => 1
opcache.use_cwd => On => On
opcache.validate_permission => Off => Off
opcache.validate_root => Off => Off
opcache.validate_timestamps => On => On

zip

Zip => enabled
Zip version => 1.15.4
Libzip headers version => 1.5.1
Libzip library version => 1.5.1

zlib

ZLib Support => enabled
Stream Wrapper => compress.zlib://
Stream Filter => zlib.inflate, zlib.deflate
Compiled Version => 1.2.8
Linked Version => 1.2.8

Directive => Local Value => Master Value
zlib.output_compression => Off => Off
zlib.output_compression_level => -1 => -1
zlib.output_handler => no value => no value

Additional Modules

Module Name

Environment

Variable => Value
AUTOJUMP_ERROR_PATH => /home/shahin/.local/share/autojump/errors.log
AUTOJUMP_SOURCED => 1
DISPLAY => :0.0
HADOOP_HOME => /data/big-data/hadoop-3.1.1
HIVE_HOME => /data/big-data/apache-hive-3.1.1-bin
HOME => /home/shahin
HUSHLOGIN => FALSE
JAVA_HOME => /usr/lib/jvm/java-8-openjdk-amd64/jre/
LANG => en_US.UTF-8
LANGUAGE => en_US:en
LC_ADDRESS => en_US.UTF-8
LC_CTYPE => en_US.UTF-8
LC_IDENTIFICATION => en_US.UTF-8
LC_MEASUREMENT => en_US.UTF-8
LC_MONETARY => en_US.UTF-8
LC_NAME => en_US.UTF-8
LC_NUMERIC => en_US.UTF-8
LC_PAPER => en_US.UTF-8
LC_TELEPHONE => en_US.UTF-8
LC_TIME => en_US.UTF-8
LESS => -XR
LOGNAME => shahin
LSCOLORS => Gxfxcxdxbxegedabagacad
LS_COLORS => rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:
MAIL => /var/mail/shahin
OLDPWD => /home/shahin
PAGER => less
PATH => /home/shahin/.yarn/bin:/home/shahin/.config/yarn/global/node_modules/.bin:/home/shahin/.local/bin:/home/shahin/.cargo/bin:/home/shahin/.local/bin:/home/shahin/.cargo/bin:/home/shahin/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/data/big-data/apache-hive-3.1.1-bin/bin:/data/big-data/hadoop-3.1.1/bin:/home/shahin/.composer/vendor/bin:/data/big-data/apache-hive-3.1.1-bin/bin:/data/big-data/hadoop-3.1.1/bin:/home/shahin/.composer/vendor/bin
PWD => /var/php/test
SHELL => /usr/bin/zsh
SHLVL => 2
SSH_AGENT_PID => 5060
SSH_AUTH_SOCK => /tmp/ssh-OsP6BEcUEkrZ/agent.5058
TERM => screen-256color
TMUX => /tmp/tmux-1000/default,5072,0
TMUX_PANE => %48
USER => shahin
WINDOWID => 50352361
XAUTHORITY => /home/shahin/.Xauthority
XDG_RUNTIME_DIR => /run/user/1000
XDG_SEAT => seat0
XDG_SESSION_COOKIE => 734088f6efa6490c9a34d12ac0195186-1560261886.324637-417365084
XDG_SESSION_ID => 1
XDG_VTNR => 1
ZSH => /home/shahin/.zsh
ZSH_TMUX_AUTOSTARTED => true
ZSH_TMUX_TERM => screen-256color
_ => /usr/bin/php
_ZSH_TMUX_FIXED_CONFIG => /home/shahin/.zsh/plugins/tmux/tmux.extra.conf
YSU_VERSION => 1.1.0
BROWSER => firefox --new-tab
EDITOR => vim
SSH_KEY_PATH => ~/.ssh/rsa_id
GPG_TTY => /dev/pts/7
GROFF_NO_SGR => 1

PHP Variables

Variable => Value
$_SERVER['AUTOJUMP_ERROR_PATH'] => /home/shahin/.local/share/autojump/errors.log
$_SERVER['AUTOJUMP_SOURCED'] => 1
$_SERVER['DISPLAY'] => :0.0
$_SERVER['HADOOP_HOME'] => /data/big-data/hadoop-3.1.1
$_SERVER['HIVE_HOME'] => /data/big-data/apache-hive-3.1.1-bin
$_SERVER['HOME'] => /home/shahin
$_SERVER['HUSHLOGIN'] => FALSE
$_SERVER['JAVA_HOME'] => /usr/lib/jvm/java-8-openjdk-amd64/jre/
$_SERVER['LANG'] => en_US.UTF-8
$_SERVER['LANGUAGE'] => en_US:en
$_SERVER['LC_ADDRESS'] => en_US.UTF-8
$_SERVER['LC_CTYPE'] => en_US.UTF-8
$_SERVER['LC_IDENTIFICATION'] => en_US.UTF-8
$_SERVER['LC_MEASUREMENT'] => en_US.UTF-8
$_SERVER['LC_MONETARY'] => en_US.UTF-8
$_SERVER['LC_NAME'] => en_US.UTF-8
$_SERVER['LC_NUMERIC'] => en_US.UTF-8
$_SERVER['LC_PAPER'] => en_US.UTF-8
$_SERVER['LC_TELEPHONE'] => en_US.UTF-8
$_SERVER['LC_TIME'] => en_US.UTF-8
$_SERVER['LESS'] => -XR
$_SERVER['LOGNAME'] => shahin
$_SERVER['LSCOLORS'] => Gxfxcxdxbxegedabagacad
$_SERVER['LS_COLORS'] => rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:
$_SERVER['MAIL'] => /var/mail/shahin
$_SERVER['OLDPWD'] => /home/shahin
$_SERVER['PAGER'] => less
$_SERVER['PATH'] => /home/shahin/.yarn/bin:/home/shahin/.config/yarn/global/node_modules/.bin:/home/shahin/.local/bin:/home/shahin/.cargo/bin:/home/shahin/.local/bin:/home/shahin/.cargo/bin:/home/shahin/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/data/big-data/apache-hive-3.1.1-bin/bin:/data/big-data/hadoop-3.1.1/bin:/home/shahin/.composer/vendor/bin:/data/big-data/apache-hive-3.1.1-bin/bin:/data/big-data/hadoop-3.1.1/bin:/home/shahin/.composer/vendor/bin
$_SERVER['PWD'] => /var/php/test
$_SERVER['SHELL'] => /usr/bin/zsh
$_SERVER['SHLVL'] => 2
$_SERVER['SSH_AGENT_PID'] => 5060
$_SERVER['SSH_AUTH_SOCK'] => /tmp/ssh-OsP6BEcUEkrZ/agent.5058
$_SERVER['TERM'] => screen-256color
$_SERVER['TMUX'] => /tmp/tmux-1000/default,5072,0
$_SERVER['TMUX_PANE'] => %48
$_SERVER['USER'] => shahin
$_SERVER['WINDOWID'] => 50352361
$_SERVER['XAUTHORITY'] => /home/shahin/.Xauthority
$_SERVER['XDG_RUNTIME_DIR'] => /run/user/1000
$_SERVER['XDG_SEAT'] => seat0
$_SERVER['XDG_SESSION_COOKIE'] => 734088f6efa6490c9a34d12ac0195186-1560261886.324637-417365084
$_SERVER['XDG_SESSION_ID'] => 1
$_SERVER['XDG_VTNR'] => 1
$_SERVER['ZSH'] => /home/shahin/.zsh
$_SERVER['ZSH_TMUX_AUTOSTARTED'] => true
$_SERVER['ZSH_TMUX_TERM'] => screen-256color
$_SERVER['_'] => /usr/bin/php
$_SERVER['_ZSH_TMUX_FIXED_CONFIG'] => /home/shahin/.zsh/plugins/tmux/tmux.extra.conf
$_SERVER['YSU_VERSION'] => 1.1.0
$_SERVER['BROWSER'] => firefox --new-tab
$_SERVER['EDITOR'] => vim
$_SERVER['SSH_KEY_PATH'] => ~/.ssh/rsa_id
$_SERVER['GPG_TTY'] => /dev/pts/7
$_SERVER['GROFF_NO_SGR'] => 1
$_SERVER['PHP_SELF'] => 
$_SERVER['SCRIPT_NAME'] => 
$_SERVER['SCRIPT_FILENAME'] => 
$_SERVER['PATH_TRANSLATED'] => 
$_SERVER['DOCUMENT_ROOT'] => 
$_SERVER['REQUEST_TIME_FLOAT'] => 1560764104.6718
$_SERVER['REQUEST_TIME'] => 1560764104
$_SERVER['argv'] => Array
(
)

$_SERVER['argc'] => 0

PHP License
This program is free software; you can redistribute it and/or modify
it under the terms of the PHP License as published by the PHP Group
and included in the distribution in the file:  LICENSE

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

If you did not receive a copy of the PHP license, or have any
questions about PHP licensing, please contact license@php.net.

Note: I'm behind of a private network so I don't care about my ENV vars.

MarkBaker commented 5 years ago
What is the expected behavior?
 - For it to use a comparable amount of memory to Microsoft Excel.

Seriously! I'm sorry, you'll haver to use COM for that to be feasible, or possibly a commercial interface to a C library like libxl; PHPSpreadsheet is a pure PHP script, that (like all PHP scripts) uses zvals for data storage of any variable or property; if you want purely native datatypes, then using a pure PHP script is simply not an option.

Yes, PHPSpreadsheet uses a lot of memory, and I'm happy to discuss serious suggestions on how that could be reduced. There are options, such as cell caching, that can be used to reduce the memory footprint of a spreadsheet in memory; but "in-memory" means just that.

BobDankert commented 5 years ago

Are there any official recommendations of how much memory should be allocated for Excel files dependent on their size? I'd be happy to increase the allowed memory based on the file size, but I'm not sure what size we should set this to.

adjenks commented 5 years ago

@ShahinSorkh That's quite the big comment. I had to scroll for a while. Ha. @MarkBaker That's reasonable. You're right, I shouldn't expect it to be the same as Excel. I just thought it seemed a little extreme in memory usage for such a small file with almost nothing in it. I understand though that there is a certain overhead associated with writing something in pure PHP. I just wasn't really sure if 177MB of memory for a simple 409KB file was normal or if it could be improved somehow and thought it should be addressed. Thank you for getting back to me.

MarkBaker commented 5 years ago

The official recommendation mentioned in the documentation is 1k per cell (32-bit PHP) and 1.6k per cell (64-bit PHP), but that was under PHP 5.4; I've not made significant measures on PHP7. What can't be determined is memory requirements based on filesize; because Excel formats typically optimise storage requirements for the file (e.g. shared strings table, etc)

UtechtDustin commented 4 years ago

@MarkBaker 1k = 1000bytes per cell ? Is there any offical documentation for that ?

adjenks commented 4 years ago

@UtechtDustin https://phpspreadsheet.readthedocs.io/en/latest/topics/memory_saving/#memory-saving

PhpSpreadsheet uses an average of about 1k per cell in your worksheets