Familien Schøler’s blog

Lidt af hvert fra hverdagen hos Michael, Kamilla, Marie og Katrine Schøler

WordPress 2.9

Så er der ganske begivenhedsløst opgraderet til wordpress v2.9.

Opdatering 12-01-2010: Og nu er der opgraderet til v2.9.1.

WordPress 2.8 og opgradering fra PHP 5.2.1 til 5.3.0

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.

Internet Explorer 8 kompatibel

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...

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

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!