PSLブログ

ヨシナシゴトヲツヅリマス

Drupal 6 on PHP4.3.9

DrupalなるCMSがあることを知り、動かしてみることにした。

  1. 日本語サイトがあるので(上記リンク参照)、そこへいきtgzファイルとJamailモジュールを落として解凍し、丸ごとサーバに上げる。
  2. ./sites/default/ディレクトリ以下のフォルダのパーミッションを777に、./sites/default/settings.phpパーミッションを666に。
  3. Drupal専用のデータベースをMySQL上に作成しておく。
  4. index.phpを実行、DBアカウントなどを指定してinit終了。
  5. ./sites/default/ディレクトリ以下のフォルダのパーミッションと、./sites/default/settings.phpパーミッション元に戻す

ff-20100428115016

で、この方法で、上記のページが表示されるようになったのだが、管理セクションに進もうとすると、真っ白な画面になってしまった。

error_logを調べたところ、

PHP Fatal error: Call to undefined function: array_intersect_key() in /*******/drupal/modules/update/update.compare.inc on line 695

などとなっていた。array_intersect_key()というのは、PHP5.1以降に追加された関数だということがわかった。Drupal本家のページに回避方法が書いてあった。

modules/update/update.compare.inc

<?php
    'info' => update_filter_project_info($file->info),
?>

<?php
    'info' => $file->info,
?>

に書き換えたところ解決した。

ついでに、

PHP Notice: Use of undefined constant PHP_INT_MAX - assumed 'PHP_INT_MAX' in /******/includes/database.inc on line 213

というエラーについても調べたところ、これはDrupalのバグらしく、PHP4.3.10/5.0.5以前のバージョンで起きるようだ(私のサーバは4.3.9)。これについても、./includes/database.incの冒頭に

<?php

function get_int_max()
{
     $max=0x7fff;
     $probe = 0x7fffffff;
     while ($max == ($probe>>16))
     {
         $max = $probe;
         $probe = ($probe << 16) + 0xffff;
     }
     return $max;
}

if (!defined('PHP_INT_MAX'))
{
     define ('PHP_INT_MAX', get_int_max());
}
    define ('PHP_INT_MIN', (int)(PHP_INT_MAX+1));
?>

のコードを追加することでエラーは出なくなった。私はPHPに詳しくないので、これでいいのか自信がない。

どこまでのことができるかはこれからいろいろと試してみる予定。