/ HomePage / Computer / Software / Programmierung / Schnipsel
PHP-Schnipsel
1. if then else
if (condition)
{
expression(s)
}
[ elseif (next condition) { ... } ]*
[ else { ... } ]1
- ]* Darf beliebig oft vorkommen
- ]1 Darf genau einmal vorkommen
2. Versionskompatibilität in der Parameterbehandlung
Folgende Zeilen erzeugen auch in älteren PHP-Verionen die $_GET und $_POST-Arrays
if (!
isset($_POST)) $_POST =
$GLOBALS['HTTP_POST_VARS'];
if (!
isset($_GET)) $_GET =
$GLOBALS['HTTP_GET_VARS'];
3. Verteilte Directories
Ein Problem aus dem Leben gegriffen...
Man hat ein Apache(2) unter Windows laufen, zudem ein PHP und möchte ein Directory anzeigen lassen, was mit folgendem PHP Code ganz einfach ist.
<HTML><TITLE>Ich will das Directory sehen!</TITLE><BODY>
<?php
$dir =
"C:";
$dh =
opendir($dir);
while (false !==
($filename =
readdir($dh)))
{
echo "$filename<BR>";
}
?>
</BODY></HTML>
Das funktioniert genau solange gut, wie das $dir auf der lokalen Platte liegt, soll nun ein entferntes Directory angezeigt werden, funktioniert das leider nicht.
Jetzt werden die UNC Pfade benötigt, also ein zusätzlicher Eintrag von open_basedir="//anderer_Rechner;C:" in der php.ini und statt $dir="T:"; dann ein $dir="//anderer_Rechner"; und schon funktioniert das auslesen des Directories.
4. Suchmaschinenfreundliche PHP-Scripte
Möchte man PHP-Scripte schreiben die wie die Seiten des ElsniWiki mit index.php/parm1/parm2 usw. aufgerufen werden kann man die Pfad-Information einfach aus der Variable $PATH_INFO auslesen, dia llerdings erst ab PHP 5 zur verfügung steht. In älteren Versionen kann man sie nachbilden. Ein Beispiel wie die Parameter ausgewertet werden, findet sich in folgendem Script test.php:
<html><body>
<?php
// $PATH_INFO ist erst ab PHP5 vorhanden, die folgende Zeile bildet die Variable in älteren Versionen nach:
$PATH_INFO=
substr($_SERVER['REQUEST_URI'],
strlen($_SERVER['SCRIPT_NAME']),
strlen($_SERVER['REQUEST_URI']));
if(isset($PATH_INFO)) {
$vardata =
explode('/',
$PATH_INFO);
$num_param =
count($vardata);
if($num_param %
2 ==
0) {
$vardata[] =
'';
$num_param++;
}
for($i =
1;
$i <
$num_param;
$i +=
2) {
$
$vardata[$i] =
$vardata[$i+
1];
}
}
echo '<pre>';
print_r ($vardata);
echo '</pre>';
?>
</body></html>
Wenn man nun test.php wie folgt aufruft:
http://www.meinetolledomain.de/test.php/Main/ComputerEmulation
erhält man als Ausgabe:
Array
(
[0] =>
[1] => test.php
[2] => Main
[3] => ComputerEmulation
[4] =>
)
Mehr dazu hier: http://www.zend.com/zend/spotlight/searchengine.php
5. Excel-Dateien mit PHP erzeugen
Um eine Excel-Datei mit formatierungen zu erzeugen kann man HTML verwenden.
<?php
header("Content-Type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=\"export.xls\"");
echo '<table cellpadding="0" cellspacing="0" border="1">';
echo '<tr><th>Spalte1</th><th>Spalte2</th></tr>';
echo '<tr><td>wert1</td><td><b>Fett</b></td></tr>';
echo '</table>';
?>
6. HTTP-Header manipulieren
Wenn man aus div. Gründen mal schnell den HTTP-Header manipulieren muß und grade kein CURL oder PHP-Frameworks wie z.B. Zend oder auch Symphony hat bzw. nutzen darf kann man sich der PEAR-Klasse HTTP_Request bedienen.
Ist sowieso bei so gut wie allen
PHP-Installationen mit dabei:
<?php
require_once 'HTTP/Request.php';
$url =
"http://www.dawillichhin.com/search.xml?searchQuery=".
$looking_for;
$reqObj =
new HTTP_Request
($url);
$reqObj->
setHttpVer("1.0");
$reqObj->
addHeader('User-Agent' ,
'Mozilla/5.0 (Macintosh; U; Intel Mac OS X; de; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.');
$reqObj->
addHeader("Accept-language" ,
"de-de");
$reqObj->
addHeader("Accept-Charset" ,
"utf-8");
$reqObj->
addHeader("Content Encoding" ,
"ISO-8859-1");
// für lokale M$-OS, sonst gem. encoding="
$reqObj->
addHeader("Referer" ,
"http://dawillichhin.com/");
// Server soll denken wir wären einem Link gefolgt
$reqObj->
sendRequest();
$page_content =
$reqObj->
getResponseBody();
echo $page_content;
?>
Wozu eigentlich der Aufwand?
Ganz einfach: einige Server schicken statt XML ein Mischmasch aus HTML anhand der HTTP-USER-AGENT-Kennung. Um das zu umgehen kann man sich kurzfristig
als einen bestimmten Browser ausgeben um reines XML zu erhalten welches dann ganz bequem mit SimpleXML zerlegt werden kann.
7. Grafik, Bilder ausschneiden
siehe auch