2009.06.30

Wordpress 2.8 og opgradering fra PHP 5.2.1 til 5.3.0

Kategori: Opsætning — Michael Schøler, Kl. 22:25:02

Så kører dette site med wordpress 2.8 (opgraderet fornyligt, og iøvrigt helt uden problemer) og nu også med PHP 5.3.0 som udkom dags dato.

PHP 5.2.1 til 5.3.0 opgraderingen var langt fra problemfri, så her følger lige en uddybning af de skridt der var nødvendige for at gennemføre opgraderingen til evt. gavn for andre.

Start med at tage en backup af ALT. Både din apache installation, mysql installation + export af alle data, din php installation og din htdocs mappe. Så er du rimelig godt stillet skulle alt fejle.

MySQL opsætning

Check om MySQL password tilstanden kører med den gamle eller den nye password-længde:

Hvis din MySQL daemon kører som en service så stop den.
Start “mysqld.exe –skip-grant-tables” fra en kommando prompt.
I en ny kommando prompt skal du nu starte “mysql.exe -u root”, og indtast så følgende:

c:\mysql\bin>mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 1 to server version: 5.0.27-community

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> select PASSWORD('helloworld');
+----------------------------+
| PASSWORD('helloworld')     |
+----------------------------+
| 6c755a9e66debe8a           |
+----------------------------+
1 row in set (0.02 sec)

Hvis OG KUN HVIS du ser ovenstående resultat anvender din mysql installation den gamle password-længde, og du skal derfor opgradere dine privilege tabeller. Kig efter i script mappen i din mysql rodmappe, her bør du kunne finde filen “mysql_fix_privilege_tables.sql”. Kopier denne fil ind i mysql/bin mappen, og start så mysql.exe med følgende parametre fra en kommando prompt:

c:\mysql\bin>mysql -u root --force mysql < mysql_fix_privilege_tables.sql
...
ERROR 1060 (42S21) at line 282: Duplicate column name 'Create_routine_priv'
ERROR 1060 (42S21) at line 283: Duplicate column name 'Create_routine_priv'
ERROR 1060 (42S21) at line 284: Duplicate column name 'Create_routine_priv'
ERROR 1060 (42S21) at line 289: Duplicate column name 'Alter_routine_priv'
ERROR 1060 (42S21) at line 290: Duplicate column name 'Alter_routine_priv'
ERROR 1060 (42S21) at line 291: Duplicate column name 'Alter_routine_priv'
ERROR 1060 (42S21) at line 293: Duplicate column name 'Execute_priv'
ERROR 1060 (42S21) at line 294: Duplicate column name 'Execute_priv'
ERROR 1060 (42S21) at line 306: Duplicate column name 'max_user_connections'
@hadCreateUserPriv:=1
...
ERROR 1060 (42S21) at line 315: Duplicate column name 'Create_user_priv'

Ignorer alle advarsler og fejlbeskeder der kommer efter at have afviklet kommandoen. Alt er godt.

Nu bør du kunne se en længere hash-værdi for passwords i mysql klienten:

c:\mysql\bin>mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 5.0.27-community

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> select PASSWORD('helloworld');
+-------------------------------------------+
| PASSWORD('helloworld')                    |
+-------------------------------------------+
| *D35DB127DB631E6E27C6B75E8D376B04F64FAF83 |
+-------------------------------------------+
1 row in set (0.00 sec)

Slutteligt skal du resette alle dine mysql bruger passwords. Typisk har man kun root brugeren oprettet til en simpel apache/wordpress installation, men har du selv oprettet flere brugere skal du huske at opdatere disse. Dette gøres således:

c:\mysql\bin>mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 5.0.27-community

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> UPDATE mysql.user SET Password=PASSWORD('myNewPw') WHERE User='root';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

Hvis du benytter mysql som en service, luk så mysqld.exe ned, og genstart din daemon service igen.

Installation af PHP5.3.0

Stop din apache daemon.

Omdøb din gamle php mappe til fx php521.

Opret en ny php mappe og kopier alle filerne fra den nye PHP 5.3.0 distribution herind. Du skal hente VC60 udgaven til apache, da det er den eneste der fungerer hertil. Jeg valgte Thread safe udgaven der kan hentes herfra.

Slet dine gamle php.dll og lib filer fra din apache/bin mappe (disse kan ved nyere installationer også være placeret direkte i php mappen, i så fald kan du springe dette punkt over). Kopien af din gamle php.ini skal du lige holde fast i, for der skal muligvis skrues på nogle indstillinger i den php.ini-production der medfølger PHP 5.3.0 der er specifkke for din gamle opsætning der ikke dækkes af denne opsætningsgennemgang.

Kopier php.ini-production filen ind hvor din gamle php.ini lå og omdøb filen til php.ini.

Følgende værdier skal ændres i php.ini filen (husk at checke om du evt. selv har sat yderligere tilpassede værdier i din gamle php.ini):

short_open_tag = On
zlib.output_compression = On
post_max_size = 16M
extension_dir = "C:\php\ext\"        (Sæt til stien for din php installation!)
mysql.default_port = 3306
mysql.default_host = localhost
mysqli.default_host = localhost

Følgende extensions er rare at have aktiveret pr. default i php.ini (og visse er påkrævet af wordpress og mysql):

extension=php_exif.dll
extension=php_gd2.dll
extension=php_gettext.dll
extension=php_imap.dll
extension=php_mbstring.dll
extension=php_ming.dll
extension=php_mssql.dll
extension=php_mysql.dll
extension=php_mysqli.dll
extension=php_openssl.dll
extension=php_pdo_mssql.dll
extension=php_pdo_mysql.dll
extension=php_soap.dll
extension=php_sockets.dll
extension=php_sqlite.dll
extension=php_xmlrpc.dll
extension=php_xsl.dll
extension=php_zip.dll

Start nu din apache daemon igen.

Placer en fil i htdocs mappen med følgende indhold (navngiv f.eks. phpinfo.php):

<?php phpinfo(); ?>

Åben nu filen i din browser, f.eks. fra adressen http://localhost/phpinfo.php, eller hvor du nu har placeret filen.

Check at følgende extensions er aktiverede: gd2, gettext, mysql, mysqli og mysqlnd.

Placer nu en testdb.php fil i din htdocs mappe med følgende indhold (jf. det login du har opdateret i mysql, eller som du iforvejen har anvendt i din opdaterede mysql installation):

<?php
$link = mysql_connect(
  'localhost:3306',
  'root',
  'myNewPw'
);
if (!$link) {
    die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully';
mysql_close($link);
?>

Check at http://localhost/testdb.php viser teksten “Connected successfully”.

Så skulle du være klar, og din wordpress kører nu med PHP 5.3.0 og en ny mysql password authentication metode.

2009.03.20

Internet Explorer 8 kompatibel

Kategori: Opsætning — Michael Schøler, Kl. 17:07:38

Det er da helt fornøjeligt at konstatere at vores blog og online fotoalbum er kompatibel med den seneste Internet Explorer 8 fra Microsoft. Sig endelig til hvis du opdager noget der ikke fungerer efter hensigten.

IE8 logo...

2008.12.17

WordPress site lagt om fra ISO-8859-1 (Latin 1) til UTF-8 enkodning

Kategori: Opsætning — Michael Schøler, Kl. 21:21:01

Pyyyyyyyyhha… Det var sq’ nervepirrende!

For en time siden påbegyndte jeg omlægning fra ISO-8859-1 til UTF-8 enkodning af denne hjemmeside. Og hvorfor er det så vigtigt? Jo, det er det fordi der dags dato også er blevet opgraderet WordPress version fra 2.6.5 til version 2.7. Den nye version 2.7 kunne ikke li’ ISO-8859-1 enkodningen der tidligere blev anvendt, hvilket dog kun gav sig udslag i en enkelt RSS-feed læser i administrationsinterfacet. Desuden er UTF-8 et større tegnsæt at anvende, og det var i sin tid en fejl der overhovedet blev sat ISO-8859-1 idrift på denne side.

ISO-8859-1 række...

Sådan skete omlægningen, der teoretisk set burde være helt ens for uanset din version af WordPress:

  1. Tag en backup af din wordpress database (jeg lavede en komplet export via phpmyadmin)
  2. Tag endnu en backup af din WordPress database (jeg anvendte her plugin’et WP-DB-BACKUP)
  3. Er du tilstrækkeligt paranoid og/eller stærk i troen hvad angår Murphy’s lov, så gentag punkt 1 og 2 til mere end en harddisk og/eller usb nøgle som jeg.
  4. Opret filen index.html i roden af din WordPress mappe – og skriv en besked heri om at hjemmesiden er midlertidigt nede pga. vedligeholdelse
  5. Ret filnavnet i WordPress mappen fra index.php til _index.php
  6. Start phpmyadmin eller tilsvarende administrativt DB interface
  7. Lav en export af samtlige wordpress tabeller, og sørg for ikke at gemme “CREATE TABLE” instruktioner til den resulterende SQL fil der kun må indeholde inserts efterfølgende
  8. Behold phpmyadmin/db-interface åbnet og åben så den eksporterede SQL fil i en UTF-8 kompatibel editor, f.eks. Notepad++
  9. Tving filen i UTF-8 tilstand, og verificer at special tegn såsom Æ ØÅ æøå ser korrekte ud
  10. Søg efter “blog_charset”, og ret værdien “iso-8859-1″ til “UTF-8″
  11. Gem SQL filen og luk Notepad++
  12. Vend tilbage til phpmyadmin/db-interface og tøm samtlige WordPress tabeller
  13. Gå lidt i panik – din blog er nu slettet helt, og du har selv gjort det!
  14. Ret collation for alle WordPress tabellerne, en efter en, fra “latin1_danish_ci” til “utf8_danish_ci”, både på kollone niveau og default collation
  15. Importer nu SQL filen til WordPress databasen (det er vigtigt filen ikke indeholder CREATE TABLE, da disse instruktioner sætter collation tilbage til iso.8859-1 !)
  16. Tilpas din wp-config.php så du er sikker på den indeholder linien “define (’DB_CHARSET’, ‘utf8′);”
  17. Slet index.html og omdøb _index.php til index.php
  18. Kryds fingre – det skulle være det!

En stor tak til Jakob Kruse for hjælpen iøvrigt!

2008.01.13

Undgå Fullrate frustrationer over at have egen server

Kategori: Opsætning — Michael Schøler, Kl. 17:19:16

Nu er jeg ved at være igennem alle de “problemer” som der umiddelbart er med at konfigurere og opsætte egen server på Fullrate’s netværk (håber jeg). Som sådanne kan Fullrate ikke klandres for noget, måske lige undtaget at de kunne have leveret ZyXEL routerne med en anden standardopsætning. Nuvel, det er fabriksindstillingerne de leverer, og man kan pille i alt, så det er faktisk slet ikke så skidt igen – bare man lige ved hvad man gør, eller kan få lidt hjælp til det, hvilket jeg håber dette indlæg på min blog vil kunne yde dig.

Det vigtigste punkt for at have egen server er at man kan kan se at det virker, også lokalt. Og det kan man ikke med standardopsætningen af routeren fordi loopback her er deaktiveret. Det skal derfor sættes op som noget af det første:

Start en kommandoprompt og skriv “telnet 192.168.1.1″ herefter anmodes du om dit Fullrate login-kodeord. For Fullrate kunder kan det oplyses at der ligger et ganske glimrende og meget mere detaljeret skriv om hele opsætningsproceduren i Fullrate forummet.

Skriv følgende når kodeordet er indtastet:

Fullrate> ip nat loopback on
Fullrate> sys edit autoexec.net

Nu skal autoexec.net filen redigeres med routerens indbyggede udgave af teksteditoren vi du netop har startet, dette gøres således:

Tast i for at indsætte en ny linie og derefter skrives nedenstående kommando
ip nat loopback on
Tast x for at gemme og afslutte editoren
Efter genstart af routeren vil NAT LOOPBACK være aktiveret.

Ovenstående er skrevet af Søren, Fullrate Support

Skriv så exit (og tryk enter) for at logge af routeren igen.

Således vil det fremstå i kommandoprompt-vinduet:

C:\>telnet 192.168.1.1
Password: **************
Copyright (c) 1994 – 2006 ZyXEL Communications Corp.
Fullrate> ip nat loopback on
Fullrate> sys edit autoexec.net
EDIT cmd: q(uit) x(save & exit) i(nsert after) d(elete) r(eplace) n(ext)
: ip nat loopback on
Fullrate> exit

Herefter kan kommandoprompt-vinduet lukkes.

Din router er nu opsat til at anvende loopback, og at genindføre loopback når routeren genstartes. Når der senere foretages et fysisk router reset eller en firmware-opgradering skal man muligvis igennem hele møllen en gang til.

Routeren er efter ovenstående procedure opsat med denne autoexec.net fil:

ip nat loopback on
sys errctl 0
sys trcl level 5
sys trcl type 1180
sys trcp cr 64 96
sys trcl sw off
sys trcp sw off
ip tcp mss 512
ip tcp limit 2
ip tcp irtt 65000
ip tcp window 2
ip tcp ceiling 6000
ip rip activate
ip rip merge on
ppp ipcp compress off
sys wdog sw on
ip icmp discovery enif0 off
bridge mode 1
sys quick enable
ether driver qroute 2

Næst herefter skal du port-forwarde alle de tjenester du ønsker din server skal varetage, f.eks. FTP, HTTP, remote desktop og lignende. Dette gøres nemt ved hjælp af det grafiske web-interface i routeren. En grundig vejledning findes på Fullrate’s support hjemmeside.

Det er ydermere essentielt at du har opsat et evt. domæne til at pege på din globale IP-adresse. Du kan se din globale IP adresse ved at tilgå f.eks. http://www.myip.dk.

Du skal nu konfigurere dit domænes ANAME record således det peger på denne IP adresse.

A record indstillinger:

Host: Angiv dit.domænenavn.dk
IP: Angiv din globale ip adresse
TTL: Sæt lavt indledningsvist så rettelser slår hurtigt igennem f.eks. til 3600 (1 time).

Når disse ændringer er trådt i kraft på DNS systemerne skal opslag med nslookup for dit domæne returnere din globale IP adresse:

C:\>nslookup dit.domænenavn.dk
Server: dns3.fullrate.dk
Address: 89.150.129.4

Non-authoritative answer:
Name: dit.domænenavn.dk
Address: din globale IP adresse

Det skulle vist være det.