nfTlWNl rn Ѻq$³*AӪ}# Q&VY{ V~PQ?ltjd/ 7uⓙ}]w&]T7@9c?'xsc?~|Q&U|kJQQ'Y. m{b񁝿nəS~TkmWF#Z !@R[3L ^vƒ#bʯΊx=.Yo`ͭ9_QDbݦ7 ĥmq/OXe4/:%-FZN z-ILd& !{nJz1А5#y'C#ˁ5f8n@F ׿-# L㋞^DŽlp@}x !{]3bQ'iGtu"@;^ ?4%}ⷸ.v= 88$u#7YUII8z1TXoWZʲ$ۄI~}2 )B9Lvv5yԕB6Vu" TYQ6(RGxqPVe%1&5!H%Nj˨XFQ@\W;fC.a EɟҶi!Y5Qύ_'"CP$/ ҩNJ>Y3_O='dLi-XKop+wm]!c cAc6fRK*ǛtQ8(\MנaٳeΏVX,TN$DK9kiA3'&ߍ`Z=G$>-05Zg(Լ9j6SG1Tyx5$. l]i9].Q;D%  ->j'Z4{m=~|y}z 8:z}yCu$7)dLGȭoW FU05^Iq DX "݅?4z~W95[F,QA2S9R[ hֺ8MǟCAWk;UwvT ,?Zc h ba*L/qsh鎠8ECC9oK ۱Sj.mY:Vt!Yw~~#Ae[UrD|m ~M'cfT0iZ9AȖuC-kSC?u.ɖi6t5'6zAS 4Hjx~u\|HPd,Nsԁ qkp<~a'Q?Ivqa ,V!2&8՘@^K%eZj=OLE]h%I=xkn&'lmG: mg\xhUkO4 }yvJo=T^fN@`q ^6$,t8%:5M,i"Egʦpo_@{1 ՝7&3b\R7W6켎wa`Ǟ Th4tD=!rcFuA>F[@w:+5`9e]L9|4'h~{w(uWZ_e컾9F+>eiAXTl CTG/0 ORb&frK$ $rf$88ZPue5#A+f!D{_. [ēt^N4ж3C“&Dtzy3؉ډ%Y< ĢQ$3BVnxE9G3_6xE\ AW@gL38=7:9zI~zc-IwAԆyyH/֔A_rsi7Yᬾo-N͆GO=ӴW!f߾se~/43fOTpDir(), 'phpspreadsheet'); if ($filename === false) { throw new Exception('Could not create temporary file'); } return $filename; } /** * Assert that given path is an existing file and is readable, otherwise throw exception. */ public static function assertFile(string $filename, string $zipMember = ''): void { if (!is_file($filename)) { throw new ReaderException('File "' . $filename . '" does not exist.'); } if (!is_readable($filename)) { throw new ReaderException('Could not open "' . $filename . '" for reading.'); } if ($zipMember !== '') { $zipfile = "zip://$filename#$zipMember"; if (!self::fileExists($zipfile)) { // Has the file been saved with Windoze directory separators rather than unix? $zipfile = "zip://$filename#" . str_replace('/', '\\', $zipMember); if (!self::fileExists($zipfile)) { throw new ReaderException("Could not find zip member $zipfile"); } } } } /** * Same as assertFile, except return true/false and don't throw Exception. */ public static function testFileNoThrow(string $filename, ?string $zipMember = null): bool { if (!is_file($filename)) { return false; } if (!is_readable($filename)) { return false; } if ($zipMember === null) { return true; } // validate zip, but don't check specific member if ($zipMember === '') { return self::validateZipFirst4($filename); } $zipfile = "zip://$filename#$zipMember"; if (self::fileExists($zipfile)) { return true; } // Has the file been saved with Windoze directory separators rather than unix? $zipfile = "zip://$filename#" . str_replace('/', '\\', $zipMember); return self::fileExists($zipfile); } }