PHP Funktion nacheinander wiederholt ausführen
72quadrat
- php
Hallo, ich bin nicht der große PHP-Spezi und aktuell leider ein nicht unerhebliches Problem.
Ich habe eine PHP Funktion geschrieben die von ner Bildergalerie über eine eigene PHP-API die bereits generierten Bilder fischt und in meine Seite schiebt. Es handelt sich um eine Portfolioseite mit wirklich einer ganzen Menge an Daten die ich mithilfe von Ajax in unterschiedliche Happen Teile und über Buttons einblenden lasse. Konkret: http://72quadrat.de/kategorie/portfolio
Das funktioniert auf meinem Live-Server auch noch ganz gut und ist dank Cache auch einigermaßen praktikabel.
NUN ZUM PROBLEM
Ich bin verdammt nah am Speicherlimit von PHP angelangt und auf meinem lokalen Testserver ist aktuell auch schon Schluß.
Wie gesagt es wird untereinander für die verschiedenen Portfoliokategorien immer wieder eine PHP-Funktion aufgerufen.
1. Aufruf 17931076 Bytes
2. Aufruf 18162824 Bytes
3. ....
X. Aufruf 31682412 Bytes
Gibt es irgendwie die Möglichkeit, die Ausführung der Funktion nacheinander abzuarbeiten um Speicherplatz zu sparen?
Ich hatte schon versucht per AJAX HTTP Request einzelne PHP-Dateien erst bei Klick aufzurufen, doch das hat sich mit dem Layout der Seite überhaupt nicht vertragen...
Hello,
um welche Funktion geht es? Du hast sicherlich nur vergessen, die noch hinterherzuposten?
Wie stellst Du denn das Speicherlimit fest und wodurch wurde es festgelegt?
Auf welchem System läuft die Applikation? Linux, BSD-Unix, Windows, ...?
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hi!
Hallo, ich bin nicht der große PHP-Spezi und aktuell leider ein nicht unerhebliches Problem.
Du übertreibst da schamlos - wir haben aktuell weit größere Probleme, als Dich;)
Da Du das Thema Problem zunächst thematisiert hast, laß uns zum Kern kommen - ich bin ein Gegner dieser hier omnipräsenten Glaskugel-Metapher: wir können nicht riechen, was Du getan (an Code geschrieben) hast.
Zeig uns doch den Code, dann können wir etwas dazu sagen. Ich verstehe zum Teil die Hemmungen, selbst geschriebenen Code her zu zeigen, wenn man anfängt sich mit einer Programmier- (Script-) Sprache zu beschäftigen.
Ich verspreche Dir aber eines (frei nach Larry Wall): wir werden nicht lachen, zumindest nicht so, daß es Dich peinlich berührt;)
Im Ernst: ohne etwas von Deinem Code zu sehen kann Dir hier niemand helfen - das ist einfach so. Wir reden hier nicht über theoretische Probleme, sondern praktische. In der Praxis muß man Dinge anfassen (Code lesen).
$nextTry = new $seventyTwoSquare();
$nextTry->postCode();
off:PP
Hi Peter!
Ich verspreche Dir aber eines (frei nach Larry Wall): wir werden nicht lachen, zumindest nicht so, daß es Dich peinlich berührt;)
[...]
$nextTry = new $seventyTwoSquare();
$nextTry->postCode();
Fatal error: PHP is currently laughing its ass off because of the funny code in Thread 188661 on line 2
MfG H☼p~hihi~sel
O.K.
Hier die beiden Funktionen wobei in der gallery Funktion die album Funktion aufgerufen wird...
Das ganze arbeitet mit der Slideshowpro Director PHP-API zusammen so daß hier einiges natürlich sehr Slideshowpro Director spezifisch ist.
<?php
/***
* Html für eine ganze Galerie erstellen
* dabei auf die Funktion 'album' zurückgreifen
*
* <?php gllery([gallery_id
) ?>
***/
function gallery( $gallery_id ) {
$director = new sspdc;
$gallery = $director->gallery->get( $gallery_id );
//echo '<h2 class="ssp-gallery-title">' . $gallery->name . '</h2>';
//echo '<p class="ssp-gallery-description>"' . $gallery->description . '</p>';
if( current_user_can('level_10')) {
echo ' x x x ';
}
// Das Array mit meinen Alben definiere
$meinealben = array();
foreach($gallery->albums->album as $album) {
// Die ID eines Albums als String und nicht als XML-Object auslesen
// damit wir mit dem String weitermachen können
$id = (string) $album->id ;
// String in mein neues Array packen
array_push($meinealben, $id);
}
// Doppelte Eintraege entfernen
$meinealben = array_unique($meinealben);
// Die einzelnen IDs der Alben in einer Foreach Schleife bearbeiten
foreach($meinealben as $album_id) {
album( $album_id, 100 );
}
}
?>
<?php
/***
* Html für ein angegebenes Album erstellen
*
*
* <?php album([alumb_id],[bildanzahl]) ?>
***/
function album( $album_id, $image_count ) {
$director = new sspdc;
$album = $director->album->get( $album_id );
$images = $album->contents[0];
$description = $album->description;
// Die Zeilenumbrueche in der Beschreibung der Director API Funktion
// in einzelne zeilen splitten
$intro = $director->utils->convert_line_breaks($album->description);
// Die Beschreibung mit dem eingefügten "[mehr]" in zwei Teile teilen
// und ein Array darauf formen $description[0] ist der 1. Teile
// $description[1] der zweite Teil
$description = split ("\[mehr\]", $description);
// Die Zeilenumbrueche in der Beschreibung der Director API Funktion
// in einzelne zeilen splitten
$intro = $director->utils->convert_line_breaks($description[0]);
$intro = str_replace( "<br>", "<br/>", $intro);
$beschreibung = $director->utils->convert_line_breaks($description[1]);
$beschreibung = str_replace( "<br>", "<br/>", $beschreibung);
$i = 0;
$html = '<div class="ssp-post">';
$html .= '<h3>'. $album->name . '</h3>';
$html .= '<div class="ssp-intro">'. $intro . '</div>';
if( current_user_can('level_10')) {
$html.= ' x x x '. memory_get_usage() .' Bytes</span></div>';
}
$html .= '<div class="ssp-thumbs-container">';
$html .= '<div class="ssp-thumbs">';
foreach( $images as $image ) {
if ($i < $image_count ) {
if ($director->utils->is_video($image->src)) {
// Mediabox Ansicht verwenden
$html .= '<a href="'. $image->original->url . '" rel="lightbox[ flash 550 410]" title="FLV player::Beispiel" class="ssp-video"><img src="/wp-content/themes/72quadrat_v4/img/ssp-platzhalter.gif" alt="link"/></a>';
} else {
// Standard Lightbox Ansicht verwenden
$html .= '<a href="'. $image->fullsize->url . '" rel="lightbox[galerie' . $album->name . $album_id . ']" title="'. $album->name . '::' . $image->title . '"><img src="' . $image->thumb->url . '" alt="' . $image->title . ", " . $image->caption . '" /></a>';
}
}
$i++;
}
$html .= '</div>';
$html .= '</div>';
$html .= '<div class="ssp-beschreibung">'. $beschreibung . '</div>';
$html .= '</div>';
// Leider gibt es bei den Alben offenbar teils UTF-8 encodete Inhalte
// und teilweise irgendwie anders ISO encodete Sachen.
// Durch die '0' oder '1' am Ende wird das unterschiedlich ausgegeben.
if (preg_match("/ä|ö|ü|Ä|Ö|Ü|ß/", $html)) {
//alles gut
echo $html;
} else {
//fchlcr
// Eine in ISO encodete Variante erstellen fuer Alben die falsch encoded sind
$utf8html = utf8_decode($html);
echo $utf8html;
}
}
?>