oefening 3
Het script maakt op alle dagen behalve zondag een backup van de folder /var/log/ in de vorm van een tar.gz-bestand met als naam backup_dagmaandjaar.tar.gz
#!/usr/bin/php5
<?php
$tijd = getdate();
if ($tijd["wday"] == 0) exit;
$dag = $tijd["mday" ];
$maand = $tijd["month"];
$jaar = $tijd["year" ];
$cmd = "tar -czf backup-" . $jaar
. "_" . $maand . "_" . $dag
. ".tar /var/log";
system($cmd);
?>
Oefening 4
Om de minuut test het script of het bestand met de opgegeven naam bestaat. Van zodra het bestand bestaat wordt de melding "naam_bestand now exists" getoond en wordt het script gestopt.
#!/usr/bin/php5
<?php
if ($argc < 2) exit;
for (;;) {
if(file_exists($argv[1])) {
echo "Hoera\n";
exit;
}
sleep(60);
}
?>
Oefening 5
Maak een menu met volgende keuzemogelijkheden:
1) Kalender
2) Backup
3) Manpage
4) Einde
De menu-opdrachten voeren het volgende uit:
Kalender
De kalender van het huidige jaar wordt pagina per pagina getoond (verder gaan met enter).
#!/usr/bin/php5
<?php
for (;;) {
system("clear");
echo "1. kalender\n";
echo "2. backup\n";
echo "3. manpage\n";
echo "4. exit\n";
$input = readline("maak een keuze: ");
if ($input == "1") kalender();
if ($input == "2") backup();
if ($input == "3") manpage();
if ($input == "4") exit;
}
function kalender() {
for ($maand = 1; $maand < 13; $maand++) {
system("clear");
system("cal -m $maand");
readline("druk enter om verder te gaan");
}
}
function backup() {
for (;;) {
$filename = readline("De naam van je backup: ");
$dir = readline("Directory voor backup: ");
if ((!empty($filename)) && (!empty($dir))) break;
}
if (file_exists($dir)) {
$command = "tar -czf backup-" . $filename
. ".tgz " . $dir . " > /dev/null";
system($command);
} else {
echo("De map bestaat niet. \n");
}
}
function manpage() {
$command = readline("Kies een commando: ");
system("man " . $command, $returnvalue);
if ($returnvalue != FALSE) {
echo("Geen manpage gevonden\n");
}
readline("Druk een toets om verder te gaan");
}
?>
Oefening 6
Het bestand namen.txt bevat een aantal namen. Maak een scriptje dat als argument op de commandolijn een naam heeft.
Indien de naam gevonden wordt in het bestand namen.txt:
Er wordt op het scherm een alfabetische lijst met deze namen afgedrukt.
Na deze lijst wordt er getoond hoeveel namen dit zijn. Geef deze melding de volgende vorm: "Gevonden: 3" -> indien er drie namen gevonden werden.
Indien de naam niet gevonden werd, geef je de melding "Niets gevonden".
#!/usr/bin/php5
<?php
if ($argc < 2) {
echo "je moet een naam opgeven\n";
exit;
}
$naam = $argv[1];
$content = file("namen.txt", FILE_IGNORE_NEW_LINES);
sort($content);
if (in_array($naam, $content)) {
foreach($content as $line) {
echo $line . "\n";
}
echo "Het bestand bevat " . count($content) . " namen.\n";
}
?>
Funções definidas pelo usuário
Uma função pode ser definida usando a seguinte sintaxe:
Exemplo #1 Pseudo-código de demonstração de uma função
<?php
function foo ($arg_1, $arg_2, /* ..., */ $arg_n)
{
echo "Exemplo de função.\n";
return $valor_retornado;
}
?>
Qualquer código PHP válido pode aparecer dentro de uma função, mesmo outras funções e definições de classes.
Nomes de funções seguem as mesmas regras que outros rótulo no PHP. Um nome de função válido começa com uma letra ou um sublinhado, seguido, seguido por qualquer número de letras, números ou sublinhado. Com uma expressão regular, seria expressado com: [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*.
Veja também o Guia de nomenclatura em espaço de usuário.
As funções não precisam ser criadas antes de serem referenciadas, exceto quando uma função é condicionalmente definida como mostrado nos dois exemplos abaixo.
Quando uma função é definida condicionalmente como nos dois exemplos abaixo, sua definição precisa ser processada antes de ser chamada.
Exemplo #2 Funções definidas condicionalmente
<?php
$makefoo = true;
/* Nos nao podemos chamar foo() daqui
porque ela ainda não existe,
mas nos podemos chamar bar() */
bar();
if ($makefoo) {
function foo ()
{
echo "Eu não existo até que o programa passe por aqui.\n";
}
}
/* Agora nos podemos chamar foo()
porque $makefoo foi avaliado como true */
if ($makefoo) foo();
function bar()
{
echo "Eu existo imediatamente desde o programa começar.\n";
}
?>
Exemplo #3 Funções dentro de funções
<?php
function foo()
{
function bar()
{
echo "Eu não existo até foo() ser chamada.\n";
}
}
/* Nós não podemos chamar bar() ainda
porque ela ainda não foi definida. */
foo();
/* Agora nós podemos chamar bar(),
porque o processamento de foo()
tornou a primeira acessivel */
bar();
?>
Todas as funções e classes no PHP tem escopo global - elas podem ser chamadas fora de uma função mesmo que tenham sido definidas dentro e vice-versa.
O PHP não suporta sobrecarga de funções, e também não é possível cancelar ou alterar a definição de funções previamente declaradas.
Nota: Nomes de funções são insensíveis ao caso, mas é melhor chamar as funções da mesma forma que ela aparecem nas declarações.
Ambos número variável de argumentos e argumentos padrões são suportados em funções. veja também as referencias das funções func_num_args(), func_get_arg() e func_get_args() para mais informações.
É possível chamar funções recursivas no PHP. Entretanto evite o uso de funções/métodos recursivos com mais de 100-200 níveis de recursão já que isso pode estourar a pilha e causar o encerramento do script atual.
Exemplo #4 Funções Recursivas
<?php
function recursion($a)
{
if ($a < 20) {
echo "$a\n";
recursion($a + 1);
}
}
?>
