Posts mit dem Label Webprojekte werden angezeigt. Alle Posts anzeigen
Posts mit dem Label Webprojekte werden angezeigt. Alle Posts anzeigen

02.11.2011

PHP: Erster Montag im Monat

Der Frager hat ein "kleines" Problem mit der PHP-Funktion "strtotime". Nach einem Umzug zu einem anderen Hoster funktionierte diese trotz gleicher PHP-Version nicht mehr wie gewohnt. strtotime ist eine Funktion welche versucht(!) aus einem String einen Zeitpunkt zu ermitteln und ist wohl von vielem, u.a. von Lokaliserungseinstellungen abhängig. Im konkreten Fall führt der Luxus aber auch zu Unwägbarkeiten ...und die sollte man umgehen.
<?php
#Test:
print ErsterWochentagImMonat( 11, 2011, 1 )."\n";

function ErsterWochentagImMonat(
$intMonat, $intJahr, $intWochentag
) {

### Erwartete Daten:
#$intMonat = '1...12 (Januar...Dezember)

#$intWochentag = 0 für Sonntag;
#$intWochentag = 1 für Montag
# ...
#$intWochentag = 6 für Sonnabend;

# Plausibilitätsprüfungen:
if ( 1 > $intMonat || 12 < $intMonat ) {
return false;
}
if ( 0 > $intWochentag || 6 < $intWochentag ) {
return false;
}

# Berechnung:
$intTag=date( 'w', mktime ( 0, 0, 0, $intMonat, 1, $intJahr ) );
# Ergebnis: 0 ... 6
if ( $intTag == $intWochentag ) {
return '01.' . ZweiStellig($intMonat) . '.' . $intJahr;
} else {
if ( $intTag < $intWochentag ) {
return ZweiStellig( $intWochentag - $intTag + 1 )
. '.' . ZweiStellig($intMonat)
. '.' . $intJahr;
} else {
return ZweiStellig( $intWochentag - $intTag + 8 )
. '.' . ZweiStellig($intMonat)
. '.' . $intJahr;
}
}
return false;
}

function ZweiStellig( $int ) {
$int = intval( $int );
if ( $int < 10 ) {
return '0' . $int;
}
return $int;
}
?>

11.09.2011

Honeypot blockt Angreifer

Vor einigen Tagen habe ich einen Honeypot fertiggstellt, der Angreifer schon bei der Vorbereitung eines Angriffs auf meine Webserver feststellt und blockiert.

Hier das Ergebnis der letzten Nacht:

(Uhrzeit, Angriffsersuch, IP-Adresse)

04:42 /admin/banner_manager.php/login.php - 174.128.240.2
04:50 /admin/categories.php/login.php?cPath=&action=new_product_preview - 174.142.75.174
04:50 /admin/categories.php/login.php?cPath=&action=new_product_preview - 75.126.154.162
04:53 /admin/categories.php/login.php?cPath=&action=new_product_preview - 85.158.181.47
04:53 /admin/categories.php/login.php?cPath=&action=new_product_preview - 189.113.5.131
04:54 /admin/categories.php/login.php?cPath=&action=new_product_preview - 74.222.6.111
04:59 /admin/categories.php/login.php?cPath=&action=new_product_preview - 85.36.63.35
05:26 /admin/categories.php/login.php?cPath=&action=new_product_preview - 88.12.17.111
06:45 /admin/banner_manager.php/login.php - 89.249.68.71
07:34 /admin/file_manager.php/login.php - 62.173.138.142

Nette Versuche! Beim nächsten Test auf eine Angriffsmöglichkeit gab es für diese Besucher eine Umleitung zu einer Webseite des BKA über die Bekämpfung von Internetkriminalität. (Etwas) Humor habe ich nämlich auch noch.

18.01.2011

Joomla 1.6 und der Meta-Tag "generator"

Wem es aus gutem Grund nicht gefällt, dass Joomla 1.6 in jedes HTML-Dokument den Meta-Tag "generator" mit dem Wert "Joomla! 1.6 - Open Source Content Management" einbaut, dem kann geholfen werden:

In der Datei /libraries/joomla/document/document.php befindet sich in Zeile 79 der Eintrag:

var $_generator = 'Joomla! 1.6 - Open Source Content Management';

Den kann man natürlich ändern.

22.12.2009

PHP, Einlesen einer Excel-Datei

Hallo Community,
bitte dringend um Hilfe beim einlesen einer Excel Datei...

Also ich lade eine Excel Datei hoch, und möchte sie Zeile für Zeile und Spalte für Spalte aus lesen.

So sieht mein Script etwa aus:
----------------

$dom = DOMDocument::load( $_FILES['file']['tmp_name'] );
$rows = $dom->getElementsByTagName( 'Row' );

foreach ($rows as $row)
{
$cells = $row->getElementsByTagName( 'Cell' );
foreach( $cells as $cell )
{
$cellwas=$cell->nodeValue;
...
---------------


Leider kann ich so nur alle Zellen mit Inhalt auslesen. Also leere Zellen werden einfach übergangen, wodurch das ganze unbrauchbar wird.

Kann mir irgendjemand sagen wie ich zum Beispiel in einer Zeile jede Zelle einzeln abfragen kann, auch wenn diese Leer ist?


Eine schnelle Lösung:

Beim Blick in den Quelltext einer solchen Datei sehe ich: Leere Zellen lassen sich gar nicht abfragen. Die Zelle existiert in den Daten schlicht nicht. Die Zellen nach leeren Zellen haben aber ein Attribut 'ss:Index'. Also: Nach der Existenz des Attributes fragen, wenn es existiert den Spaltenzähler auf den Wert setzen.

Bei mir funktionierte mit test.xml als (aus OpenOffice exportierte) Excel-2003-xml-Datei:
<?php
$dom = DOMDocument::load( "test.xml" );
$rows = $dom->getElementsByTagName( 'Row' );
$zeile=0;
$arValues=array();
foreach ($rows as $row) {
$cells = $row->getElementsByTagName( 'Cell' );
$spalte=0;
foreach( $cells as $cell ) {
if ($cell->hasAttribute('ss:Index')) {
$spalte=$cell->getAttribute('ss:Index')-1;
}
$arValues[$zeile][$spalte]=$cell->nodeValue;
$spalte++;
}
$zeile++;
}

$zeile=0;
$maxSpalten=0;

# spalten zählen
foreach ($arValues as $arZeile) {
if ($maxSpalten < count($arZeile)) {
$maxSpalten = count($arZeile);
}
}

# Array mit false aufüllen und für foreach schön machen:
$arTemp=$arValues;
$arValues=array();
for ($zeile=0; $zeile < count($arTemp); $zeile++) {
for ($spalte=0; $spalte < $maxSpalten; $spalte++) {
if (isset($arTemp[$zeile][$spalte])) {
$arValues[$zeile][$spalte]=$arTemp[$zeile][$spalte];
} else {
$arValues[$zeile][$spalte]=false;
}
}
}
unset($arTemp);
print "Werte:<pre>";print_r($arValues);print "</pre>";
?>


Hinweis:

Diese schnelle Lösung berücksichtigt übrigens noch nicht, dass ein solches Dokument auch Tabellenblätter hat.

13.10.2009

Best of PHP-Programming

// The output is the form.
$output = $form;
// So output it.
return $output;
Scheinbar müssen heiß gestrickte Daten erst abkühlen und werden deshalb vor dem Auskippen von einem Topf in den anderen geschüttet.

Leider steigt dadurch der Speicherplatzverbrauch...

Fundstelle? Ein Wordpress-Plug-In.