homepage-forum.de - Hilfe für Webmaster!
 
 

Endlich im Netz! Meine Homepage, mein Fotoalbum, ...

meine-erste-homepage.com Heutige Beiträge Wer ist online? Kontakt Impressum & Forenregeln
Zurück   homepage-forum.de - Hilfe für Webmaster! > 1 - Homepage-Forum > 1.4 - Scriptarchiv

Antwort
 
Themen-Optionen Ansicht
Alt 23.07.2010, 15:49   #1
mi-schi
Kaiser
 
Benutzerbild von mi-schi
 
Registriert seit: 02.03.2007
Beiträge: 2.163
mi-schi befindet sich auf einem aufstrebenden Ast
Standard PHP Script dauert zu lange: Timeout -> Lösung

Hallo,

ich veröffentliche hier mal ein Script, welches den PHP Time Out umgeht.

Folgendes Problem:
Überall werden die Datenmengen größer, auch im Netz. Datenbanken sind beim Export mehr als 100 MB groß, Datensätze liefern 2000 oder mehr Ergebnisse. Man kommt schnell an die Grenzen der Server und der Grundeinstellungen von PHP.

Lösungen:
1. Klar könnte man einfach versuchen den PHP Timeout, der über die php.ini Datei geregelt ist mit "default_socket_timeout" erhöhen.
Nur, meistens hat man nicht die Rechte dazu und der neue Wert ist auch nicht zukunftssicher. Vielleicht sind in absehbarer Zeit statt 2000 Datensätzen schon das 10-fache zu verarbeiten.

2. Ich habe hingegen ein PHP-Script programmiert, welches einen vorher angegebenen Wert nimmt, und versucht diese Anzahl in der Zeit bis zum Time Out auszuführen und zu verarbeiten. Wenn diese Anzahl geschafft ist, ruft sich das Script selbst wieder auf und verarbeitet den nächsten Block an Daten. Und jetzt der Clou, wenn PHP oder der Server diesen Block an Daten nicht schafft, ist es auch nicht schlimm, da 5 Sekunden vor dem Time Out sich das Script selber aufruft.

In meinem Fall müssen sehr viele E-Mails (Newsletter, KEIN SPAM) verschickt werden. Die E-Mails werden aus der Datenbank ausgelesen, über POST wird der Betreff und die Nachricht, sowie der Versender übermittelt und dann geht das Script Blockweise alle E-Mails (fast 3000) mit dem Wert 200 pro Block durch, und versendet diese. Das dauert dann ca. 15 Minuten. Eine unvorstellbare Ausführungszeit für ein "normales" PHP Script.

Hier das Script:
PHP-Code:
<?php
session_start
();
// Übermittlung der Daten per POST
if (isset($_POST['inhalt']) /* Hier ggf. erweitern mit Werten */) {
    
$inhalt $_POST['inhalt'];
    
// Hier ggf. erweitern mit Werten
} elseif (isset($_SESSION['inhalt']) /* Hier ggf. erweitern mit Werten */) {
    
$inhalt $_SESSION['inhalt'];
    
// Hier ggf. erweitern mit Werten
} else {
    echo 
"Es wurden keine Daten übermittelt!";
    exit;
}
$zeit microtime(true);
include_once(
"function.inc.php");
if (isset(
$_SESSION['zahlvar'])) {
    
$start $_SESSION['zahlvar'];
    
$azeit $_SESSION['zeit'];
} else {
    
$start 0;
    
$azeit 0;
}
session_unset();
// Hier z.B. der Mysql-Befehl, um die Datensätze aus der Datenbank auszulesen: "Select .... LIMIT " . $start . ", " . AEPE"
$i 0;
while(
/* Hier die Schleife für die folgende Funktion */) {
    
// Hier die Funktion, die länger braucht als der PHP Timeout mit den Daten aus der DB und den POST Daten, hier nur $inhalt
    
$i++;
    
$zeit2 microtime(true)-$zeit;
    if (
$zeit2 > (ini_get("default_socket_timeout")-5)) {
        
$_SESSION['zahlvar'] = $start $i;
        
$_SESSION['inhalt'] = $inhalt;
        
// Hier ggf. erweitern mit Werten
        
header("Location: " str_replace("&""&amp;"$_SERVER['REQUEST_URI']));
        exit;
    }
}
// Hier z.B. der Mysql-Befehl, der alle Datensätze ausließt
$zeit2 microtime(true)-$zeit;
$end $start $i;
$_SESSION['zeit'] = $zeit2 $azeit;
if (
mysql_num_rows($result) > $start $i) {
    
$_SESSION['zahlvar'] = $start $i;
    
$_SESSION['inhalt'] = $inhalt;
    
// Hier ggf. erweitern mit Werten
    
header("Location: " str_replace("&""&amp;"$_SERVER['REQUEST_URI']));
    exit;
} else {
    echo 
"alles ok";
}
?>
function.inc.php
PHP-Code:
<?php

// Hier die Anzahl der angestrebten Durchläufe pro Stück
define("AEPE""200");


// ############## ab hier nix mehr verändern! #########################

function get_login($benutzer$passwort) {
    if (
$benutzer == "admin" && $passwort == md5("test")) {
        return 
true;
    } else {
        return 
false;
    }
}

function 
esqu($handle) {
    if(
get_magic_quotes_gpc()) {
        return 
mysql_real_escape_string(stripslashes($handle));
    } else {
        return 
mysql_real_escape_string($handle);
    } 
}

function 
quotes($handle) {
    if(
get_magic_quotes_gpc()) {
        return 
stripslashes($handle);
    } else {
        return 
$handle;
    } 
}
?>
__________________

mi-schi ist offline   Mit Zitat antworten
Werbung

Endlich im Netz! Meine Homepage, mein Fotoalbum, ...
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
php script für videoupload nach youtube (youtube als Video Server) by_homer 1.3.1 - PHP / MySQL 13 25.09.2009 20:53
CMS oder System script für PHP MasterGee 1.3.3 - Vorgefertige Scripts 5 12.08.2009 05:26
PHP Script Bilder Upload umschreiben?! LizzardX 1.3.1 - PHP / MySQL 4 05.12.2008 06:37
php oder java seal 1.3.1 - PHP / MySQL 4 08.08.2002 23:24


Alle Zeitangaben in WEZ +2. Es ist jetzt 05:19 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Advertisement System v2.6 by Branden
Copyright © meine-erste-homepage.com