PHP Kookboek

PHP Kookboek: meer dan 300 recepten voor PHP (voorplat omslag) PHP Kookboek (achterplat omslag)

Meer dan 300 recepten voor PHP

In het PHP Kookboek van Ward van der Put vind je meer dan driehonderd recepten voor PHP, thematisch verdeeld in acht hoofdstukken:

2PHP en (X)HTML
1Hello world
2Nooit meer overwerken rond de jaarwisseling
3Client-servermodel met PHP
4Technisch model met PHP
5Functioneel model met PHP
6Snel een webserver opzetten
6aXAMPP voor Windows, Mac OS, Linux en Solaris
6bWampServer voor WAMP
6cMAMP voor Mac OS X
7Editors en IDE’s voor PHP
8Lange PHP-tags
9Korte PHP-tags
9aMaximale compatibiliteit met lange PHP-tags
9bConfiguratiefout en beveiligingsprobleem
10XML- en XHTML-tags
11Let op de BOM
12PHP-bestanden met een open einde
13PHP in HTML-tags voor script
14Foutmeldingen inschakelen en weergeven
15Output printen of echoën
16Variabelen buiten aanhalingstekens
17Sneller echoën met komma’s
18Heredoc
19Nowdoc
20HTML templating met server-side includes
21Extensies van server-side includes
22Server-side includes in vier smaken
23Tien websites voor de prijs van één
24Server-side includes veilig opslaan
25Toegang tot directory’s blokkeren
26Bestandstypen en extensies beveiligen
27Gzip-compressie inschakelen voor snellere webpagina’s
28Gzip-compressie van PHP inschakelen in .htaccess
29Gzip-compressie van meer bestandstypen inschakelen in .htaccess
30Gzip vervangen door deflate
31Buffers flushen en een FOUC voorkomen
3Programmeren met PHP
32Commentaar in vier stijlen
33Tabellen in commentaar
34Nuttige tags uit phpDocumentor
34aVersiebeheer
34bAuteur en auteursrecht
34cLicentie
34dOnderdelen van applicaties
34eInvoer en uitvoer
34fHyperlinks
34gWat moeten we nog doen?
35PHP-scripts printen in kleur
36PHP-code inspringen
37PHP-code inspringen met spaties of tabs
38PHP-code uitlijnen met extra spaties
39Regels voor regeleinden
40Regels voor witregels
41Accolades in K&R-stijl en Allman-stijl
42Ternary operator
43PHP-instructies met of zonder ronde haakjes
44Hoofdletters en kleine letters
45Hongaarse notaties voor PHP
46Userland: het land van nooit gedacht
47Variabelen declareren
48Variabelen dumpen
49Variabelen opruimen
50Combinaties van variabelen in URL’s fatsoeneren
51Constanten definiëren met define()
52Constanten definiëren met const
53Namen van constanten
54Variabelen vervangen door constanten
55Variabele constanten
56Variabelen opnemen in constanten
57Ongedefinieerde variabelen en constanten
58Rekenmeesters laten rekenmonsters met rust
59Syntaxis van booleaanse waarden
60Statische arrays gebruiken als constanten
61Functieresultaat of hulpvariabele
62Vandaag besteld, morgen in huis
63Dure resources efficiënter gebruiken
64Programmeren met bits en bitmaskers
65Defensief programmeren
66Voorwaarden combineren of splitsen
67Fouten afhandelen met foutmeldingen
68Fouten afhandelen in PHP-stijl
69Fouten afhandelen als uitzonderingen
70Fouten onderdrukken
71Achterwaartse compatibiliteit
72PHP-versie controleren
73Voorwaartse compatibiliteit
73aVerouderde onderdelen van PHP
73bPHP 5.3 en PHP 6
73cStrict Standards-modus
74Objecten, eigenschappen en methoden
74aEigenschappen en variabelen
74bMethoden en functies
75Methoden en eigenschappen combineren
76Object of klasse
77Van eigenschappen en methoden naar klassen
78Zichtbaarheid van eigenschappen en methoden
79Getters en setters
80Constructors
81Klassen zonder constructor
82Standaardeigenschappen en constructors
83Modules en extensies hergebruiken als klassen
84Constructors in de stijl van PHP 4
85Destructors
86Snellere webpagina’s met een constructor en destructor
87Objecten opslaan in sessies of databases
88Slapen en ontwaken
4Webdesign en sitebeheer
89Tijdzone instellen
90Kalenders weergeven
91Eerste dag van de week
92URL’s met datums en trefwoorden
93Datums en tijden volgens internetstandaarden
94HTTP-clientfouten en HTTP-serverfouten
94aWebpagina’s voor HTTP-fouten instellen als ErrorDocument
94bHTML of XHTML voor serverfouten
94cHTTP-fouten genereren met de functie header()
95HTTP-methoden controleren
96Een geslaagde POST eindigen met GET
97PHP-pagina’s verplaatsen en een 404 Not Found voorkomen
98Webpagina’s verplaatsen via .htaccess
99Doorverwijzen van .html naar .php
100PHP-bestanden weergeven met de extensie .html
101HTML-bestanden afhandelen als PHP-script
102Hostnamen met of zonder www
103URL’s herschrijven voor één bestand
104Fouten e-mailen
105Websites tijdelijk offline halen
106Taalvoorkeuren bepalen met domeinnamen en hostnamen
106aDomeinen en domeinnamen
106bHostnamen en subdomeinen
107Taalvoorkeuren bepalen met directory’s
108Taalvoorkeuren bepalen met herschreven URL’s
109Taalvoorkeuren bepalen met HTTP
110Gewogen taalvoorkeuren bepalen met HTTP
111Uitzonderingen voor online shopping in de EU
112Talen van webpagina’s melden
113Cookies zetten en lezen
114Cookies coderen in 7-bits ASCII
115Gevulde koeken in overvolle koektrommels
116Meerdere variabelen opslaan in één cookie
117Variabelennamen voor cookies
117aKorte variabelennamen voor cookies
117bLeesbare variabelennamen voor cookies
118Cookies verwijderen
119Reageren op zoekwoorden van Google
120Sneller en effectiever zoeken
121Zoeken met synoniemen en een spellingcontrole
122Zoeken met hints voor betere resultaten
123Browsercache uitschakelen
124URL’s inkorten voor Twitter
124aHostnaam zonder subdomein
124bAparte hostnaam voor ingekorte URL’s
124cUnieke ID’s genereren
125Hoofdlettergevoelige ID’s opslaan in een database
126Hot linking bestrijden met een rewrite rule
127Hot linking bestrijden zonder rewrite rule
128Downloads forceren
129IP-adressen blokkeren met PHP
130IP-adressen blokkeren met Apache
131Geografische afstanden berekenen
132Pauzes inlassen
133Snelheden vergelijken met timers
134Meten met statistisch betrouwbare timers
135Snellere functies en methoden schrijven
136Server-side includes combineren
137Meten is weten, maar weet wat je meet
137aClient of server
137bEen 80/20-regel
137cNiet-lineaire prestaties
138Afmetingen van afbeeldingen achterhalen
139Thumbnails genereren
140Sitestatistieken bijhouden met een database
141A/B-tests opzetten met IP-adressen
142A/B-tests opzetten met sessies en cookies
5Databases en MySQL
143Data opslaan in tekstbestanden
144SQL-databases zonder databaseserver
145Databasegestuurde webapplicaties in zes gangen
145aStap 1: SQL-query opstellen
145bStap 2: databaseverbinding openen
145cStap 3: database selecteren
145dStap 4: SQL-query uitvoeren
145eStap 5: resultaten verwerken
145fStap 6: resultaatset en databaseverbinding sluiten
146Hoeveel is veel?
147MySQL-engines: MyISAM of InnoDB
147aMyISAM voor snelle selectiequery’s
147bInnoDB voor snelle bijwerkquery’s
147cInnoDB voor referentiële integriteit
147dInnoDB voor ACID-transacties
147eMyISAM voor een full-text search
147fMyISAM voor schijfruimte
147gMyISAM en InnoDB combineren
147hTesten en meten
148Naamgeving bij MySQL-databases
148aASCII-karakters uit het Latijnse alfabet
148bHoofdletters voor SQL en kleine letters voor namen
148cSpaties vervangen door underscores
149Enkelvoud voor kolommen, meervoud voor tabellen
150Naamconflicten oplossen met de puntnotatie
151Naamconflicten voorkomen met GUID’s
152Fouten afhandelen bij het openen van databaseverbindingen
153MySQL op het kerkhof
154SQL-injecties
154aManipulaties in de DML (data manipulation language)
154bManipulaties in de DDL (data definition language)
155SQL-injectie bestrijden met controlestructuren
156SQL-injectie bestrijden met escapes
157SQL-injectie voorkomen met prepared statements
158MySQL afschermen met PHP
159Booleaanse waarden opslaan in databases
160Floats opslaan als integers
161Datums opslaan als integers
162ISO-datums weergeven in het Nederlands
163Rijke data voor tekst: meer is meer
164Ideale paginatitels volgens Google en het W3C
165Karaktersets in MySQL
166Collaties in MySQL
167Databaseverbindingen bij UTF-8
168Waarden beperken met enumeraties
169Alfabetisch sorteren zonder lidwoorden
170Data logisch sorteren
171Aselect databasegegevens weergeven
172LEFT JOIN of RIGHT JOIN
173Vragen beantwoorden met query’s en joins
173aPRIMARY KEY (PK) en FOREIGN KEY (FK)
173bJOIN
173cLEFT JOIN
173dRIGHT JOIN
173eVan data naar informatie
174Refererende sleutels toevoegen
175Unieke waarden afdwingen
176Veel-op-veel-relaties
177SQL-query’s uitschrijven
178Prioriteit van query’s
179INSERT en UPDATE combineren
180DELETE en INSERT combineren
181Databases voor gebruikersaccounts
181aGebruikersnaam en wachtwoord
181bGebruikersnaam en versleuteld wachtwoord
181cUnieke id, gebruikersnaam en versleuteld wachtwoord
181dE-mailadres en versleuteld wachtwoord
182Platte databasetabel met landcodes en geocodes
183Relationeel datamodel met landcodes en geocodes
184Landnummers voor snelle en compacte databases
185EAV (entity-attribute-value)
186Full-text search in MySQL
187Zoeken met een full-text index
188Full-text search testen en verbeteren
189Zoekresultaten sorteren bij een full-text search
189aFull-text search met ORDER BY
189bFull-text search in een subquery
190Full-text search bij InnoDB
190aText search engines
190bZoeken in een MyISAM-schaduwkopie
191Foutloos zoeken ondanks invoerfouten
6Webformulieren
192Formulieren in HTML of XHTML
192aElementen openen en sluiten
192bAttributen met waarden
193PHP-scripts formulieren naar zichzelf laten posten
193aNaar de huidige directory posten met action="./"
193bNaar het huidige bestand posten met action=""
193cHet attribuut action weglaten
194Formulieren verzenden met GET of POST
194aStandaard-HTTP-methode
194bGegevens weergeven of verbergen
194cHoeveelheid gegevens
195Alleen GET of POST accepteren
196GET en POST combineren
197HTTP-verzoek in $_REQUEST
198Output van formulieren controleren
199Hotspots vergroten met labels
200Posten met de Enter-toets voorkomen
201Hongaarse notaties voor HTML en XHTML
202Controles beginnen met isset() en empty()
202aMet isset() controleren of variabelen bestaan
202bMet empty() controleren of variabelen leeg zijn
203Lege formuliervelden afhandelen
204Output en input beveiligen
205Witruimte en ASCII-stuurcodes verwijderen
206Strings fatsoeneren met ltrim() en rtim()
207Overbodige spaties verwijderen
207aOverbodige spaties zoeken en vervangen
207bZoeken en vervangen met preg_replace()
208Tags verwijderen
209Posts simuleren voor tests
210Input uit formulieren filteren
211Magic quotes en backslashes
211amagic_quotes_gpc in php.ini
211bget_magic_quotes_gpc() en stripslashes()
212Datatypen controleren
213Eerst converteren, daarna valideren
214Van string naar integer of float
215Tekst uit grote tekstgebieden verwerken
216Regeleinden in tekst standaardiseren
217Overbodige witregels verwijderen
218Hoofdlettergebruik corrigeren met PHP
219Hoofdlettergebruik corrigeren met JavaScript
220Tussenvoegsels in achternamen
221Standaardfouten zoeken en vervangen
222Woorden tellen met str_word_count()
223Woorden tellen als array-elementen
224Woorden tellen met substr_count()
225Datums controleren
226Nederlandse postcodes valideren
227Nederlandse bankrekeningnummers valideren
7E-mail en communicatie
228Lengte van e-mailadressen
229E-mailadressen valideren met een reguliere expressie
230E-mailadressen valideren met een filterfunctie
231E-mailadressen valideren met een DNS-lookup
232E-mailadressen valideren met MX-records
233E-mailadressen in HTML5
234E-mailadressen in webteksten weergeven of verbergen
234aE-mailadressen weergeven als hyperlinks
234bE-mailadressen verbergen
235E-mail verzenden met de PHP-functie mail()
236CC of BCC e-mailen
237Wettelijke bewaarplicht voor e-mail en bijlagen
238Prioriteit van e-mailberichten verhogen
239Regeleinden in SMTP
240E-mailinjecties met regeleinden voorkomen
241Spamfilters omzeilen
241aSMTP-headers voor de afzender
241bNaam van de geaddresseerde
241cE-mailberichten testen
242E-mail verzenden als HTML met opmaak
243E-mail verzenden met Swift Mailer
244E-mail verzenden met PHPMailer
245URL’s voor telefoonnummers
246Telefoonnummers valideren
247Cijfers in telefoonnummers tellen
248Uitzonderingen voor speciale telefoonnummers
249Telefoonnummers vermommen met HTML-entiteiten
250E-mailadressen en telefoonnummers weergeven als afbeeldingen
251Quick response (QR) voor smartphones
8Ajax
252Ajax-effecten zonder Ajax
253Client-servermodel bij Ajax
254Controleren of JavaScript wordt ondersteund
255Van ActiveX naar DOM
256Browsercontrole voor ActiveX
257Ajax op de client
258Ajax op de server
259PHP-applets voor Ajax-applicaties
260Geen actie zonder reactie
261PHP-sessies bij Ajax
261aSessies starten en hervatten
261bSessie-ID’s niet opnieuw genereren
261cGeblokkeerde sessiecookies omzeilen
262Caching bij de HTTP-methode GET
262aCaching verbieden met HTTP-headers
262bURL’s dynamisch veranderen met JavaScript
9Beveiliging
263Binnen via de achterdeur
264PHP in de safe mode
265Beveiligde verbindingen gebruiken
266Beveiligde verbindingen openen bij Apache en IIS
267Beveiligde verbindingen openen bij mod_ssl en OpenSSL
268Beveiligde verbindingen openen met poortnummers
269Sessie-ID’s sterker versleutelen
270Sessie-ID’s opnieuw genereren
271Diefstal van cookies en sessiecookies voorkomen
272PHP-sessies vermommen
273Serversoftware verbergen met PHP
274Serversoftware verbergen in de serverconfiguratie
274aConfiguratie van Apache
274bConfiguratie van PHP
274cSuhosin-patch voor ‘Hardened PHP’
275Digitale kluis met tijdslot
276Aselecte getallen genereren
277Mersenne Twister (MT)
278Lange aselecte getallen genereren
279Nog langere aselecte getallen genereren als numerieke strings
280Sterke wachtwoorden genereren
281Compatibele wachtwoorden genereren
282Gemakkelijke maar veilige wachtwoorden genereren
283Nog gemakkelijkere en veiligere wachtwoorden genereren
284Aselect wachtwoorden trekken uit een vaste karakterset
285Getallen weigeren als wachtwoord
286Minimumlengte van wachtwoorden
287Woordenboekaanvallen voorkomen
288Wachtwoordsterkte controleren met CrackLib
289Wachtwoordsterkte controleren met reguliere expressies
290Gebruikersnamen behandelen als wachtwoorden
291Wachtwoorden veilig wijzigen
292Registratiesleutels en kortingscodes
293Inloggen zonder database
294Inloggen met een database
295Inloggen met een HTTP-basisverificatie
296Aantal inlogpogingen per sessie
297Aantal inlogpogingen per gebruiker
298Aantal inlogpogingen per IP-adres
299Automatisch inloggen of niet?
300Niet inloggen zonder uitloggen
301Password managers omzeilen
301aAutoComplete uitschakelen
301bAutoComplete omzeilen
302Cookies symmetrisch versleutelen
303Data in cookies symmetrisch versleutelen
304Data in cookies asymmetrisch versleutelen
305SHA-1 vervangen door SHA-2 voor asymmetrisch encryptie
306Databasegegevens versleutelen met SHA-2
307Symmetrische encryptie in MySQL
308Pittige encryptie met peper en zout
308aEncryptie met een salt
308bUnieke geheime codes gebruiken
308cEncryptiealgoritmen variëren
309Transacties beveiligen met een TAN-lijst in een database
310Transacties beveiligen met een TAN-lijst zonder database
311Databaseaccounts met beperkte rechten
312Frame hijacking bestrijden met JavaScript
313Frame hijacking bestrijden met HTML
314Cookie poisoning voorkomen
315Cross-site scripting (XSS) bestrijden
315aInvoer schonen met strip_tags()
315bUitvoer schonen met htmlentities()
316Cross-site request forgery (CSRF) voorkomen
316aGeen externe afbeeldingen of video’s accepteren
316bGeen ongecontroleerde hyperlinks publiceren
316cNiet automatisch inloggen
316dWel automatisch uitloggen
316eHTTP-referrer controleren
316fAanvullende beveiligingen van webformulieren
317User agents controleren
318Onveilige functies en klassen uitschakelen

Voorproevers: Harm Cox (@harmisookhier), Niek Heezemans en René Weishaupt (@GetZenned).