Schönen guten Tag,
ich bin gerade bei der Übung Terminkalender.
Um genau zu sein, arbeite ich an der Funktion, um die Tabelle zu erstellen. Ich bin dementsprechend noch mitten drin und nicht alle Code-Teile ergeben schon einen wirklichen Sinn. Also nicht wundern.
Ok, kommen wir zum Problem. Aus irgendeinem Grund braucht PHP extrem lange um das Programm auszuführen, sodass das Programm letztendlich einfach abgebrochen wird.
Fehlermeldungen:
Fatal error: Maximum execution time of 30 seconds exceeded in C:\xampp\htdocs\php\Projekte\Terminkalender\terminkalender.php on line 71
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 65011720 bytes) in C:\xampp\htdocs\php\Projekte\Terminkalender\terminkalender.php on line 72
In der PHP.ini habe ich deswegen schon die Einstellungen memory_limit und max_execution_time hochgestellt, aber bisher hat das nichts gebracht und ich möchte natürlich auch nicht alles total hochstellen, damit dann mein Programm nach 10 Minuten endlich durchgelaufen ist.
Ich bräuchte also jemanden, der mir sagen kann, warum PHP so lange für das Programm braucht und wie ich das reduzieren kann.
Hier ist der Code:
<?php
// Array mit allen Terminen
$termin[] = array('Datum' => 20121208,
'Ort' => "Wangen",
'Band' => "cOoL RoCk oPaS");
$termin[] = array('Datum' => 20120311,
'Ort' => "Stuttgart",
'Band' => "Die Hosenbodenband");
$termin[] = array('Datum' => 20120628,
'Ort' => "Tübingen",
'Band' => "flying socks");
$termin[] = array('Datum' => 20120628,
'Ort' => "Stuttgart",
'Band' => "flying socks");
// Vorbereitung für Sortierung, Aufsplittung des Arrays $termin in drei Arrays $band, $ort, $datum
foreach ($termin as $key => $event) {
$band[$key] = strtolower($event['Band']);
$ort[$key] = strtolower($event['Ort']);
$datum[$key] = $event['Datum'];
}
$sortierung = $_GET['sortierung'];
// Überprüfung der ausgewählten Sortierung,
switch($sortierung) {
case 'datum':
array_multisort($datum, SORT_ASC, $termin);
break;
case 'ort':
array_multisort($ort, SORT_ASC, $termin);
break;
case 'band':
array_multisort($band, SORT_ASC, $termin);
break;
default:
ksort($termin);
}
foreach ($datum as $key => $datum) {
$jahr[$key] = substr($datum, 0, 4 );
$monat[$key] = substr($datum, 4, 2 );
$tag[$key] = substr($datum, -2 );
}
$key = 0;
while( $key < count($tag) ) {
$daten[$key] = $tag[$key] . '.' . $monat[$key] . '.' . $jahr[$key];
$key++;
}
function createTable($dataArr, $rows, $table_headers, $table_cells) {
// Keys des $dataArr rausfinden
foreach ($dataArr as $key => $value) {
global $dataArr_keys;
$dataArr_keys = array_keys($dataArr[$key]);
}
$table = '<table>';
// Erstellung tr
for($i = 1; $i <= $rows; $i++) {
$table .= '<tr>';
// Soll es th geben?
if($table_headers > 0) {
// Erstellung th
$key = 0;
for ($i=1; $i <= $table_headers; $i++) {
$table .= '<th>';
$table .= $GLOBALS['dataArr_keys'][$key];
$table .= '</th>';
$key++;
}
} else {
// Erstellung td
$key = 0;
for ($i=1; $i <= $table_cells; $i++) {
$table .= '<td>';
$table .= $dataArr[$key][ $GLOBALS['dataArr_keys'][$key] ];
$table .= '</td>';
$key++;
}
}
$table .= '</tr>';
}
$table .= '</table>';
return $table;
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Terminkalender</title>
</head>
<body>
<!-- Sortierungsauswahl -->
<p>sortieren nach ...
<a href="terminkalender.php?sortierung=datum">Datum</a>
<a href="terminkalender.php?sortierung=band">Band</a>
<a href="terminkalender.php?sortierung=ort">Ort</a>
</p>
<?php
echo createTable($termin, 5, 3, 3);
?>
</body>
</html>
Alles anzeigen
Schon mal vielen Dank für eure Hilfe.
Gruß
JR Cologne