[РЕШЕНО] D7 ругается на /includes/bootstrap.inc on line 283

Главные вкладки

Аватар пользователя vkapas vkapas 27 сентября 2011 в 17:33

Распаковал на хостинг свежий Drupal 7.8.
Открываю сайт — вижу пустой экран. Добавляю в index.php

error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

// $Id: index.php,v 1.94 2007/12/26...

и вместо пустого экрана вижу ошибку:
Parse error: parse error, unexpected T_CLASS in /home/mainsite/public_html/site/includes/bootstrap.inc on line 283



Нашёл 2 возможные причины ошибки:

1) проблема в PHP 4.x. Нужно использовать PHP 5.2.5 и выше. На сервере PHP 5.2.16
2) добавить в .htaccess вот это:

SetEnv REGISTER_GLOBALS 0
SetEnv ZEND_OPTIMIZER 1
SetEnv MAGIC_QUOTES 1
SetEnv PHP_VER 5

Добавил, ничего не изменилось.



В то же время установка Drupal 6.22 запускается нормально.
На этом же хостинге есть другой сайт на D6, он работает без проблем.



UPD: оказался виновен хостер (предоставил PHP4, вместо обещанной пятой версии), подробности см. в комментарии ниже.

Комментарии

Аватар пользователя vkapas vkapas 27 сентября 2011 в 17:47

К слову, файл bootstrap.inc начиная с 283 строки выглядит так:

abstract class DrupalCacheArray implements ArrayAccess {

  /**
   * A cid to pass to cache_set() and cache_get().
   */

  private $cid;

  /**
   * A bin to pass to cache_set() and cache_get().
   */

  private $bin;

  /**
   * An array of keys to add to the cache at the end of the request.
   */

  protected $keysToPersist = array();

  /**
   * Storage for the data itself.
   */

  protected $storage = array();

  /**
   * Constructor.
   *
   * param $cid
   *   The cid for the array being cached.
   * param $bin
   *   The bin to cache the array.
   */

  public function __construct($cid, $bin) {
    $this->cid = $cid;
    $this->bin = $bin;

    if ($cached = cache_get($this->cid, $this->bin)) {
     $this->storage = $cached->data;
    }
  }

  public function offsetExists($offset) {
    return $this->offsetGet($offset) !== NULL;
  }

  public function offsetGet($offset) {
    if (isset($this->storage[$offset]) || array_key_exists($offset, $this->storage)) {
      return $this->storage[$offset];
    }
    else {
      return $this->resolveCacheMiss($offset);
    }
  }

  public function offsetSet($offset, $value) {
    $this->storage[$offset] = $value;
  }

  public function offsetUnset($offset) {
    unset($this->storage[$offset]);
  }

Аватар пользователя vkapas vkapas 29 сентября 2011 в 12:14

В общем, оказался виновен хостер.

Выяснил случайно, когда в отчёте о состоянии (после установки D6) увидел, что используется PHP 4.x, не смотря на то, что хостером заявлен PHP 5.x, и другой сайт на том же хостинге и аккаунте (!) вполне себе работает с PHP 5.x.

(если что, информацию о текущей версии PHP и много других деталей можно посмотреть на странице /admin/reports/status/php)

Написал в саппорт, поправили в течение дня.