25 februari 2018
Webdesign & <? php /* CSS
Vragen
 
 
 
 
 
Vragen Algemene en code vragen over PHP 5 juni 2009

Hier komen algemene vragen over PHP of hoe je een specifiek iets voor elkaar krijgt met code erbij.

Hoe kan ik achter de server variabelen van mijn hostingprovider komen ?
Hoe zet ik een Unix timestamp om naar een normale Nederlandse datum ?
Hoe maak je in Windows een .htaccess bestand ?
Hoe beveilig ik een map met mijn ip adres of met een gebruikersnaam en wachtwoord ?

Onderwerp: Hoe kan ik achter de server variabelen van mijn hostingprovider komen ?
Antwoord

Los van het feit dat je vaak op de helpdesk pagina's van je hostingsprovider informatie kan krijgen over de server configuratie zoals het wel of niet kunnen gebruiken van bijvoorbeeld een .htaccess bestand en of Php wel of niet in Safe Mode draait kun je ook zelf nog aanvullende informatie opvragen met de functie phpinfo().

Dit doe je simpelweg door een nieuw PHP bestand te maken in je favoriete code-Editor en daarin de volgende code te plaatsen (dit voorbeeld heeft ook de PHP openings en sluitings tags):

<?php

phpinfo();

?>

Het maakt vervolgens bij het opslaan niet uit welke naam je dit bestand geeft maar het makkelijkste is phpinfo.php. Je kunt het ook even hier kant en klaar downloaden. Kopieer het php bestand vervolgens met een FTP programma naar je webruimte bij je hostingprovider en ga er vervolgens heen in je browser dus :

http://jewebsiteadres/phpinfo.php

Vervolgens krijg je een zeeer uitgebreide pagina te zien die informatie geeft over de PHP versie, over het besturingssysteem (meestal Apache, soms Windows Server), over de PHP configuratie en eventuele extensies en over de PHP variabelen.

Zorg wel dat je dit bestand er later weer afhaalt, zeker als je het zo'n voor de hand liggende naam geeft anders kunnen te nieuwsgierige mensen ook is even bij je komen kijken.

[ Terug naar boven ]
Onderwerp: Hoe zet ik een Unix timestamp om naar een normale Nederlandse datum ?
Antwoord

Als je datum opslaat in je database kun je dit doen in de vorm van de Unix timestamp. Dit is het aantal seconden sinds 1 januari 1970 00:00:00. Je zou zeggen waarom zo moelijk, maar dat is het niet want op deze manier kun je ook rekenen met een datum bijvoorbeeld of iemand een half uur geleden op je website was, of alle berichten in een Forum weergeven sinds iemands laatste bezoek aan je site enz.

Je creeert deze timestamp met strtotime("now") en die kun je vervolgens opslaan in een variabele dus bijvoorbeeld in de variabele $datumbericht of $datumbezoek enz.

$datumbericht = strtotime("now");

Meer over strtotime kun je lezen op: http://nl.php.net/strtotime.

Nadat je deze timestamp opgeslagen hebt in je database kun je hem later weer uitlezen en er OF eerst mee rekenen of gelijk omzetten in een normale teksttuele datumnotatie met de PHP functie date()

Als je de timestamp wilt omzetten naar de Engelse datumnotatie dan is dit zo gebeurt. In onderstaande voorbeelden gebruik ik $str als variabele waarin je de timestamp hebt opgeslagen na het uitlezen.

$str = date("F d, Y", $str);

echo $str;

Met F, d en Y geef je aan op welke manier de datum weergegeven moet worden. Dit heten parameters. Het resultaat is (voorbeeld):

June 07, 2009

Meer over deze extra parameters en de date functie kun je lezen op:
http://nl2.php.net/manual/en/function.date.php

Het omzetten naar de Nederlanse datum met de maanden in het Nederlands is wat moeilijker omdat de Nederlandse maanden niet standaard in een PHP functie zitten. Je moet dus eerst vertellen hoe die maanden geschreven moeten worden. Dit doe je met een array:

$maanden = array (        
"01" => "januari",
"02" => "februari",
"03" => "maart",
"04" => "april",
"05" => "mei",
"06" => "juni",
"07" => "juli",
"08" => "augustus",
"09" => "september",
"10" => "oktober",
"11" => "november",
"12" => "december");

Vervolgens maak je een functie die noem je datumnl en haal je $str daar doorheen:

function datumnl($str) {
global $maanden;
$str0 = date("l",$str);
$str1 = date("j",$str);
$str2 = date("m",$str);
$str3 = date("Y",$str);

// Maanden omzetten naar Nederlanse maanden
$str2 = $maanden[$str2];

// Alles weer aan elkaar plakken in Nederlandse maandnotatie
$str = ''.$str1.' '.$str2.' '.$str3.'';

// Omgezette waarde teruggeven
return $str;
}

Dit geeft als resultaat:

7 juni 2009

Wil je de dag er ook nog bij gebruik dan ook $str0 dus:

$str = ''.$str0.' '.$str1.' '.$str2.' '.$str3.'';

Dit geeft als resultaat:

Zondag 7 juni 2009

Het eindresultaat is dan:

$str = datumnl($str);

echo $str;

En in zijn geheel nog een keer:

$maanden = array (        
"01" => "januari",
"02" => "februari",
"03" => "maart",
"04" => "april",
"05" => "mei",
"06" => "juni",
"07" => "juli",
"08" => "augustus",
"09" => "september",
"10" => "oktober",
"11" => "november",
"12" => "december");

function datumnl($str) {
global $maanden;
$str0 = date("l",$str);
$str1 = date("j",$str);
$str2 = date("m",$str);
$str3 = date("Y",$str);

// Maanden omzetten naar Nederlanse maanden
$str2 = $maanden[$str2];

// Alles weer aan elkaar plakken in Nederlandse maandnotatie
$str = ''.$str1.' '.$str2.' '.$str3.'';

// Omgezette waarde teruggeven
return $str;
}

// Functie aanroepen
$str = datumnl($str);

// Datum weergeven
echo $str;

[ Terug naar boven ]
Onderwerp: Hoe maak je in Windows een .htaccess bestand ?
Antwoord

Een .htaccess bestand is een bestand wat alleen bestaat uit een extensie dus .nogwat en niks daarvoor.

Methode 1.
In Windows kun je zo'n bestand met een truckje maken door kladblok te open en bij "opslaan als" te kiezen voor "Alle bestanden" en dan .htaccess te tikken. Zorg wel dat je bestandsextensies zichtbaar zijn. Deze activeer je door te gaan naar je configuratiescherm > mapopties > tabblad weergave en het vinkje weg te halen bij "extensies voor bekende bestandstypen verbergen".

Methode 2.
Maak eerst een tekstbestand met een willekeurige naam met als extensie .htaccess en upload dit met FTP naar je server. Verander het daarna via naam wijzigen in .htaccess

Hetzelfde geldt voor een .htpasswd bestand. Zorg wel altijd dat Opmaak > Word wrap / Automatische terugloop UIT staat zodat nieuwe regels ook echt op een nieuwe regel komen en niet dat het alleen maar LIJKT of ze op een nieuwe regel komen. Het beste kun je een wat geavanceerde kladblok editor gebruiken zoals bijvoorbeeld PSPad.

Meer informatie over het werken met .htaccess bestanden vindt je bij de Aanbevolen websites > PHP - Werken met .htaccess.

[ Terug naar boven ]
Onderwerp: Hoe beveilig ik een map met mijn ip adres of met een gebruikersnaam en wachtwoord ?

Ik wil een beheermap op mijn website beveiligen. Ik heb begrepen dat dit kan met een .htaccess bestand. Kun je me dat uitleggen ?

Antwoord

Maak een .htaccess bestand aan en plaats daarin de volgende code en vervang de vetgedrukte delen.

AuthName "Verboden Toegang of iets anders hier"
AuthType Basic
<Limit GET POST>
order deny,allow
deny from all
allow from jouwiphier
</Limit>

Je ip adres kom je makkelijk achter via: http://www.mijn-ip.net

En instructies hoe je een .htaccess bestand aan kan maken lees je hierboven bij de vorige vraag.

Plaats dit .htaccess bestand in de map (die eventueel nog submappen heeft) die je wilt beveiligen. Daarboven kan ook maar alleen als dat NIET je publieke www map is anders kan niemand meer op je website komen. Ga vervolgens naar je geheime map via http://jewebsiteadres/geheimemap en als het goed is zie je gewoon de inhoud van die map. Ja, hoe weet je nu of het werkt dan. Wel heel simpel door er tijdelijk een ander ip adres in dit .htacces bestand te zetten (of even 1 nummer te veranderen.). Ga je vervolgens naar je geheime map dan krijg je een melding in de trand van "Access denied Authorization required". Je weet nu dat het werkt. Verander het ip weer terug in je eigen ip.

Vervolgens kun je de boel nog verder beveiligen met een extra gebruikersnaam en wachtwoord. Maak nog een .htaccess bestand aan (gewoon kopie van andere maken) en zet daarin:

AuthUserFile /lokaalpadbovenroot/.htpasswd
AuthGroupFile /dev/null
AuthName "Verboden toegang"
AuthType Basic
<Limit GET POST>
require valid-user
</Limit>

Vervang lokaalpadbovenroot door het relatieve pad = het echt bestandspad op de server van je provider) naar de plaats waar je het .htpasswd (wat je zometeen nog moet maken) plaatst. Probeer dit boven de root ergens te plaatsen. Je root wil zeggen de map waarin je echte websitebestanden zitten en dan dus daarboven. De map kan verschillende namen hebben bv htdocs of www of de naam van je domein. Dat verschilt dus per provider. Kijk of je met je FTP programma daarboven kunt komen dus een stap hoger. Je ziet dan soms daar ook nog andere mappen staan zoals mail of cgi-bin etc. Daar kun je zometeen het bestand .htpasswd plaatsen. Lukt dat niet plaats het dan in de geheime map die je wilt beveiligen. Goed, het relatieve pad. Hoe kom je daarachter. Dat vindt je door via de functie php info naar al je server variablen te kijken. Hoe dat moet kun je hier lezen. Ga vervolgens naar http://jewebsiteadres/phpinfo.php en zoek naar het blok Apache Environment en dan naar SCRIPT_FILENAME waar je de regel vindt die je moet gebruiken. Het is een pad bestaande uit meerdere stukjes met een / ertussen.
Je moet dan de laatste 2 delen weglaten dus phpinfo.php en het gedeelte daarvoor wat de naam is van de wwwmap waar je je html en php bestanden normaal gesproken in plaatst.

Wat overblijft is dan iets in de trand van:

/iets/nogiets/nogiets/ofnogiets/gebruikersnaammeestal/

Kopieer dat pad naar bovenstaande code bij lokaalpadbovenroot. Je .htaccess bestand voor extra map beveiliging met een gebruikersnaam en wachtwoord is nu klaar. Plaats dat bestand met FTP IN je geheime map.

Nu moet je het bijbehorende .htpasswd bestand nog aanmaken. Ga vervolgens naar een site waar je een wachtwoord kunt encryptiseren zoals bv deze (bedenk een gebruikersnaam en wachtwoord) en kopieer de regel die je retour krijgt in het .htpasswd bestand. Kopieer dit bestand vervolgens naar je server via FTP naar de plek boven de root die overeenkomt met het pad wat je hierboven hebt opgegeven. Ga nu naar je beveiligde map en je krijg een login schermpje te zien waar je eerst je gebruikersnaam en wachtwoord op moet geven.

Om ip adres beveiliging en gebruikersnaam beveiliging te combineren in 1 .htacces bestand heb ik nog niet geprobeerd maar moet volgens mij ook kunnen. Wat je ook kan doen is een map bv als je ook een secure adres/map op je site hebt die je vanaf je website kunt benaderen met https ipv http, dan beveilig je de gehele secure map met het ip .htaccess bestand en vervolgens doe je daarin nog je geheime map die je beveiligd met een gebruikersnaam en wachtwoord. Zorg voor de zekerheid ook nog voor een index bestand in die bovenste map die redirect naar je algemene website.

[ Terug naar boven ]