Api > Io


De IO-methodes maken het mogelijk bepaalde bestanden op vaste locaties te lezen, schrijven, verwijderen en listen. Via deze API is het mogelijk om onder meer .zip, .twig en .md-bestanden te maken en te lezen.

Functies
api.IO_createZip( filearray ) - Maak een ZIP van meerdere bestanden (strings), array met 'name' en 'data' (blob) vereist.
api.IO_readZip( zipStream (contents) ) - Lees een zipfile naar een array met file-objecten, met per file "name" en "data".
api.IO_twigFile( filename ) - Twig files (blocks en template-map)
api.IO_iniFile( filename ) - Custom INI files (assets/config-map) – IO_iniFile - INI lezen/schrijven.
api.IO_mdFile( filename ) - MD files (blocks-map)
api.IO_davClient( pathname+filename ) - Ieder type file via WebDav ophalen / schrijven – IO_davClient - WebDav Client
api.IO_ftpClient( server, username, password, port=21, ssl=false, timeout=30 ) - Lezen/schrijven op een FTP server – IO_ftpClient
api.IO_sftpClient( server, username, passwordOrPassphrase, port=22,privatekey,timeout=30 ) - Lezen/schrijven op een sFTP server – IO_sftpClient
api.IO_staticFile( filename ) - Static uploads (publiek beschikbaar (warning) static-map)

Static files kunnen enkel worden gebruikt met de volgende extensies: doc, docx, zip, xls, xlsx, xml, png, jpg, gif, txt

Indien andere extensies gebruikt moeten kunnen worden, kunnen deze worden opgegeven in de frameworkconfig (config.ini):

[security]
    staticext[]     = "exe"
    staticext[]     = "dmg"
    staticext[]     = "iso"

Zip

Zip lezen
Om ZIP bestanden te lezen dient de inhoud van een ZIPfile doorgegeven te worden aan de IO_readZip API. De response is een array met file-objecten.

{% set zip = api.IO_staicFile('sample.zip').get() %}

{% for file in api.IO_readZip(zip, true) %}
    {% do api.IO_staticFile('unpack/' ~ file.name).set(file.data) %}

{% endfor %}

Zip uitpakken
Om ZIP bestanden te maken van meerdere file-strings kan een array met name en data worden opgegeven;

{% set zipdata = api.IO_createZip( [ { name : 'test.txt', data : 'Dit is een test' } , { name : 'bla.txt', data : 'Dit is nog een test' } ] ) %}
{% set written    = api.IO_staticFile( 'test.zip' ).set(zipdata) %}

*Methodes File*
Alle IO_
api's hebben de beschikking over de volgende methodes, en gebruiken standaard de filename opgegeven in de constructor:

api.IO_xFile(filename).method() :
  • .get( filename )
    Verkrijg de inhoud van een bestand; geeft een lege string indien het bestand niet bestaat.

Uitzonderingen voor: IO_iniFile - INI lezen/schrijven

  • .set( contents [ , filename ] )
    Overschrijft de inhoud van een bestand met de data opgegeven in contents. (warning) Indien submappen worden opgegeven, wordt zo nodig de mappenstructuur ook gemaakt.

Let op! Bij IO_ftpClient geldt een andere syntax (i.v.m. het niet kunnen opgeven van het filepath in de constructor): .set( contents, filename )

  • .del( filename ) alias: .rm() .unlink() .rm()
    Verwijdert een bestand. (warning) Indien het bestand als laatsate aanwezig is in een mappenstructuur, zal de mappenstructuur tot de map waar nog inhoud in zit tevens worden verwijderd.

  • .dir( match (regex) ) alias: .ls()
    List alle files die voldoen aan de match parameter. Indien geen parameter wordt opgegeven, worden alle files gelist. Gebruik (voorbeeld)
{% set _path = 'demo/bla/test/autogensample.twig' %}

<h2>{{ _path }}</h2>

Exists: {{ api.IO_twigFile.exists( _path )|var_dump }}
<br />

Set: {{ api.IO_twigFile( _path ).set("<h1>Dit is een test</h1><p>Hoi!</p>")|var_dump }}
<br />

Get: {{ api.IO_twigFile( _path ).get()|e|pre }}
<br />

{# Delete: {{ api.IO_twigFile( _path ).del()|var_dump }} #}
<br />

Exists: {{ api.IO_twigFile.exists( _path )|var_dump }}



IO INI bewerken

Een INI bewerken kan met deze API eenvoudig, mits:

  • Sections enkel uit kleine letters, hoofdletters en cijfers bestaan (een MD5 of SHA1 mag dus wel)
  • De input-INI valide is
  • Het wegschrijven van de output zelf wordt geregeld (de INI wordt niet weggeschreven)
  • Het verwijderen van een item geschiedt door de waarde op <[DELETE]> te zetten. Inclusief kleiner- en groterdan-tekens.

editIniFile( string iniContents, string key, string value, string section, bool addKey (true), bool addSection (false) ) Voorbeeld input:

; New configfile @ 2016-05-20 11:36:04 by José van Laar

[84c978h898hj3y8544t432g]
    id="123"
    pass="blabla3210"

Voorbeeld code:

{% set data = api.IO_iniFile('test.ini').getRaw() %}

{% set data = api.IO_editIniFile(data, 'id',         '<[DELETE]>', ('kko@ipublications.net'|lower|md5), true, true) %}

{% set data = api.IO_editIniFile(data, 'voornaam',   'Kevin',     ('kko@ipublications.net'|lower|md5), true, true) %}
{% set data = api.IO_editIniFile(data, 'achternaam', 'Koobs',       ('kko@ipublications.net'|lower|md5), true, true) %}

{% set data = api.IO_editIniFile(data, 'voornaam',   'John',       ('johndoe@gmail.com'|lower|md5), true, true) %}
{% set data = api.IO_editIniFile(data, 'achternaam', 'Doe',        ('johndoe@gmail.com'|lower|md5), true, true) %}

{{ data|pre }}

Voorbeeld resultaat:

; New configfile @ 2016-05-20 11:36:04 by José van Laar

[84c978h898hj3y8544t432g]
    pass="blabla3210"
    voornaam ="Kevin"
    achternaam="Koobs"

[43t698y8874i9773w7667r]    
    voornaam="John"
    achternaam="Doe"



IO Webdav
De IO davClient werkt net even anders dan de reguliere IO API's, omdat ieder type file gelezen en geschreven kan worden van en naar een externe WebDav server.

Er kunnen meerdere DAV verbindingen worden opgezet; één vanuit credentials in de configfile, en o.b.v. parameters in de Constructor kan er met iedere andere DAV client ook worden verbonden.

Codevoorbeeld
Zie: WebDav lezen/schrijven

Methodes

Methode Parameters Geeft terug Aliassen
ls string pattern - false bij een fout of een array met bestanden dir
- lsenc string pattern - map en/of filename met wildcards false bij een fout of een array met bestanden met URL encoded folder-/filenames
- lsdir string pattern - map en/of filename met wildcards false bij een fout of een array met bestanden met enkel mappen
- lsfile string pattern - map en/of filename met wildcards false bij een fout of een array met bestanden met enkel bestanden
- lsdirenc string pattern - map en/of filename met wildcards false bij een fout of een array met bestanden met enkel mappen met URL encoded folder-/filenames
- lsfileenc string pattern - map en/of filename met wildcards false bij een fout of een array met bestanden met enkel bestanden met URL encoded folder-/filenames
exists string pattern - map en/of filename true / false
delete string filename - map en/of filename true / false
get string filename Inhoud van een bestand of false
set string filecontents , string filename true / false
mkdir string dirname true / false

Config
De configuratie kan in de constructor worden opgegeven met: api.IO_davClient(string username , [ string username, string password ] ) - of deze kan worden opgegeven in de algemene configuratie:

[webdav]
   uri  = "https://dav.ipublications.net/webdav/"
   user = "johndoe@ipublications.net"
   pass = "Abcd1234..

Voorbeeld

{{ api.IO_davClient.mkdir('TestTest/')|pre }}
{{ api.IO_davClient.set('Hoe gaat het dan!?', 'TestTest/bla.txt')|pre }}



IO Ftp Client

De IO_ftpClient werkt identiek aan de reguliere IO-api (IO* - Werken met bestanden) met enkele kleine verschillen:

IO_ftpClient( ... ).
Heeft geen bestandspad + filter nodig als argumenten, maar:

  • server
  • username
  • password
  • port (21)
  • ssl (false)
  • timeout seconds (30)

IO_ftpClient( ... ).set( content, filename )
De filename is verplicht, hier moet de filename + het pad worden opgegeven op de externe FTP server

Voorbeeldcode:

<h1>FTP</h1>

{% set ftp = api.IO_ftpClient('213.247.1.1', 'ftpuser', 'ftppass') %}

{{ ftp.ls('Reports/')|pre }}

{{ ftp.mkdir('Reports/Old/')|pre }}

{{ ftp.set('Hi, Wietse over here :)', 'Reports/Old/Test.txt')|pre }}
{{ ftp.set('Hi, Wietse over here :)', 'Reports/Old/Test_2.txt')|pre }}

{{ ftp.delete('Reports/Old/Test_2.txt')|pre }}

.utf8( bool true )
Stel UTF8 karkaterset in, als de server dit ondersteunt. Geldt voor alle transfers na het instellen.

.pasv( bool false )
Stel passieve verbindingen in, als de server dit ondersteunt. Geldt voor alle transfers na het instellen (nodig voor sommige FTP servers i.c.m. NAT / Firewall).



IO INI lezen

De IO_iniFile werkt identiek aan de reguliere IO-api (IO* - Werken met bestanden) met enkele kleine verschillen:

IO_iniFile( filename ).get()
Geeft INI terug als parsed array

IO_iniFile( filename ).getRaw()
Geeft INI terug als platte tekst

Door getRaw te combineren met de IO_editIniFile api, kan een INI eenvoudig worden bewerkt. Zie: IO_editIniFile - INI bewerken

Voorbeeldcode:

<h1>Config</h1>

<h4>getRaw</h4>
{{ api.IO_iniFile('test.ini').getRaw()|pre }}

<h4>get</h4>
{{ api.IO_iniFile('test.ini').get()|pre }}

<h4>getRaw + editIniFile</h4>
{% set data = api.IO_iniFile('test.ini').getRaw() %}
{% set data = api.IO_editIniFile(data, 'voornaam',   'Wietse', ('w.wind@ipublications.net'|lower|md5), true, true) %}
{% set data = api.IO_editIniFile(data, 'achternaam', 'Wind',   ('w.wind@ipublications.net'|lower|md5), true, true) %}
{% set data = api.IO_editIniFile(data, 'voornaam',   'John',   ('johndoe@gmail.com'|lower|md5), true, true) %}
{% set data = api.IO_editIniFile(data, 'achternaam', 'Doe',    ('johndoe@gmail.com'|lower|md5), true, true) %}
{{ data|pre }}

Voorbeeldoutput:

getRaw

; New configfile @ 2016-05-05 11:34:09 by José van Laar

[3i82u97h47g4747g74774gf88]
     id ="123"
     pass ="Abcd1234"

get

Array
(
    [3i82u97h47g4747g74774gf88] => Array
        (
            [id] => 123
            [pass] => Abcd1234
        )
)

getRaw+editIniFile

; New configfile @ 2016-05-05 11:34:09 by José van Laar

    [3i82u97h47g4747g74774gf88]
         id ="123"
         pass ="Abcd1234"
         voornaam        ="Kevin"
         achternaam      ="Koobs"

    [9q08h889w9769g778r9874i9]
         voornaam        ="John"
         achternaam      ="Doe"



IO sFTP Client

De IO_ftpClient werkt identiek aan de reguliere IO-api (IO* - Werken met bestanden) met enkele kleine verschillen:

IO_sftpClient( ... ).
Heeft geen bestandspad + filter nodig als argumenten, maar:

  • server
  • username
  • password (of passphrase voor key)
  • port (22)
  • privatekey
  • timeout seconds (30)
  • Of password, of privatekey dient opgegeven te worden.

IO_sftpClient( ... ).set( content, filename )

Filename is verplicht, hier moet de filename + het pad worden opgegeven op de externe sFTP server

<h1>sFTP</h1>

{% set sftp = api.IO_sftpClient('213.247.1.1', 'ftpuser', 'ftppass') %}

{{ sftp.ls('Reports/')|pre }}

{{ sftp.mkdir('Reports/Old/')|pre }}

{{ ftp.set('Hi, José over here :)', 'Reports/Old/Test.txt')|pre }}
{{ ftp.set('Hi, José over here :)', 'Reports/Old/Test_2.txt')|pre }}

{{ sftp.delete('Reports/Old/Test_2.txt')|pre }}