Posts Tagged ‘php’

Använd error-loggen!

måndag, mars 5th, 2012

error_logOfta när jag ska hjälpa någon av våra utvecklare med ett problem är min första fråga: Vad står det i loggen? Apache och php har väl utvecklade loggfunktioner och man kan med hjälp av dom få en ganska bra fingervisning om vad som orsakar problemet.  Exempelvis kan det stå:

[Fri Mar 02 17:38:08 2012] [error] [client 127.0.0.1] PHP Parse error:  syntax error,
unexpected ';' in /var/www/smhifb/application/controllers/start.php on line 64</pre>

Just det här felet beror förmodligen på att det saknas en slutparantes eller klammer på rad 64 i filen start.php (Nu var det här bara ett exempel, eftersom rena syntaxfel så klart hittas av din IDE, som jag utgår ifrån att  du använder.)

När jag utvecklar har jag alltid ett terminalfönster öppet som visar loggarna i realtid så att jag snabbt ska kunna se om det händer något som inte borde hända, när man surfar in i applikationen.  Även om man inte märker några fel när man surfar så händer det ändå att det dyker upp fel i loggen. Oftast är detta då varningar eller notiser, vilka inte är fatala för körningen av koden. Det är väldigt vanligt att man ändrar i php.ini så att notiser och till och med varningar inte visas i loggen, koden fungerar ju ändå. Gör inte det! Se till att varningar och notiser loggas och fixa till felen! Den enda anledningen till att folk slår av notiser och varningar är att dom antingen är lata eller programmerar dåligt.  Det är lika vanligt att de som har varningar och notiser aktiverat inte bryr sig om att rätta till dessa fel, eftersom det fungerar ändå. Var inte en lat programmerare! Konsekvensen blir att koden inte blir så optimerad som den kunnat vara, dessutom kan små fel bli betydligt större längre fram.

Ett litet tips, använd programmet multitail. Multitail är ett program som körs i konsollen och kan visa flera loggar samtidigt i realtid. Vanligen när man vill se en logg i realtid använder man sig av kommandot tail med växeln -f, exempelvis:

tail -f /var/log/httpd/error_log

Med multitail kör man istället

multitail /var/log/httpd/error_log /var/log/httpd/access_log

Detta medför att terminalfönstret delas på två och visar en logg i varje del. Det är otroligt smidigt att se error-loggen i den ena delen och access-loggen i den andra. Det allra bästa med multitail är att det har syntax highlighting, det skriver alltså ut olika saker i olika färger, vilket gör det enklare  att se i loggen. multitail
Så, en kort sammanfattning.

  • Använd error-loggen
  • Se till att varningar och notiser visas
  • Fixa felen, även varningar och notiser
  • Visa loggen i realtid i ett eget terninalfönster
  • Använd multitail

Kod ska vara kul  och är det också med rätt förutsättningar, en av dessa förutsättningar är att veta vad som är fel och framför allt veta att det är fel.

Bättre url_title() i Codeigniter

onsdag, januari 5th, 2011

Codeigniter är bra på många vis när man ska bygga php-applikationer, dessvärre finns det en del funktioner som inte är helt optimerade för det svenska språket, exempelvis url_title(). url_title() är en funktion som finns i en helper som heter URL Helper och gör om en textsträng till en URL-vänlig sträng så här:

$title = "What's wrong with CSS?";
$url_title = url_title($title);
echo $url_title;

Detta skulle eka ut Whats-wrong-with-CSS, alltså utan mellanslag och apostrofer. Problematiken kommer när man vill göra om en sträng som innehåller svenska tecken eller accenter.

$title = "Jag håller med";
$url_title = url_title($title);
echo $url_title;

Detta skulle bara eka ut Jag-h, allt från och med det svenska tecknet strippas bort, vilket naturligtvis inte är önskvärt. Som tur är kan man i Codeigniter åsidosätta de inbyggda funktionerna med sina egna om man vill, genom att skapa en egen helper i katalogen application/helpers/, exempelvis better_helper.php. I den här filen lägger vi en funktion med samma namn som den inbyggda, i detta fall url_title. Nu kommer vår funktion i better_helper.php att användas istället för den inbyggda. Vi måste även se till att ladda vår nya helper innan URL Helper, annars kommer vår nya funktion inte att fungera.

Vår nya funktion som ska ligga i better_helper.php och som min kollega Jocke ligger bakom, ser ut så här:


/**
* Create better url_titles
*/
if ( ! function_exists(‘url_title’))
{
 function url_title($str, $separator = ‘dash’)
 {
  $separator = ($separator == ‘underscore’) ? ‘_’ : ‘-’;
  $str = strtolower(htmlentities($str, ENT_COMPAT, ‘UTF-8′));
  $str = preg_replace(‘/&(.)(acute|cedil|circ|grave|ring|tilde|uml);/’, “$1″, $str);
  $str = preg_replace(‘/([^a-z0-9]+)/’, $separator, html_entity_decode($str, ENT_COMPAT, ‘UTF-8′));
  $str = trim($str, $separator);
  return $str;
 }
}
// ————————————————————————

Den här funktionen gör om svenska tecken till a respektive o, samt tar bort accenter, så om vi kör samma kod igen får vi följande.

$title = "Jag håller med";
$url_title = url_title($title);
echo $url_title;

Detta ekar ut Jag-haller-med, vilket är vad vi vill ha. Tack Jocke 🙂