När jag kom på att jag skulle skriva det här inlägget så tänkte jag skriva det i en önskelista, “saker jag vill se under 2012″, och en av dom var “Vettigt stöd för delade sessioner i ett kluster”.
Men, allt eftersom jag började läsa så såg jag att det är ju redan löst, med funktionen session_set_save_handler eller direkt i php.ini med memcached, då är det session.save_handler som gäller. Som default så använder PHP files, men det finns inbyggt stöd för memcache och det är superenkelt att aktivera.
session.save_handler = memcache
session.save_path = "tcp://127.0.0.1:11211"
Klart! Nu sparar PHP alla sessioner till din lokala memcacheburk, skulle du vilja spara det på en extern instans så är det bara att ersätta IP-adressen. Memcache är kanske inte helt optimalt för att spara data in, då det har en tendens att crasha och första datan. Så en kombination av (No)SQL och Memcache hade varit ett bra alternativ, SQL för säkerheten och Memcache för hastigheten, med NoSQL som typ MongoDB så kan man skippa Memcache.
I dokumentationen för PHP finns det bra exempel på hur du själv kan anpassa session_set_save_handler för att använda den backend du vill använda. @ChristofferP påpekade att bland annat PHP ramverket Litihum har stöd för alternativa session stores.
Fördelen med att kunna spara sessionen i ett delat storage är att man kan skippa sticky sessions när man lastbalanserar, och balansera jämnare över klustret. Om det är någon som vet om det finns ett smidigt sätt att inkludera sin egen sessionsklass i WordPress, säg till!
För att förhindra att PHP-filer i en mapp kan exekveras av Apache2s mod_php, lägg till följande i .htaccess
<Directory />
php_admin_flag engine off
</Directory>
Där sökvägen motsvarar sökvägen till mappen du vill förhindra exekvering i.
Jag har precis haft en massa problem med att min site som är byggd i CodeIgniter slutar funka så fort jag laddar ett library, jag hann testa med Dx_Auth Tank_Auth och Ion_Auth innan jag kom på vad felet var.
Jag saknade paketet php-mysql på min CentOS maskin.
Det roliga i det hela var att varken PHP, Apache2 eller CodeIgniter sa att något var fel, vilket känns lite skumt faktiskt.
Folket på We Up North har skapat ett CodeIgniterbibliotek för att hämta metadata från Spotify, fantastiskt!
http://weupnorth.se/blogg/spotify-metadata-och-codeigniter/
Här kommer första screenshoten av TrunkFish KVM Control integrerat i TrunkFish!Lär mer om trunkfish här: http://dwall.in/blogg/trunkfish/varfor-skall-ett-crm-ha-kvm-styrning/

Första utkastet till TrunkFish KVM Control är nu klart, det är inte mycket för världen, men ett steg i rätt riktning!


Igår kväll hade jag problem med att en av våra servrar höll på att gå under, vi har nyligen satt igång ett ganska prestandakrävande script på maskinen, och av någon anledning så verkar det ha hängt sig. Eftersom jag inte är skaparen av scriptet så låter jag det förbli osagt varför.
För att förhindra att PHP-FPM sänker din server så finns det en inbyggd funktion för att sätta max_execution_time, PHP har en egen variabel för det i php.ini, men om den inte funkar så kommer FPM döda workern åt dig. Det finns också en fin funktion som loggar vilka phpscript som kör för länge, på så sätt kan man hålla utkik och enkelt felsöka sina applikationer.
request_terminate_timeout = 30m
; The timeout for serving a single request after which a PHP backtrace will be
; dumped to the 'slowlog' file. A value of '0s' means 'off'.
; Available units: s(econds)(default), m(inutes), h(ours), or d(ays)
; Default Value: 0
request_slowlog_timeout = 5s
; The log file for slow requests
; Default Value: /var/log/php5-fpm.log.slow
slowlog = /var/log/php5-fpm.log.slow
Jag väljer att ha 30minuters gräns för hur länge ett script får lov att köra, och det loggas i php5-fpm.log.slow efter 5s, på så sätt får jag snabbt information om ifall det är något som gått snett. Glöm inte starta om php5-fpm för att ändringarna ska slå igenom.
Mitt senaste projekt är att skriva ett enkelt bibliotek(library) i CodeIgniter för att generera iCalendar(http://en.wikipedia.org/wiki/ICalendar) filer. jag har ännu inte bestämt mig för om den ska generera riktiga filer, eller om jag ska låta den generera allt dynamiskt och bara skicka med lite headers. Det senare är det smartaste alternativet, men jag vet inte riktigt hur det är prestandamässigt. Det hade ju varit smidigt att kunna lagra all data i databasen istället för att hålla på och mecka med filer.
iCalendar är ett öppet och vedertaget sätt att dela kalenderposter, det används i både Outlook och iPhone samt Sunbird(kalender plugin/add-on) för Thunderbird, ett mozilla projekt med andra ord.
Återkommer med mer info när jag har det, planen är att släppa biblioteket som GPL så att alla kan ta del av det:)
Upptäckte precis att CodeIgniter 1.7.2 inte har .ODT tillagt i filen config/mimes.php, vilket gör att man inte kan ladda upp .odt filer med de inbyggda funktionerna. För att lösa det, lägg till den här raden:
'odt' => array('application/x-vnd.oasis.opendocumet.text',
'application/vnd.oasis.opendocument.text'),
Det är viktigt att det skrivs på samma rad!
Ovanför raden som inleds med ‘eml’ i filen application/config/mimes.php
Jag har de senaste dagarna använt systemet i den här posten(http://www.abergman.se/skapa-odt-dokument-med-odtphp/) för att kunna generera dokument on the fly från variabler som jag själv anger, både placeholders i form av %PLACEHOLDER% och fördefinierad text. Allt är databasbaserat och fint.
Jag lärde mig att man inte kan deklarera variabler on-the-fly med php, MEN man kan använda arrayer, jag löste det såhär:
$variabel = data;
$array[$variabel] = $variabel;
Det innebär att $array[data] = data. Det är ett smidigt sätt när man till exempel vill döpa variabler från värden i en databas. Den här lösningen kommer att användas för att generera bla avtal i Ngcrm.
Senaste kommentarerna