files

object

%CSV

/phlo/resources/files/CSV.phlo
version 1.0
creator q-ai.nl
summary CSV reader resource
package files
frontend false
backend true
tags file csv reader import
static

CSV :: __handle

line 9
CSV::$__handle is een verwijzing naar de bestandshandle die wordt gebruikt voor het lezen of schrijven van CSV-gegevens op de opgegeven locatie en bestandsnaam.
"CSV/$path$filename"
method

%CSV -> __construct (string $filename, ?string $path = null)

line 10
Initialiseert een CSV-object door het pad van het bestand te construeren op basis van de gegeven bestandsnaam en optioneel pad, standaard ingesteld op 'data'. Als het geconstrueerde bestand leesbaar is, roept het de objRead-methode aan om de CSV-gegevens te lezen.
$path ??= data
$this->objFile = $path.strtr($filename, [slash => dot]).'.csv'
if (is_readable($this->objFile)) $this->objRead()
readonly

%CSV -> objFile:string

line 16
Converteert een CSV-bestand naar een obj-representatie voor eenvoudigere manipulatie binnen Phlo.
method

%CSV -> objRead

line 18
Leest een CSV-bestand en converteert de inhoud naar een array van objecten, waarbij koppen worden gekoppeld aan de bijbehorende rijwaarden.
$fp = fopen($this->objFile, 'r+')
$headers = str_replace([dq, cr, lf], void, fgets($fp))
$delimiter = substr_count($headers, comma) > substr_count($headers, semi) ? comma : semi
$headers =  explode($delimiter, $headers)
while ($row = fgetcsv($fp, null, $delimiter)) $this->objData[] = array_combine($headers, $row)
fclose($fp)
object

%DOCX

/phlo/resources/files/DOCX.phlo
version 1.0
creator q-ai.nl
summary DOCX reader resource
package files
frontend false
backend true
requires php-ext:zip
tags file docx word reader
method

%DOCX -> __construct (string $file)

line 10
Initialiseert een DOCX-object door het opgegeven DOCX-bestand te openen, de tekst uit 'word/document.xml' te extraheren en deze te verwerken in alinea's.
$zip = new ZipArchive()
if ($zip->open($file) !== true) dx('error opening docx', $file)
$xml = $zip->getFromName('word/document.xml')
$zip->close()
if (!$xml) dx('error reading document.xml')
$text = preg_replace('/<\/w:p>/', "\n", $xml)
$text = strip_tags($text)
$text = html_entity_decode($text, ENT_QUOTES | ENT_XML1, 'UTF-8')
$this->text = trim(preg_replace('/[ \t]+/', ' ', $text))
$this->paragraphs = array_values(array_filter(explode("\n", $this->text), fn($p) => trim($p) !== void))
static

DOCX :: toText (string $file):string

line 23
Converteert de inhoud van een DOCX-bestand naar platte tekst.
(new static($file))->text
object

%file

/phlo/resources/files/file.phlo
version 1.0
creator q-ai.nl
summary File resource
package files
frontend false
backend true
tags file filesystem io
static

file :: __handle

line 9
Deze expressie bouwt een bestandspad door 'file/$file' te concatenateren met de optionele naam, indien opgegeven.
"file/$file".($name ? "/$name" : void)
method

%file -> __construct (public string $file, ?string $name = null, $contents = null, ...$args)

line 10
Initialiseert een bestandsobject met een opgegeven bestandsnaam, een optionele naam en optionele inhoud, en staat ook extra argumenten voor objectimport toe.
$name && $this->name = $name
is_string($contents) && $this->write($contents)
$args && $this->objImport(...$args)
method

%file -> append (string $data)

line 16
Voegt de opgegeven stringgegevens toe aan het einde van het bestand, met exclusieve toegang tijdens de bewerking.
file_put_contents($this->file, $data, FILE_APPEND | LOCK_EX)
prop

%file -> basename

line 17
Geeft de basisnaam van het bestand terug vanuit het opgegeven bestandspad.
pathinfo($this->file, PATHINFO_BASENAME)
method

%file -> base64

line 18
Codet de inhoud van een bestand naar een Base64-string.
base64_encode($this->contents)
method

%file -> contents

line 19
Leest de volledige inhoud van een bestand in een string.
file_get_contents($this->file)
method

%file -> contentsINI (bool $parse = true)

line 20
Leest de inhoud van een bestand en parseert het als een INI-string, waarbij een associatieve array wordt geretourneerd. De parameter $parse bepaalt of er getypeerde of ruwe scanning voor de INI-gegevens moet worden gebruikt.
parse_ini_string($this->contents, true, $parse ? INI_SCANNER_TYPED : INI_SCANNER_RAW)
method

%file -> contentsJSON ($assoc = null)

line 21
Decodeert de JSON-string die is opgeslagen in de inhouds-eigenschap naar een PHP-variabele, waarbij optioneel een associatieve array wordt geretourneerd als de $assoc-parameter op true is ingesteld.
json_decode($this->contents, $assoc)
method

%file -> copy ($to)

line 22
Kopieert het bestand dat door het huidige object wordt vertegenwoordigd naar het opgegeven bestemmingspad.
copy($this->file, $to)
method

%file -> created

line 23
Geeft de Unix-tijdstempel van de laatste keer dat het bestand is aangemaakt.
filectime($this->file)
method

%file -> createdAge

line 24
Geeft de leeftijd van het bestand op basis van de aanmaakdatum.
age($this->created)
method

%file -> createdHuman

line 25
Geeft een leesbare weergave van de creatietijd van het bestand.
time_human($this->created)
method

%file -> curl ($type = null, $filename = null)

line 26
Maakt een nieuw CURLFile-object voor bestandsuploads in een cURL-verzoek, waarmee het bestandstype en de bestandsnaam kunnen worden opgegeven.
new CURLFile($this->file, $type, $filename)
method

%file -> delete

line 27
Verwijdert het opgegeven bestand als het bestaat en retourneert een debugbericht dat het succes of falen van de bewerking aangeeft.
first($deleted = $this->exists && unlink($this->file), debug($deleted ? "Deleted $this->basename" : "Could not delete $this->basename"))
method

%file -> exists

line 28
Controleert of het opgegeven bestand bestaat in het bestandssysteem.
file_exists($this->file)
prop

%file -> ext

line 29
Haal de bestandsextensie op uit de bestandsnaam die is opgeslagen in de 'name' eigenschap met behulp van de PHP-functie pathinfo.
pathinfo($this->name, PATHINFO_EXTENSION)
prop

%file -> filename

line 30
Haalt de bestandsnaam op uit het bestandspad dat is opgeslagen in de 'file' eigenschap.
pathinfo($this->file, PATHINFO_FILENAME)
method

%file -> getLine

line 31
Haalt een enkele regel op van een bestandspointer, retourneert false bij mislukking of de regel zonder afsluitende spaties bij succes.
($line = fgets($this->pointer)) === false ? false : rtrim($line)
method

%file -> getLength (int $length)

line 32
Haal de lengte van het bestand op door een bepaald aantal bytes van de bestandspointer te lezen.
fread($this->pointer, $length)
method

%file -> is (string $file)

line 33
Controleert of het opgegeven bestand overeenkomt met de huidige bestandsinstantie.
$file === $this->file
method

%file -> md5

line 34
Berechnet de MD5-hash van het opgegeven bestand.
md5_file($this->file)
prop

%file -> mime

line 35
Geeft het MIME-type van het bestand op basis van de naam.
mime($this->name)
method

%file -> modified

line 36
Geeft de laatste wijzigingstijd van het opgegeven bestand terug als een Unix-tijdstempel.
filemtime($this->file)
method

%file -> modifiedAge

line 37
Geeft de leeftijd van het bestand op basis van de laatste wijzigingstijdstempel.
age($this->modified)
method

%file -> modifiedHuman

line 38
Geeft een leesbare weergave van de laatste wijzigingstijd van het bestand.
time_human($this->modified)
method

%file -> move ($to)

line 39
Verplaatst het huidige bestand naar een nieuwe locatie die is opgegeven door $to en werkt de bestandsverwijzing bij bij succes.
rename($this->file, $to) && $this->file = $to
prop

%file -> name

line 40
Dit haalt de basename van het bestand dat door het object wordt vertegenwoordigd, wat de naam van het bestand zonder pad is.
$this->basename
method

%file -> output ($download = false)

line 41
Geeft de inhoud van een bestand weer, met de optie om het te downloaden indien opgegeven.
output($this->contents, $this->name, $download)
prop

%file -> path

line 42
Dit haalt het pad van de map van het opgegeven bestand op en voegt er een schuine streep aan toe.
realpath(pathinfo($this->file, PATHINFO_DIRNAME)).slash
prop

%file -> pathRel

line 43
Deze expressie retourneert het relatieve pad van een bestand door te controleren of het bestandspad begint met 'app' en, indien dit het geval is, die prefix te verwijderen; anders retourneert het het oorspronkelijke bestandspad.
str_starts_with($this->file, app) ? substr($this->file, strlen(app)) : $this->file
prop

%file -> pointer

line 44
Opent het opgegeven bestand in lees- en schrijfmodes en retourneert een pointer naar de bestandsresource.
fopen($this->file, 'r+')
method

%file -> readable

line 45
Controleert of het opgegeven bestand leesbaar is.
is_readable($this->file)
method

%file -> src

line 46
Deze expressie genereert een data-URI voor een bestand, waarbij het MIME-type en de base64-gecodeerde inhoud worden gecombineerd.
"data:$this->mime;base64,$this->base64"
method

%file -> size

line 47
Geeft de grootte van het opgegeven bestand in bytes terug.
filesize($this->file)
method

%file -> sizeHuman (int $precision = 0)

line 48
Converteert een bestandsgrootte in bytes naar een leesbaar formaat, met een optionele precisie voor decimalen.
size_human($this->size, $precision)
method

%file -> sha1

line 49
Berechnet de SHA-1-hash van het opgegeven bestand.
sha1_file($this->file)
method

%file -> shortenTo (int $length)

line 50
Verkort de bestandsnaam tot een opgegeven lengte terwijl de bestandsextensie behouden blijft, met toevoeging van een ellips als de naam wordt ingekort.
strlen($this->name) <= $length ? $this->name : substr($this->name, 0, $length - strlen($this->ext) - 3).dot.dot.dot.$this->ext
method

%file -> title

line 51
Haalt de titel uit de bestandsnaam door deze om te zetten naar een leesbaar formaat, waarbij underscores worden vervangen door spaties en de eerste letter wordt gecapitaliseerd.
ucfirst(strtr(pathinfo($this->name, PATHINFO_FILENAME), [us => space]))
method

%file -> token ($length = 20)

line 52
Genereert een token van de opgegeven lengte met behulp van SHA-1 hashing.
token($length, $this->sha1)
method

%file -> type

line 53
Haalt het type van een bestand uit de MIME-type door de substring voor de eerste slash op te halen.
substr($this->mime, 0, strpos($this->mime, slash))
method

%file -> touch

line 54
Maakt een nieuw bestand aan of werkt de tijdstempel van een bestaand bestand bij dat door het bestandspad is opgegeven.
touch($this->file)
method

%file -> writable

line 55
Controleert of het opgegeven bestand schrijfbaar is.
is_writable($this->file)
method

%file -> writeINI ($data, bool $deleteEmpty = false)

line 56
Schrijft gegevens naar een INI-bestandsformaat. De optionele parameter staat het verwijderen van lege secties toe als deze op true is ingesteld.
$this->write(!$deleteEmpty || $data ? loop($data, fn($value, $key) => $key.' = '.dq.strtr($value, [dq => bs.dq, lf => '\n']).dq, lf).lf : void, $deleteEmpty)
method

%file -> writeJSON ($data, bool $deleteEmpty = false)

line 57
Schrijft de opgegeven gegevens naar een JSON-bestand, met de optie om het bestand te verwijderen als de gegevens leeg zijn.
$this->write(!$deleteEmpty || $data ? json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) : void, $deleteEmpty)
method

%file -> writeJSONplain ($data, bool $deleteEmpty = false)

line 58
Schrijft de opgegeven gegevens als een JSON-string naar een bestand, met de optie om lege vermeldingen te verwijderen op basis van de deleteEmpty-vlag.
$this->write(!$deleteEmpty || $data ? json_encode($data) : void, $deleteEmpty)
method

%file -> write (string $data, bool $deleteEmpty = false)

line 59
Schrijft de opgegeven stringgegevens naar een bestand, met de optie om het bestand te verwijderen als de gegevens leeg zijn.
if (!$data && $deleteEmpty) return $this->delete
if ($written = file_put_contents($this->file, $data, LOCK_EX) !== false) debug('Written '.$this->basename.' ('.$this->sizeHuman.')')
else error('Could not write '.$this->file)
return $written
method

%file -> objInfo

line 66
Maakt een object aan met informatie over een bestand, inclusief de naam, het bestaan, en optioneel de grootte, aanmaakdatum, wijzigingsdatum en MIME-type als het bestaat.
array_combine($keys = array_merge(['file', 'name', 'exists'], $this->exists ? ['sizeHuman', 'createdHuman', 'modifiedHuman', 'mime'] : []), loop($keys, fn($arg) => $this->$arg))
object

%img

/phlo/resources/files/img.phlo
version 1.0
creator q-ai.nl
summary GD image resource
package files
frontend false
backend true
tags image gd file graphics
static

img :: detect ($data)

line 9
Detecteert het afbeeldingsformaat van gegeven binaire gegevens door de header te onderzoeken en retourneert het bijbehorende formaat als een string.
$header = substr($data, 0, 12)
if (substr($header, 0, 3) === "\xFF\xD8\xFF") return 'jpg'
if (substr($header, 0, 8) === "\x89PNG\x0D\x0A\x1A\x0A") return 'png'
if (substr($header, 0, 6) === 'GIF87a' || substr($header, 0, 6) === 'GIF89a') return 'gif'
if (substr($header, 0, 4) === 'RIFF' && substr($header, 8, 4) === 'WEBP') return 'webp'
if (substr($header, 0, 2) === "BM") return 'bmp'
if (substr($header, 0, 4) === "\x49\x49\x2A\x00" || substr($header, 0, 4) === "\x4D\x4D\x00\x2A") return 'tiff'
static

img :: search ($search)

line 19
Deze functie zoekt naar afbeeldingen op Google op basis van een query, haalt de afbeeldingsgegevens op en retourneert een willekeurig geselecteerde base64-gecodeerde afbeeldingsbron uit de beste resultaten.
$q = strtr($search, [dash => '+'])
$DOM = HTTP("http://images.google.it/images?as_q=$q&hl=it&imgtbs=z&btnG=Cerca+con+Google&as_epq=&as_oq=&as_eq=&imgtype=&imgsz=m&imgw=&imgh=&imgar=&as_filetype=&imgc=&as_sitesearch=&as_rights=&safe=images&as_st=y", agent: true)
$sources = regex_all('/var s=\'data:image\/jpeg;base64,([^\']{1000,})/', $DOM)[1]
usort($sources, fn($a, $b) => strlen($b) <=> strlen($a))
$sources = array_slice($sources, 0, 5)
shuffle($sources)
$source = current($sources)
$source = base64_decode($source)
return $source
static

img :: __handle

line 31
Dit haalt de afbeeldingsbron op van het opgegeven bestandspad.
"img/$file"
method

%img -> __construct (public string $file)

line 32
Initialiseert een img-object met een openbare stringeigenschap $file die het bestandspad van de afbeelding vertegenwoordigt.
prop

%img -> src:GdImage

line 34
Deze functie maakt een afbeeldingsresource aan vanuit een string die afbeeldingsgegevens bevat, meestal geladen vanuit een bestand.
imagecreatefromstring(file_get_contents($this->file))
prop

%img -> width

line 35
Haal de breedte op van een afbeeldingsbron die is opgegeven door de `src`-eigenschap.
imagesx($this->src)
prop

%img -> height

line 36
Geeft de hoogte van de afbeelding die is opgegeven door de `src`-eigenschap.
imagesy($this->src)
method

%img -> scale ($width = null, $height = null, $crop = false)

line 38
Schaalt de afbeelding naar de opgegeven breedte en hoogte, met de mogelijkheid om deze te croppen op basis van de opgegeven parameters.
if (!$width && !$height) return $this
$srcW = $this->width
$srcH = $this->height
$doCrop = ($crop && $width && $height)
if ($width && $height) $scale = $doCrop ? max($width / $srcW, $height / $srcH) : min($width / $srcW, $height / $srcH)
elseif ($width) $scale = $width / $srcW
else $scale = $height / $srcH
if ($scale >= 1) return $this
$scaledW = (int)round($srcW * $scale)
$scaledH = (int)round($srcH * $scale)
$destW = ($width && $height && $doCrop) ? (int)$width : $scaledW
$destH = ($width && $height && $doCrop) ? (int)$height : $scaledH
$offsetX = 0
$offsetY = 0
if ($width && $height && $doCrop){
	$offsetX = (int)-round(($scaledW - $destW) / 2)
	$offsetY = (int)-round(($scaledH - $destH) / 2)
	if ($crop === 'top') $offsetY = 0
	elseif ($crop === 'bottom') $offsetY = (int)-($scaledH - $destH)
}
$destImg = imagecreatetruecolor($destW, $destH)
imagealphablending($destImg, false)
imagesavealpha($destImg, true)
imagecopyresampled($destImg, $this->src, $offsetX, $offsetY, 0, 0, $scaledW, $scaledH, $srcW, $srcH)
$this->src = $destImg
$this->width = $destW
$this->height = $destH
return $this
method

%img -> ext ($file = null)

line 69
Geeft de bestandsextensie van het opgegeven bestand in kleine letters terug. Als er geen bestand is opgegeven, wordt het standaardbestand van de instantie gebruikt.
strtolower(pathinfo($file ?? $this->file, PATHINFO_EXTENSION))
method

%img -> source ($format = null)

line 71
Haal de bron van een afbeelding op in het opgegeven formaat, of het standaardformaat als er geen is opgegeven, door de uitvoer van de write-methode vast te leggen.
ob_start()
$this->write($format)
return ob_get_clean()
method

%img -> save ($file = null)

line 77
Slaat de afbeelding op de opgegeven bestandslocatie op als deze is opgegeven; anders schrijft het de afbeelding naar een standaardlocatie.
$file && $this->file = $file
return $this->write(null, $this->file)
method

%img -> write ($format = null, $file = null)

line 82
Schrijft de afbeelding naar een bestand in het opgegeven formaat, met JPEG als standaard als er geen formaat is opgegeven. Ondersteunde formaten zijn PNG, GIF, WebP en JPEG.
$format ??= $this->ext()
if ($format === 'png') return imagepng($this->src, $file, 8)
if ($format === 'gif') return imagegif($this->src, $file)
if ($format === 'webp'){
	imageistruecolor($this->src) || imagepalettetotruecolor($this->src)
	return imagewebp($this->src, $file)
}
return imagejpeg($this->src, $file, 85)
object

%INI

/phlo/resources/files/INI.phlo
version 1.0
creator q-ai.nl
summary Generic INI resource
package files
frontend false
backend true
tags file ini config parser
prop

%INI -> objFile:string

line 9
INI->$objFile wordt gebruikt om een INI-bestandobject te maken of te openen voor het lezen of schrijven van configuratie-instellingen.
static

INI :: __handle

line 11
INI::$__handle haalt de handle op voor het opgegeven INI-bestand, met de optie om het te parseren op basis van de opgegeven parameters.
"INI/$path$filename".(!$parse ? '/0' : void)
method

%INI -> __construct (string $filename, ?string $path = null, bool $parse = true)

line 12
Initialiseert een INI-object met een opgegeven bestandsnaam en optioneel pad, en leest het bestand als het toegankelijk is.
$path ??= data
$this->objFile = $path.strtr($filename, [slash => dot]).'.ini'
if (is_readable($this->objFile)) $this->objRead($parse)
method

%INI -> objRead ($parse = true)

line 18
Leest een INI-bestand en converteert het naar een obj, waarbij de waarden optioneel in hun respectieve types worden geparsed.
last($this->objData = parse_ini_file($this->objFile, true, $parse ? INI_SCANNER_TYPED : INI_SCANNER_RAW), $this->objChanged = false, $this)
method

%INI -> objWrite

line 19
Schrijft de huidige objectgegevens naar een INI-bestandsformaat, waarbij ervoor wordt gezorgd dat speciale tekens correct worden ontsnapt en het bestand tijdens de schrijfoperatie wordt vergrendeld.
file_put_contents($this->objFile, loop($this->objData, fn($value, $key) => $key.' = '.dq.strtr($value, [dq => bs.dq, lf => '\n']).dq, lf).lf, LOCK_EX)
method

%INI -> __destruct

line 21
De INI->__destruct-methode controleert of het object is gewijzigd en roept de objWrite-methode aan indien nodig om opruiming te verzorgen voordat het object wordt vernietigd.
$this->objChanged && $this->objWrite()
object

%JSON

/phlo/resources/files/JSON.phlo
version 1.0
creator q-ai.nl
summary Generic JSON resource
package files
frontend false
backend true
requires json_read json_write
tags file json storage parser
static

JSON :: __handle

line 10
Deze functie bouwt een JSON-bestandspad op basis van de opgegeven bestandsnaam en een associatieve boolean-vlag, die het formaat van het pad bepaalt.
"JSON/$path$filename".(is_bool($assoc) ? slash.(int)$assoc : void)
method

%JSON -> __construct (string $filename, ?string $path = null, $assoc = null)

line 11
Construeert een JSON-object op basis van een opgegeven bestandsnaam en optioneel pad, en initialiseert het object als het bestand leesbaar is.
$path ??= data
$this->objFile = "$path$filename.json"
if (is_readable($this->objFile)) $this->objRead($assoc)
readonly

%JSON -> objFile:string

line 17
Converteert een JSON-string naar een Phlo obj voor verdere manipulatie of verwerking.
method

%JSON -> objTouch

line 19
Stelt de objChanged-eigenschap in op true, wat aangeeft dat het object is gewijzigd.
$this->objChanged = true
method

%JSON -> objRead ($assoc = null)

line 20
Leest een JSON-bestand en converteert het naar een object of een associatieve array op basis van de opgegeven parameter.
last($data = json_read($this->objFile, $assoc), $this->objData = $assoc || is_array($data) ? $data : get_object_vars($data), $this->objChanged = false, $this)
method

%JSON -> objWrite ($data, $flags = null)

line 21
Schrijft JSON-gegevens naar een objectbestand, eventueel met opgegeven vlaggen om het schrijfgedrag aan te passen.
first($written = json_write($this->objFile, $data, $flags), $written && $this->objChanged = false)
method

%JSON -> __destruct

line 23
Deze methode wordt aangeroepen wanneer een object wordt vernietigd, en zorgt ervoor dat eventuele wijzigingen aan de gegevens van het object worden geschreven voordat het uit het geheugen wordt verwijderd.
$this->objChanged && $this->objWrite($this->objData)
object

%PDF

/phlo/resources/files/PDF.phlo
version 1.0
creator q-ai.nl
summary PDF generator and reader
package files
frontend false
backend true
tags file pdf reader generator
static

PDF :: toText (string $file):string

line 9
Converteert een PDF-bestand naar platte tekst met behulp van de `pdftotext` commandoregeltool en retourneert de geëxtraheerde tekst.
$process = proc_open('pdftotext '.escapeshellarg($file).' -', [['pipe', 'r'], ['pipe', 'w'], ['pipe', 'w']], $pipes)
if (!is_resource($process)) return null
fclose($pipes[0])
$text = stream_get_contents($pipes[1])
fclose($pipes[1])
$error = stream_get_contents($pipes[2])
fclose($pipes[2])
($code = proc_close($process)) && error("PDFToText Error: pdftotext command failed with code $code. Error: $error")
return rtrim($text, "\f")
prop

%PDF -> title

line 21
Genereert een PDF-document met de opgegeven titel.
null
prop

%PDF -> author

line 22
Haalt de auteur van het PDF-document op.
null
prop

%PDF -> subject

line 23
Genereert een PDF-document op basis van het opgegeven onderwerp.
null
prop

%PDF -> keywords

line 24
Genereert een lijst van trefwoorden die zijn geëxtraheerd uit een PDF-document.
null
prop

%PDF -> creator

line 25
De PDF->$creator eigenschap haalt de informatie over de maker van het PDF-document op.
'Phlo '.phlo.' (https://phlo.tech/)'
prop

%PDF -> filename

line 27
Dit item specificeert de bestandsnaam 'Download.pdf' voor een PDF-resource.
'Download.pdf'
prop

%PDF -> mode

line 28
Stelt de modus in voor PDF-verwerking, waarbij 'D' een specifieke werkwijze aangeeft.
'D'
method

%PDF -> fromHTML ($HTML)

line 30
Genereert een PDF-document vanuit de opgegeven HTML-inhoud met behulp van de Mpdf-bibliotheek, waarbij verschillende metadata-eigenschappen zoals titel, auteur, onderwerp, trefwoorden en maker worden ingesteld voordat het bestand wordt geëxporteerd.
$mpdf = new \Mpdf\Mpdf
$this->title && $mpdf->SetTitle($this->title)
$this->author && $mpdf->SetAuthor($this->author)
$this->subject && $mpdf->SetSubject($this->subject)
$this->keywords && $mpdf->SetKeywords($this->keywords)
$this->creator && $mpdf->SetCreator($this->creator)
$mpdf->WriteHTML($HTML)
return $mpdf->Output($this->filename, $this->mode)
object

%XLSX

/phlo/resources/files/XLSX.phlo
version 1.0
creator q-ai.nl
summary XLSX reader resource
package files
frontend false
backend true
requires php-ext:zip
tags file xlsx excel reader
method

%XLSX -> __construct (string $file)

line 10
Initialiseert een XLSX-object door het opgegeven Excel-bestand te openen en de bladen, gedeelde strings en werkboekinformatie te extraheren.
$sheets = []
$shared = []
$sheetNames = []
$zip = new ZipArchive()
if ($zip->open($file) !== true) dx('error opening zip', $file)
for ($i = 0; $i < $zip->numFiles; $i++){
	$name = $zip->getNameIndex($i)
	if ($name === false) continue
	if (dirname($name) === 'xl/worksheets') $sheets[filter_var($name, FILTER_SANITIZE_NUMBER_INT)] = $zip->getFromIndex($i)
	elseif ($name === 'xl/sharedStrings.xml'){
		$xml = $zip->getFromIndex($i)
		if (!preg_match_all('/<t[^>]*>(.*?)<\/t>/s', $xml, $m)) dx('error reading shared lib')
		$shared = array_map(fn($t) => html_entity_decode($t, ENT_QUOTES | ENT_XML1, 'UTF-8'), $m[1])
	}
	elseif ($name === 'xl/workbook.xml'){
		$xml = $zip->getFromIndex($i)
		if (!preg_match_all('/<sheet[^>]*name="([^"]+)"[^>]*sheetId="([0-9]+)"/', $xml, $m)) dx('error reading workbook')
		$sheetNames = $m[1]
	}
}
$zip->close()
$toIndex = fn($letters) => array_reduce(str_split(strtoupper($letters)), fn($n, $c) => $n * 26 + ord($c) - 64, 0) - 1
$isShared = fn($attrs) => preg_match('/\bt="s"\b/', $attrs) === 1
foreach ($sheets AS $sheetID => $sheet){
	$name = $sheetNames[$sheetID - 1] ?? 'Sheet '.$sheetID
	if (!preg_match('/<row[^>]*>(.+)<\/row>/s', $sheet, $m)) dx('error parsing sheet')
	$rowsXml = preg_split('/<\/row><row[^>]*>/', $m[1]) ?: []
	$headerMap = []
	$isHeader = true
	foreach ($rowsXml AS $rowXml){
		$rowXml = preg_replace('/<c([^>]*)\/>/', '<c$1></c>', $rowXml)
		if (!preg_match_all('/<c r="([A-Z]+)[0-9]+"([^>]*)>(?:<f\b[^>]*\/?>)?(?:(?:<v>([^<]*)<\/v>)|(?:<is>.*?<t[^>]*>(.*?)<\/t>.*?<\/is>))?<\/c>/s', $rowXml, $mm)) dx('error parsing row', $rowXml)
		if ($isHeader){
			foreach (array_keys($mm[0]) AS $i){
				$col = $toIndex($mm[1][$i])
				$attrs = $mm[2][$i]
				$valV = $mm[3][$i] ?? null
				$valIS = $mm[4][$i] ?? null
				$val = $valV !== null && $valV !== void ? $valV : ($valIS !== null && $valIS !== void ? html_entity_decode($valIS, ENT_QUOTES | ENT_XML1, 'UTF-8') : null)
				$txt = $isShared($attrs) ? ($shared[$val] ?? null) : $val
				$headerMap[$col] = $txt !== null && $txt !== void ? $txt : 'col'.$col
			}
			$isHeader = false
		}
		else {
			$rowArr = []
			foreach (array_keys($mm[0]) AS $i){
				$col = $toIndex($mm[1][$i])
				$attrs = $mm[2][$i]
				$valV = $mm[3][$i] ?? null
				$valIS = $mm[4][$i] ?? null
				$val = $valV !== null && $valV !== void ? $valV : ($valIS !== null && $valIS !== void ? html_entity_decode($valIS, ENT_QUOTES | ENT_XML1, 'UTF-8') : null)
				$key = $headerMap[$col] ?? 'col'.$col
				$rowArr[$key] = $isShared($attrs) ? ($shared[$val] ?? null) : $val
			}
			$this->objData[$name][] = $rowArr
		}
	}
}

We gebruiken essentiële cookies om deze site te laten werken. Met uw toestemming gebruiken we ook analytics om de site te verbeteren.