Kom ihåg mig?
Home Menu

Menu


Låta en php-fil spara en annan fil

 
Ämnesverktyg Visningsalternativ
Oläst 2006-11-07, 20:58 #1
PetterS PetterS är inte uppkopplad
Medlem
 
Reg.datum: Apr 2006
Inlägg: 71
PetterS PetterS är inte uppkopplad
Medlem
 
Reg.datum: Apr 2006
Inlägg: 71
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
?>
Jag vet inte ens ifall detta fungerar.... vore bra ifall någon kunde berätta hur man gjorde iaf =)


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
PetterS är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-11-07, 21:11 #2
Adam Adam är inte uppkopplad
Medlem
 
Reg.datum: May 2003
Inlägg: 193
Adam Adam är inte uppkopplad
Medlem
 
Reg.datum: May 2003
Inlägg: 193
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/
Adam är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-11-07, 21:37 #3
grazzy grazzy är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Mar 2004
Inlägg: 3 471
grazzy grazzy är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Mar 2004
Inlägg: 3 471
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
grazzy är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-11-07, 21:41 #4
mersault mersault är inte uppkopplad
Medlem
 
Reg.datum: Apr 2006
Inlägg: 119
mersault mersault är inte uppkopplad
Medlem
 
Reg.datum: Apr 2006
Inlägg: 119
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");
}
mersault är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-11-12, 17:25 #5
martines avatar
martine martine är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Mar 2005
Inlägg: 767
martine martine är inte uppkopplad
Mycket flitig postare
martines avatar
 
Reg.datum: Mar 2005
Inlägg: 767
Citat:
Originally posted by PetterS@Nov 7 2006, 21:58
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.
Om du fortfarande är intresserad av den lösning du tänkte dig i början så är det ganska enkelt, gjorde nyligen en liknande lösning som spottar ut samma innehåll som växlar en gång om dagen (utan cron).

För att spara:
Kod:
file_put_contents("content.html",$content,LOCK_EX);
Svårare än så är det inte!…

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?)
martine är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-12-05, 21:00 #6
PetterS PetterS är inte uppkopplad
Medlem
 
Reg.datum: Apr 2006
Inlägg: 71
PetterS PetterS är inte uppkopplad
Medlem
 
Reg.datum: Apr 2006
Inlägg: 71
Kommer denna rad att spara en fil på webservern?


file_put_contents("content.html",$content,LOCK_EX) ;


Vad betyder LOCK_EX ?
PetterS är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-12-05, 21:12 #7
mersault mersault är inte uppkopplad
Medlem
 
Reg.datum: Apr 2006
Inlägg: 119
mersault mersault är inte uppkopplad
Medlem
 
Reg.datum: Apr 2006
Inlägg: 119
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.
mersault är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-12-05, 21:15 #8
martines avatar
martine martine är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Mar 2005
Inlägg: 767
martine martine är inte uppkopplad
Mycket flitig postare
martines avatar
 
Reg.datum: Mar 2005
Inlägg: 767
Citat:
Originally posted by PetterS@Dec 5 2006, 22:00
Kommer denna rad att spara en fil på webservern?
file_put_contents("content.html",$content,LOCK_EX) ;
Vad betyder LOCK_EX ?
Ja, om du har php5 så kommer raden spara (eller skapa) en fil som heter "content.html" i samma mapp som php-skriptet ligger i med innehållet i variabeln $content (som alltså bör vara en lång textsträng som är ett komplett html-dokument). LOCK_EX är inte nödvändigt men gör att ingen annan kan läsa eller skriva till filen medan du skapar den.
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!
martine är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-12-07, 01:31 #9
obes avatar
obe obe är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 172
obe obe är inte uppkopplad
Medlem
obes avatar
 
Reg.datum: Dec 2004
Inlägg: 172
Citat:
Originally posted by mersault@Nov 7 2006, 22:41
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);
}
Testade detta och det funkade mycket bra. Dock funderar jag på vad som händer med katalogen som man anger som cache-dir. Det känns ju som den ganska snart kommer att bli överfull. Ska man kanske ha ett cron-jobb som tömmer den katalogen på gamla filer?
obe är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-12-07, 01:47 #10
Seattlegrunges avatar
Seattlegrunge Seattlegrunge är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Nov 2003
Inlägg: 979
Seattlegrunge Seattlegrunge är inte uppkopplad
Mycket flitig postare
Seattlegrunges avatar
 
Reg.datum: Nov 2003
Inlägg: 979
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
Seattlegrunge är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 14:16.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017