FAQ |
Kalender |
![]() |
#1 | ||
|
|||
Medlem
|
Hejsan!
Jag har en sida som under vissa dagar har runt 5000 besökare per timme, och det gör att besökarna biland får felet "för många anslutna användare i databasen". Som det är nu så läser index.php info från databasen för varje ny besökare, men innehållet ändras bara 10 ggr om dagen. Nu tänkte jag att jag skulle göra som så att jag exempelvis var tionde minut kör php-kod som går in i databasen och hämtar information, och sedan sparar det i en annan fil, content.html. Sen ska jag låta jag bara index.php "includa" content.html istället för att köra sönder databasen hela tiden. Det jag behöver är en php-kodsnutt som skriver över ett annat dokument på servern, hur ska jag göra? Exempel på hur jag tänkt: Kod:
<?php $content = "<td>Nyheter från sidan som hämtas från databasen<br></TD>"; **Någonmetod spara(överlagra) $content som content.html ?> Ett annat sätt att få bukt med problemet är kanske att göra så att besökarna inte "stannar" för länge i databasen, som det är nu får den kanske omkring 10 000 förfrågningar per timme, det är ungefär 3 per sekund. Databasen klarar dock av 79 samtidigt, hur hänger detta ihop? :S Jag trodde att besökarna blev avkopplade precis efter att sidan blev färdigladdad. Eftersom jag har ett webbhotell är det nog inte så troligt att man kan göra några inställningar ändå ![]() Hoppas någon kan hjälpa mig med detta! Mvh Petter |
||
![]() |
![]() |
![]() |
#2 | ||
|
|||
Medlem
|
Om du inte råkar sitta på ett webbhotell är det smidigaste en cache lösning som Turck MMCache eller liknande. Läs Readme filen och installera. Det är riktigt enkelt, det finns tom ett webbinterface!
Länk: http://sourceforge.net/projects/turck-mmcache/ |
||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Klarade millennium-buggen
|
Du bör kolla in http://se.php.net/ob_start - den gör att du kan skriva till en buffer som du enkelt kan skriva ner till disk. Dvs du behöver inte göra några förändringar i din webbsida mer än en ob_start i början och en ob_flush eller vad den heter i slutet av sidan.
Sedan kollar du i din kod bara om det finns en nyligen cachad version av din sida, då visar du den för besökaren, annars renderar du sidan. Vill du gå steget längre så använder du cron/at för att ta bort gamla filer tillsammans med tex find och kollar redan i tex .htaccess om filen finns eller inte med flaggan "-f". Låter det krångligt? Google vet mer... :P |
||
![]() |
![]() |
![]() |
#4 | ||
|
|||
Medlem
|
Precis, cachning är ordet PetterS letar efter.
Turck MMCache är bra. Ännu enklare att implementera tycker jag Cache_Lite är (en PEAR-extension). Då kan du göra som du beskriver i ditt inlägg ungefär. Bara att installera och göra så här: include("Cache/Lite.php"); $objCache = new Cache_Lite( array("cacheDir" => "cache/", "lifeTime" => 86400) ); if ($content = $objCache->get("unikt_id_som_du_får_konstruera_själv")) echo $content; else { .... konstruera hela sidan (eller mindre delar som är lämpliga!!!) i variabeln $content, som vanligt... echo $content $objCache->save($content, "unikt_id_som_du_får_konstruera_själv"); } |
||
![]() |
![]() |
![]() |
#5 | |||
|
||||
Mycket flitig postare
|
Citat:
För att spara: Kod:
file_put_contents("content.html",$content,LOCK_EX); PS: tycker 79 connections samtidigt låter lite lite. Kan du inte få webhotellet att skruva upp det till 150 eller så? (Riktlinjen är väl egentligen att man inte ska tillåta färre connections till sql än till servern, dåligt konfigurerad?) |
|||
![]() |
![]() |
![]() |
#6 | ||
|
|||
Medlem
|
Kommer denna rad att spara en fil på webservern?
file_put_contents("content.html",$content,LOCK_EX) ; Vad betyder LOCK_EX ? |
||
![]() |
![]() |
![]() |
#7 | ||
|
|||
Medlem
|
PetterS>> php.net är din bästa vän, där står allt.
Det stämmer att funktionen sparar en fil. Det är dock inte bästa sättet att cacha något, se ovan. LOCK_EX betyder att din process låser filen så bara den processen kan skriva till filen. |
||
![]() |
![]() |
![]() |
#8 | |||
|
||||
Mycket flitig postare
|
Citat:
http://de2.php.net/manual/en/function.file...ut-contents.php Edit: mersault hann visst före: "PetterS>> php.net är din bästa vän, där står allt." - exakt! |
|||
![]() |
![]() |
![]() |
#9 | |||
|
||||
Medlem
|
Citat:
|
|||
![]() |
![]() |
![]() |
#10 | |||
|
||||
Mycket flitig postare
|
Var det Turck MMCache du testade eller det var nog snarare Cache_Lite va?
Jag satt o pillade med det igår efter att ha läst denna tråden, men får inte rätt på PEAR. Jag har ingen PEAR-katalog under min PHP-katalog, eftersom min PHP-installation inte hade PEAR i sig (bara för att jag körde exe-varianten?). Nu letade jag överallt på nätet efter den där filen som heter go-pear.bat som man ska kunna installera PEAR med, men hittar den ingenstans... tycker det är lite luddigt på PEAR sajt om hur man ska installera det om man nu saknar PEAR från första början i sin PHP-installation ![]() |
|||
![]() |
![]() |
Svara |
|
|