php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 17-09-2012, 17:12
nullacht
 Registrierter Benutzer
Links : Onlinestatus : nullacht ist offline
Registriert seit: Sep 2012
Beiträge: 8
nullacht befindet sich auf einem aufstrebenden Ast
Question Caching - Problem mit file-Funktion

Hallo,

ich habe mit dem Cachen einiger (dynamischer) Seiten Probleme.
Um das Prinzip zu verstehen, werde ich es kurz erläutern:

Meine Seiten brauchen ewig lange, bis sie sich aufbauen, da ich verschiedene Abfragen dynamisch erledige. Die Abfragen lassen sich mMn nicht weiter optimieren, da sie für die Distanzberechnung zweier Postleitzahlen benötigt werden.

Als Lösung dachte ich mir: "Okay, dann werden diese Seiten halt gecached" - gesagt, getan:
Ich habe vor und nach dem dynamischen Inhalt einer jeden Seite so etwas stehen: (Start, Ende)

PHP-Code:
HeaderSidebar usw...
{
_START_}
dynInhalt
{_ENDE_}
Footer usw
Um nun den dynamischen Inhalt auszulesen und als String zu bekommen, habe ich folgende Zeilen geschrieben:

PHP-Code:
if(file_exists("/var/www/web2/html/site_cache/".$kategorie_url.$rubrik_url.$subrubrik_url.$datum."_in_".$city['url'].$page.".html")) {
unlink("/var/www/web3/html/site_cache/".$kategorie_url.$rubrik_url.$subrubrik_url.$datum."_in_".$city['url'].$page.".html");
}
$content implode(""file($domain."de/cc/".$kategorie_url."_in_".$city['url']."/".$rubrik_url."/".$subrubrik_url.$add.$page.".html"));
$a explode("<!--{_START_}-->\n"$content);
$content $a[1];
$b explode("<!--{_ENDE_}-->\n"$content);
$content $b[0];
$fh fopen("/var/www/web3/html/site_cache/".$kategorie_url.$rubrik_url.$subrubrik_url.$datum."_in_".$city['url'].$page.".html""w");
fputs($fh$content);
fclose($fh);

if(
file_exists("/var/www/web3/html/site_cache/".$kategorie_url.$rubrik_url.$subrubrik_url.$gestern."_in_".$city['url'].$page.".html"))

unlink("/var/www/web3/html/site_cache/".$kategorie_url.$rubrik_url.$subrubrik_url.$gestern."_in_".$city['url'].$page.".html"); 
Das Ganze befindet sich in mehreren Schleifen, um für jede Kategorie, Rubrik, Subrubrik die passenden Seiten zu erzeugen.

Eine URL kann dann z.B. so aussehen ...de/cc/Kategorie1_in_Berlin/RubrikXY_Seitenzahl.htm
(Seitenzahl = Platzhalter)

Die dynamischen Inhalte oder auch Strings werden dann im Ordner /site_cache/ erzeugt und alte Daten gelöscht.

Mein Problem ist nun folgendes:
Nach etwas 3-4 Stunden CronJob (dieses Script) bekomme ich nur noch 404-Meldungen:

Code:
Warning:
file(http://www.xyz.de/de/cc/Kategorie1_in_Duisburg/Rubrik_26.html):
failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
in /var/www/web3/html/umkreis/cron3b.php on line 391

Warning: implode(): Invalid arguments passed in
/var/www/web3/html/umkreis/cron3b.php on line 391
Das Ganze wiederholt sich dann und er gibt mir keine Inhalte mehr.
Die Funktion file() bekommt einfach keine Ergebnisse mehr zustande.

Das komische ist, dass es für ca. 100 Rubriken in jeweiligen Kategorien funktioniert. Das o.g. Beispiel mit Duisburg hat 44 Seiten, davon werden die ersten 25 ERZEUGT!!!, nur ab Seite 26 gibts dann keine Ergebnisse.

Achja, die Seiten lassen sich bei mir im Browser aufrufen! Sie existieren also bzw. die RewriteRules funktionieren und die Ergebnisse sind nicht leer.


Ich danke euch schon jetzt im Voraus für jeden Tipp, den Ihr mir geben könnt - bin echt am verzweifeln!
Mit Zitat antworten
  #2 (permalink)  
Alt 17-09-2012, 17:43
Quetschi
 PHP Expert
Links : Onlinestatus : Quetschi ist offline
Registriert seit: Dec 2004
Beiträge: 3.134
Quetschi wird schon bald berühmt werden
Standard

Ich würde mal schwer darauf tippen, dass hier ein Mechanismus greift, der zu häufige und schnelle Zugriffe des gleichen Client unterbindet.
__________________
Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
Schön - etwas Geschichte kann ja nicht schaden.
Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!
Mit Zitat antworten
  #3 (permalink)  
Alt 18-09-2012, 10:29
nullacht
 Registrierter Benutzer
Links : Onlinestatus : nullacht ist offline
Registriert seit: Sep 2012
Beiträge: 8
nullacht befindet sich auf einem aufstrebenden Ast
Standard

Vielen Dank für die schnelle Antwort!

Gibt es denn eine Möglichkeit diesen Mechanismus zu identifizieren und ggf. zu deaktivieren?
Oder gibt es eine Alternative um den Mechanismus zu umgehen?

Es muss ja irgendwie möglich sein, Seiten abzufragen, die existieren!
Vielleicht mit try-catch und dann 10 Wiederholungen?
Timeout greift hier nicht oder?

Folgendes steht am Anfang der Datei:
PHP-Code:
    ini_set('memory_limit''128M');
     
ini_set("default_socket_timeout"240); // 4 Minuten!!! 
sonst bekomme ich die Meldung "memory exhausted"...

Vielen Dank!
Mit Zitat antworten
  #4 (permalink)  
Alt 18-09-2012, 11:06
Quetschi
 PHP Expert
Links : Onlinestatus : Quetschi ist offline
Registriert seit: Dec 2004
Beiträge: 3.134
Quetschi wird schon bald berühmt werden
Standard

Grad mal noch eine andere Frage: Rufst du hier Seiten auf, die sich eh auf dem gleichen Server befinden?
__________________
Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
Schön - etwas Geschichte kann ja nicht schaden.
Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!
Mit Zitat antworten
  #5 (permalink)  
Alt 18-09-2012, 11:16
nullacht
 Registrierter Benutzer
Links : Onlinestatus : nullacht ist offline
Registriert seit: Sep 2012
Beiträge: 8
nullacht befindet sich auf einem aufstrebenden Ast
Standard

Genau, die Seiten, die ich abfrage, befinden sich auf demselben Server!
Mit Zitat antworten
  #6 (permalink)  
Alt 18-09-2012, 11:23
Quetschi
 PHP Expert
Links : Onlinestatus : Quetschi ist offline
Registriert seit: Dec 2004
Beiträge: 3.134
Quetschi wird schon bald berühmt werden
Standard

Warum speicherst du sie dann nicht gleich, wenn sie erstellt werden? Ist ja sonst ein bisschen von hinten durch die Brust ins Auge...
__________________
Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
Schön - etwas Geschichte kann ja nicht schaden.
Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!
Mit Zitat antworten
  #7 (permalink)  
Alt 18-09-2012, 12:44
nullacht
 Registrierter Benutzer
Links : Onlinestatus : nullacht ist offline
Registriert seit: Sep 2012
Beiträge: 8
nullacht befindet sich auf einem aufstrebenden Ast
Standard

Die Seiten sind alle dynamisch. Also ich habe URLs, die durch mod_rewrite als Parameter an die betreffende PHP-Datei umgeleitet werden.

Der Aufbau der dynamischen Seiten kann schon mal eine Minute dauern. Und da das halt nicht infrage kommt, muss ich jede Seite einzeln erstellen und abspeichern, damit alle Möglichkeiten (durch Parameter) schon existieren und bereitstehen.

(Mit den Seiten, die er ermitteln konnte funktioniert das auch alles wunderbar. Also die Seiten bauen sich innerhalb von millisekunden auf, weil sie halt schon existieren. Nur wie bekomme ich die anderen Seiten erzeugt, ohne dass er mir 'nen 404 ausgibt?!)

LG
Mit Zitat antworten
  #8 (permalink)  
Alt 18-09-2012, 12:59
Quetschi
 PHP Expert
Links : Onlinestatus : Quetschi ist offline
Registriert seit: Dec 2004
Beiträge: 3.134
Quetschi wird schon bald berühmt werden
Standard

Eine Minute um die Distanz zwischen zwei PLZ zu berechnen? Da hast du irgendwo einen schönen Haken in deiner Programmierung würd ich mal sagen.

Zum anderen:
Ich meinte ja, du solltest das Ergebnis, dass dir dein PHP-Script ausgibt eben auch gleich im PHP-Skript speichern.

1. Irgendein Client ruft /de/cc/Kategorie1_in_Duisburg/Rubrik_26.html auf deinem Server auf
2. mod_rewrite übergibt das ganze an dein Script xyz.php
3. Script xyz.php erstellt den entsprechenden Inhalt, gibt in an den Client zurück und speichert den Inhalt auch gleich

Damit würdest du dir die Cronjob-Geschichte sparen.


Mit deinem Weg:
Versuche es mit kleinen Pausen zwischen den Seitenaufrufen oder lasse pro Cronjob-Durchgang immer nur eine gewisse Anzahl an Seiten generiern.
__________________
Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
Schön - etwas Geschichte kann ja nicht schaden.
Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!
Mit Zitat antworten
  #9 (permalink)  
Alt 18-09-2012, 13:10
nullacht
 Registrierter Benutzer
Links : Onlinestatus : nullacht ist offline
Registriert seit: Sep 2012
Beiträge: 8
nullacht befindet sich auf einem aufstrebenden Ast
Standard

2 Postleitzahlen werden in der Funktion berechnet. Dieses wird aber für etwa 12.000!!! Profile durchgeführt (zu über 20 Städten!!!). Abhängig vom Abstand.

Die Geschichte besteht aus 3 CronJobs:
1 - der erste Speichert den Abstand von ProfilPLZX zu StadtPLZY. Für alle Kategorien, Rubriken und Subrubriken.
2 - hier wird eine 2. Tabelle angelegt, die zu jeder Stadt und Kategorie bzw. Stadt und Rubrik bzw. Stadt und Subrubrik alle Profile enthält, bei denen der Abstand unter einem gewissen (fixen) Radius liegt. Der Wert des Abstandes wird ebenfalls in der Tabelle gespeichert.
3 - erst die letzte Datei geht alles durch und erzeugt die Seiten.

Würde ich es so machen wie Du vorschlägst (Seiten live erstellen und cachen), würden die ersten Besucher pro Tag minutenlang darauf warten, dass sich eine bestimmte Seite aufbaut.

Die Idee finde ich gut, aber leider darf ich das unseren Besuchern nicht antun.

PS: Die Berechnung eines einfachen Abstandes zwischen 2 PLZ geht recht schnell mit der Open-GEO-DB. (einige Millisekunden) Jedoch muss dies halt für über 12.000 Profile zu den vorhandenen (über 20) Städten vorgenommen werden!
Mit Zitat antworten
  #10 (permalink)  
Alt 18-09-2012, 13:19
Quetschi
 PHP Expert
Links : Onlinestatus : Quetschi ist offline
Registriert seit: Dec 2004
Beiträge: 3.134
Quetschi wird schon bald berühmt werden
Standard

Also wenn du /de/cc/Kategorie1_in_Duisburg/Rubrik_26.html aufrufst, dann werden da erstmal tausende von Abstandsberechnungen durchgeführt, oder wie?
__________________
Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
Schön - etwas Geschichte kann ja nicht schaden.
Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!
Mit Zitat antworten
  #11 (permalink)  
Alt 18-09-2012, 13:20
nullacht
 Registrierter Benutzer
Links : Onlinestatus : nullacht ist offline
Registriert seit: Sep 2012
Beiträge: 8
nullacht befindet sich auf einem aufstrebenden Ast
Standard

Richtig. Abhängig von den Parametern. (Deswegen die Stadt in der URL)
Mit Zitat antworten
  #12 (permalink)  
Alt 18-09-2012, 13:23
Quetschi
 PHP Expert
Links : Onlinestatus : Quetschi ist offline
Registriert seit: Dec 2004
Beiträge: 3.134
Quetschi wird schon bald berühmt werden
Standard

Und auf der Seite werden dann auch sämtliche Ergebnisse aus den Abstandsberechnungen ausgegeben? Mir erschließt sich der Sinn der Sache nicht - deshalb die Nachfrage.
__________________
Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
Schön - etwas Geschichte kann ja nicht schaden.
Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!
Mit Zitat antworten
  #13 (permalink)  
Alt 18-09-2012, 13:30
nullacht
 Registrierter Benutzer
Links : Onlinestatus : nullacht ist offline
Registriert seit: Sep 2012
Beiträge: 8
nullacht befindet sich auf einem aufstrebenden Ast
Standard

Nein, es werden nur die Profile mitgezählt, die bei denen der Abstand unter 200km liegt. Daher brauche ich den Wert.

Es wird die Anzahl der Profile einer Rubrik, bei denen der Abstand im Radius einer Stadt liegt, angezeigt.

z.B.:
RubrikXYZ in Berlin (123)
RubrikZYX in Berlin (321)
usw.

--------------------------------------------------------------------------------------
Macht es einen Unterschied wenn ich in der cron.sh 3 Dateien angebe statt nur die eine. Also eine für Kategorien, eine für die Rubriken und für die Unterrubriken. Sodass er diese nach und nach abarbeitet und nicht in einem Script?

Was meintest Du mit Pausen? Gibt es eine delay-Funktion, mit der das klappt?

Vielen Dank für Deine Hilfe
Mit Zitat antworten
  #14 (permalink)  
Alt 18-09-2012, 13:34
Quetschi
 PHP Expert
Links : Onlinestatus : Quetschi ist offline
Registriert seit: Dec 2004
Beiträge: 3.134
Quetschi wird schon bald berühmt werden
Standard

Also eine Umkreissuche? Dann steigst du aber von der falschen Seite auf das Pferd auf.

Da php.net grad down ist:
PHP - sleep - Sonstige-Funktionen
__________________
Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
Schön - etwas Geschichte kann ja nicht schaden.
Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!
Mit Zitat antworten
  #15 (permalink)  
Alt 18-09-2012, 13:47
nullacht
 Registrierter Benutzer
Links : Onlinestatus : nullacht ist offline
Registriert seit: Sep 2012
Beiträge: 8
nullacht befindet sich auf einem aufstrebenden Ast
Standard

Jop, im Prinzip eine Umkreissuche.

Wie würdest Du denn an das Problem rangehen? Wenn ich mal fragen darf

Danke für die Info mit dem sleep. Ist ja wie damals mit QBasic ^^
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Problem: Smarty-Caching & Blätterfunktion carapau PHP Developer Forum 2 07-10-2009 09:56
Problem mit Caching chefdesigner PHP Developer Forum 16 23-07-2009 14:38
[Funktion] Rekursive Funktion - PHP-file download fletschge PHP Developer Forum 4 16-08-2006 17:05
[Funktion] File Funktion mit Timeout woot Apps und PHP Script Gesuche 5 28-01-2006 17:22
ie6 caching problem mrdynalink HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 0 25-10-2005 19:09

Themen-Optionen
Thema bewerten
Thema bewerten:

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.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

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