Hallo Sandra.
Hallo,
ich habe folgenden Code gefunden, als ich auf der Suche nach einer Möglichkeit war, pdf-files zu generieren. Dieser Code sucht in einem pdf-file nach Platzhaltern in der Form "[[$foo1]]" und ersetzt diesen durch "$foo1", was sich in dem Array "$pdf_vars" befindet.
Das funktioniert auch wunderbar, nur wüsste ich auch gerne, wie genau das funktioniert (Suchmuster und eigentliches Ersetzen).Könnte mir das vielleicht jemand erklären? Unter php.net bin ich bei diesem Beispiel nicht schlau geworden.
Vielen Dank!
Gruß Sandra
function replace_pdf_var($match){
if (isset($GLOBALS['pdf_vars'][$match[1]])) {
return $GLOBALS['pdf_vars'][$match[1]];
} else {
return $match[1];
}
}if(file_exists($pdffile)){
if ($fp = fopen($pdffile, 'rb')) {
$template = fread ($fp, filesize ($pdffile));
fclose ($fp);$pdf = preg_replace_callback('#[[$([^]]+)]]#',
'replace_pdf_var', $template);$fp = fopen ("brief.pdf","w");
fwrite($fp,$pdf);
fclose($fp);
}
}
Schrittweise:
1) Das Muster wird angewandt und gibt aus „[[$foo]]“ die Zeichenkette „foo“ zurück.
2) Diese Treffer wird per Callback an die Funktion replace\_pdf\_var() übergeben, welche diesen als Array $match entgegen nimmt. $match[0] entspricht hierbei dem gesamten Treffer („[[$foo]]“) und $match[1] dem geklammerten („foo“).
3) Nun überprüft die Funktion, ob es im Array $GLOBALS['pdf\_vars'] einen Schlüssel namens „foo“ gibt; ist dem so, wird sein Wert zurück gegeben. Ist dem nicht so, wird wiederum „foo“ zurückgegeben.
4) Wieder zurück in preg\_replace\_callback() wird nun die Zeichenkette „[[$foo]]“ durch den soeben zurück gegebenen Wert ersetzt.
Einen schönen Sonntag noch.
Gruß, Mathias
--
sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
debian/rules