Tips och Trix för PHP-utvecklare

Permalänk
Hedersmedlem

Tips och Trix för PHP-utvecklare

Jag hade inte så mycket att göra igår, så jag skrev ner några ord om vad jag tycker folk ofta missar och gör fel på i PHP. Läs gärna igenom och kom med förslag på vad jag ska ändra/lägga till.

Kennels Tips och Trix för PHP-utvecklare

http://web.archive.org/web/20070226074346/http://www.punbb.or...
Arkivlänk då den första länken inte är längre aktuell.

Permalänk
Medlem

1. Jag har aldrig sett en tutorial som har använt sig av register_globals, koden blir rörig om man utnyttjar det. Ush.
2. Jag är lat och använder inte xml.
3. Nog lite dålig när det gäller det.
6. Missbruka är inte rätt ord, låter inte som du sätter upp riktlinjer eller tips utan mer som lagar som måste följas.
8. Det där visste jag inte, tack.

Permalänk
Hedersmedlem
Citat:

Ursprungligen inskrivet av Don_Tomaso
1. Jag har aldrig sett en tutorial som har använt sig av register_globals, koden blir rörig om man utnyttjar det. Ush.
2. Jag är lat och använder inte xml.
3. Nog lite dålig när det gäller det.
6. Missbruka är inte rätt ord, låter inte som du sätter upp riktlinjer eller tips utan mer som lagar som måste följas.
8. Det där visste jag inte, tack.

1. Jag har sett mängder. Det har blivit betydligt bättre på senare tid, men de som första tittade på PHP för något eller några år sedan har säkerligen sett det. Frågan är dock så pass viktig att den behöver tas upp om och om igen.

2. Spelar ingen roll. Du bör ändå inte använda den korta formen.

3. Du är inte ensam

6. Jag tycker missbruka är helt rätt ord. Det är bättre att folk överanvänder det än att de använder det för lite. Otroligt många av de problem jag ser här i forumet är problem man löser genom att skriva ut innehållet av en variabel, t.ex. en query.

Permalänk
Medlem

Fint, men du har glömt en viktig del, "Hur man använder include() på rätt sätt".

Visa signatur

~ When there's no more room in hell, the dead will walk the earth. ~

Permalänk
Medlem

1. Det är jag väl medveten om
2. Har sett det, men aldrig använt det.
3. Är lite dålig med det, men oftast kommer jag ihåg det iaf. Åtmindstone när det handlar om filer.
4. Brukar komma ihåg att kolla returvärdet på senare tid iaf. Det var sämre förr.
5. Om jag ändå förstod en gnutta av reguljära uttryck.
6. Mycket användbar funktion.
7. Visste jag inte alls
8. Har helt glömt bort_assoc, har bara använt _row och _array, ska nog byta ut _array mot _assoc iaf.

Väldigt bra skrivet, vem som helst fattar allt av det där.

Permalänk

Mycket bra skrivet Det enda jag har att klaga på är att du har ett litet typo i länk nummer 3: "Lita andrig på indata från användaren"

1. Använder alltid $_GET, $_sESSION etc.
2. Har aldrig använt den korta taggen, tycker att det blir mer överskådligt med <?php
3. Väl medveten om detta
4. Detta är jag dålig på
5. Kan inte regexp
6. Visste inte ens att det fanns en funktion som hette print_r()
7. Väl medveten om detta
8. Använder nästan alltid _assoc

Visa signatur

"to conquer others is to have power, to conquer yourself is to know the way"

Permalänk
Medlem

1. Precis när jag började med php köpte jag en php-bok, tog inte lång tid innan jag idiotförklarade författaren för att han använde register_globals
2. Använder alltid <?php, kollade inte upp det riktigt, men antog att det skulle bli mer 'kompatibelt' på olika system.
3. Just intval() är jag lite slarvig med, försöker att alltid komma ihåg det.
4. Om alla nybörjare kunde göra det skulle vi ha 50% mindre php-frågor här på forumet
5. Älskar RegEx
6. har gjort min egna lilla gagg_print_r(), blir nog snart print_r-rehab
7. Bör jag bättra mig på
8. I början insåg jag inte att mysql_fetch_array() returnerade dubletter, gick över till mysql_fetch_assoc() så fort jag upptäckte det.

Bra tips Kennel/Rickard, klistra kanske?

Permalänk
Hedersmedlem

Kul att ni gillar det. Kom gärna med förslag på vad som kan förbättras eller vad som kanske bör läggas till.

Citat:

Ursprungligen inskrivet av Shark^
Fint, men du har glömt en viktig del, "Hur man använder include() på rätt sätt".

Ja, det har du rätt i. Jag kanske borde inkludera (no pun intended) lite om det i punkt 3. Den blir så lång då bara

Permalänk
Medlem

Apropå include() så anser jag att man ska köra require() istället.

Permalänk
Medlem

aha, det där med addslashes() var ju finurligt. Jag brukar manuellt backslasha där det behövs men då blir ju strängen snabbt oläslig.

Visa signatur

Confused by earlier errors. Bailing out...
pluggakuten.se - Din läxhjälp på internet

Permalänk
Medlem

Bra skrivet, tummen upp.

Skall nog ta och skriva om lite PHP-script när jag kommer hem.

Permalänk
Medlem

8. Man kan använda sig av _array men ändå slippa de onödiga raderna. _array tar en ytterligare parameter fr.o.m. PHP 3.0.7 som kan ha värderna MYSQL_ASSOC, MYSQL_NUM, och MYSQL_BOTH. Ja, ni ser :).

Permalänk
Medlem

^
...fast det blir ju mer att skriva då, bättre att innan veta vad man vill använda.

Permalänk
Hedersmedlem

Jag har kommit på några saker jag ska lägga till i artiklen. Förhoppningsvis får jag tid ikväll.

Permalänk
Hedersmedlem

Mycket trevlig Kennel, tummen upp!

1. Visste inte ens att det gick, har alltid använt $_GET, $_POST osv.
2. Hatar <?, <?php ska det vara, mer överskådligt
3. Det där är jag grymt dålig på, måste försöka ändra på mig.
4. Gör alltid så
5. Det där visste jag inte, har inte hållt på så mycket med dem...
6. Hmm, ska jag försöka tänkta på.
7. Jag har iof magic_quotes_gpc avslaget i php.ini, men det kanske inte alla webbhotell har, måste börja tänka på det.
8. Ah, bra att du tog upp det, har alltid använt _array då phpsidans artiklar skrev det så, kanske skulle börja med _assoc istället?

Ska se om jag kommer på något av värde men det tvivlar jag på

Visa signatur

Vim
Kinesis Classic Contoured (svart), Svorak (A5)
Medlem i signaturgruppen Vimzealoter.

Permalänk
Medlem

Trevlig guide, visste de 7 första men den åttonde ställde mig totalt, har kört med mysql_fetch_array() av den anledningen att jag inte förstod vad mysql_fetch_assoc() funktionen gjorde när jag läste om den i manualen när jag började med PHP.

Lägg gärna till fler, alla kan alltid lära sig någonting nytt, man är aldrig fullärd

Permalänk
Medlem

7. Kände inte till magic quotes. Bra att veta.
8. Brukar bara använda mysql_fetch_object().

Visa signatur

:€

Permalänk
Medlem

Bra guide. Keep up the good work!

Måste dock säga emot dig på punkt 7. Best practice när det gäller att lagra data i MySQL är att använda mysql_escape_string (PHP version < 4.3.0) eller mysql_real_escape_string (PHP version >= 4.3.0). magic quotes ska om möjligt (om man har tillgång och kontroll över php.ini) vara avstängt. Har man inte tillgång till php.ini och kan stänga av magic quotes (eller man kanske inte vill) så kan man använda funktionen nedan. Ska redan nu säga att jag inte skrivit den utan det är PHP guruna Jeffrey Siegel och Michael Southwell från PHundamentals Team. Det bör vara en av de första funktionerna som körs i de skript som skulle behöva denna funktionalitet.
Vidare så är best practice när man skickar data till webbläsare att alltid köra htmlentities.

function fix_magic_quotes ($var = NULL, $sybase = NULL) { // if sybase style quoting isn't specified, use ini setting if (!isset($sybase)) { $sybase = ini_get('magic_quotes_sybase'); } // if no var is specified, fix all affected superglobals if (!isset($var)) { // if magic quotes is enabled if (get_magic_quotes_gpc()) { // workaround because magic_quotes does not change $_SERVER['argv'] $argv = $_SERVER['argv']; // fix all affected arrays foreach (array('_ENV', '_REQUEST', '_GET', '_POST', '_COOKIE', '_SERVER') as $var) { $GLOBALS[$var] = fix_magic_quotes($GLOBALS[$var], $sybase); } $_SERVER['argv'] = $argv; // turn off magic quotes, this is so scripts which // are sensitive to the setting will work correctly ini_set('magic_quotes_gpc', 0); } // disable magic_quotes_sybase if ($sybase) { ini_set('magic_quotes_sybase', 0); } // disable magic_quotes_runtime set_magic_quotes_runtime (0); return TRUE; } // if var is an array, fix each element if (is_array ($var)) { foreach ($var as $key => $val) { $var[$key] = fix_magic_quotes($val, $sybase); } return $var; } // if var is a string, strip slashes if (is_string($var)) { return $sybase ? str_replace ('\'\'', '\'', $var) : stripslashes($var); } // otherwise ignore return $var; }

Visa signatur

10 RTFM
20 RTFAQ
30 STFW

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av gagg
Apropå include() så anser jag att man ska köra require() istället.

Bättre att köra require_once() tycker jag.

Permalänk
Hedersmedlem

Så, jag har uppdaterat artikeln med två nya punkter. Jag slog även till och la till lite information on include/require och vad man bör passa sig för där.

Permalänk
Medlem

mm tåls att tillägga att det inte alltid hjälper att skriva

include $_GET['page'].".php"; //Verkar vara ganska vanligt att använda.. include $_GET['page'].".gif"

i tron att man bara kan inkludera php/gif filer.. har man inte satt på eller har man stängt av magic_quotes_gpc då funkar

index.php?page=/etc/passwd%00

utmärkt.. (%00 betyder slut på stängen) så se till så ni har magic_quotes_gpc på

echo ini_get('magic_quotes_gpc');

hade ni det inte så om ni inte har ont av magic_quotes_gpc så sätt på det i php.ini

magic_quotes_gpc = On

http://se.php.net/manual/sv/ref.info.php#ini.magic-quotes-gpc

Visa signatur

~ When there's no more room in hell, the dead will walk the earth. ~

Permalänk
Medlem

När du nu ändå nämnt syntax också kanske det kan vara värt att även nämna att man ska skriva
"$objekt->medlem", inte
"$objekt->$medlem".
Det är ett misstag som är rätt vanligt.

Visa signatur

:€

Permalänk
Medlem

exemplena --> exemplen (tror jag), själ --> skäl (definitivt).

Permalänk
Medlem

Bra guide Kennel!

Permalänk
Hedersmedlem

Shark^: Japp, ska lägga till något om det (en kort notis). Jag kommer däremot aldrig rekommendera folk att slå på magic_quotes_gpc. Magic quotes är PHP's absolut största "misfeature" och om något skall vi råda folk att stänga av det.

eighty: Kanske det. Jag kan iofs inte minnas att jag sett det förut.

Malesca: Tack. Fixat.

Permalänk
Medlem

Kennel: tss, nu är du bara elak.. finns inget ont med magic quotes.. chansen att man vill ha strängen "slashad" är större än "oslashad"

Visa signatur

~ When there's no more room in hell, the dead will walk the earth. ~

Permalänk
Hedersmedlem
Citat:

Ursprungligen inskrivet av Shark^
Kennel: tss, nu är du bara elak.. finns inget ont med magic quotes.. chansen att man vill ha strängen "slashad" är större än "oslashad"

Jag tänkte framför allt på alla som kör addslashes() utan att ta hänsyn till magic quotes. Jag har läst otalet guider och "skolor" som förespråkar användningen av addslashes() utan att ens nämna magic quotes.

Permalänk
Medlem

Men då är det väl guiderna det är fel på och inte php "..Magic quotes är PHP's absolut största "misfeature".."

Visa signatur

~ When there's no more room in hell, the dead will walk the earth. ~

Permalänk
Hedersmedlem

Det faktum att det finns så mycket dokumentation som bortser från magic_quotes gör det till en misfeature. Tanken kanske var god från början, men i praktiken leder det bara till mer arbete.

Jag har iaf uppdaterat artiklen med ditt tips.

Permalänk
Hedersmedlem

Har lagt till en ny punkt: "11. Programmera objektorienterat för att du bör, inte för att du kan"

Tar mig friheten att klistra den här. Är det ingen som läser den så tar vi bort klistret igen.