Переход на PHP 5.4 и Fatal error: Call-time pass-by-reference has been removed in

Ошибка подобного вида может появится на сайте, если хостинг сам обновит PHP до версии 5.4. Особенно часто такие обновления «без спросу» делают бесплатные хостинги. На платных чаще всего самому пользователю предоставляется выбор версии PHP.

Как бы то ни было — вы сами обновили версию или это сделали без вашего ведома — некоторый несовместимый PHP-код нуждается в доработке.

Что требует PHP 5.4

Теперь указание знака амперсанда (&) перед переменной при вызове функции вызывает фатальную ошибку и, как следствие, остановку выполнения дальнейшего кода. В PHP 5.3 это вызывало лишь предупреждение, а сейчас стало все строже. Как вы наверное помните, амперсанд указывает на передачу аргумента по ссылке. Такая передача, естественно, возможна и в новой версии PHP, но указывать знак амперсанда теперь нужно только в определении функции. То есть, например, здесь все оставляем как было:

1
2
3
function userFunc(&$arg) {
  return $arg++;
}

А вот здесь амперсанд убираем:

1
userFunc(&$arg);

Должно быть только так:

1
userfunc($arg);

Очевидно, что это не все ограничения новой версии. Это лишь то, с чем я лично столкнулся.

Осторожнее с предупреждениями PHP!

Можно сделать вывод что предупреждения, которые выдает интерпретатор PHP, все же надо учитывать. Кто знает, что вызовет фатальную ошибку в следующей версии? Например в PHP 5.4 статический вызов функции класса, если в определении данной функции не указано слово static, вызывает предупреждение. Пример:

1
2
3
4
5
6
class userClass {
  public function userFunc(&$arg) {
    return $arg++;
  }
}
userClass::userFunc($arg);

Лучше доработать такой код сейчас, не дожидаясь фатальных ошибок в будущем. Добавляем ключевое слово static:

1
2
3
4
5
6
class userClass {
  public static function userFunc(&$arg) {
    return $arg++;
  }
}
userClass::userFunc($arg);

Так гораздо надежнее.

Сборка Ubuntu для Windows-игр и программ

Для Windows, что и говорить, существует масса программ и игр у которых нет альтернатив под другие операционные системы. Многих именно это останавливает от перехода на свободную ОС Linux. Еще одна причина — более высокая сложность освоения данного семейства систем. Что говорить, если уж с Windows у многих возникают трудности, где казалось бы все сделано «по умолчанию», то в Linux и подавно.

Вторая причина, правда, становится все менее заметной. Время идет и многочисленные дистрибутивы Linux, усилиями разработчиков, становятся все более дружественными к неосведомленным пользователям. Правда и сейчас нужно знать некоторые нюансы, чтобы не застопорится в самом начале. Но проще стало однозначно.

Много усилий было приложено чтобы победить и первую упомянутую проблему — пропасть между Linux и популярным программным обеспечением, ориентированным как сложилось, на Windows.

Всвязи с этим, хочется поделится своим опытом установки весьма дружественной на сегодняшний день альтернативной Linux-системы.

Чуть предыстории. Сначала попробовал очень известную в сети сборку [x64]Ubuntu Mint Mate rel21.6 для дома и для игр. Но по каким-то причинам она отказалась запускаться на моем компьютере (конфигурация, для интереса, внизу поста). Тем не менее, так как автор данной сборки предоставляет и отдельный, тщательно настроенный, префикс Wine (то есть специальной программы, транслирующей вызовы Windows-системы в вызовы Linux), решено было его и использовать. Ссылка на этот префикс приведена на соответствующем шаге ниже.

Ну а теперь приступим, постараюсь описать более менее подробно и со всеми ссылками. Подразумевается что на данном компьютере была установлена Windows или доступен другой компьютер с Windows, так как описана подготовка дистрибутива в этой ОС.

Шаг 1: Скачиваем Ubuntu

Я выбрал 32-битную версию Ubuntu 13.10 desktop (с 64-битной все тоже самое).

Шаг 2: Создаем загрузочную флешку

Сначала скачиваем Unetbootin. Эта программа предназначена для создания загрузочной флешки Ubuntu (а так же других ОС) из под Windows или Linux — приложение кроссплатформенное. Форматируем флешку с параметрами по умолчанию. Запускаем Unetbootin и выбрав скачанный образ начинаем процесс создания установочной флешки.

ubuntu-for-windows-games-p1

Шаг 3: Загрузка компьютера с flash-накопителя, установка Ubuntu

Вставляем в компьютер флешку (или не вынимаем). После включения сразу идем в BIOS (удерживая Del или F1, или что там у вас) и выбираем загрузку с данного накопителя. Установку подробно описывать не буду — она не намного сложнее установки Windows. Разве что, если вы хотите сохранить Windows, вручную придется распределить разделы под систему Ubuntu и файл подкачки (swap).

Но есть важный момент, касающийся будущего Wine — имя пользователя при установке системы должно быть: user. Почему именно так? Дело в том, что префикс Wine настроен под пользователя с таким именем. И если не хочется потом править реестр и тому подобное, то лучше сделать так.

Шаг 4: Устанавливаем драйвера видеокарты

Когда я устанавливал систему у меня было только интегрированное видео Intel HD Graphics 2500 (встроено в процессор на ядре Ivi Bridge). И установка драйверов не понадобилась — все работало из коробки. Однако потом я добавил видеокарту Nvidia Geforce GT 630. И для установки мне потребовалось выполнить несколько команд в терминале. Для запуска терминала (один из способов) нажимаем кнопку Win на клавиатуре и вводим в поиске: терминал. Запускаем. Интернет должен быть включен в данный момент. Копируем строки по очереди прямо отсюда. После каждой вставки нажимаем Enter. Для вставки в терминал сочетание клавиш Ctrl+v не работает, поэтому вставляем с помощью Ctrl+Shift+v.

sudo apt-get update
sudo apt-get install nvidia-319-updates nvidia-settings-319-updates
sudo nvidia-xconfig

Перезагружаемся и проверяем драйвер видеокарты с помощью следующей команды в терминале:

lspci -k | grep VGA -A2

Если все нормально, то увидим в ответе на команду упоминание своей видеокарты.

Шаг 5: Установка Wine

Выполнение приведенных ниже команд приведет к установке Wine 1.6, который полностью совместим с настроенным префиксом. Хотя уже есть версии Wine 1.7.x — их я пока не пробовал. Итак вводим в терминале следующее:

sudo add-apt-repository ppa:ubuntu-wine/ppa
sudo apt-get update
sudo apt-get install wine

Шаг 6: Замена префикса Wine на специально адаптированный для запуска многих программ и игр

Перед этим шагом желательно сделать резервную копию префикса Wine. Для этого идем в домашнюю папку в диспетчере файлов и нажимаем Ctrl+h, что позволяет увидеть скрытые папки. Теперь копируем папку .wine в какое нибудь место. Все — резервная копия сделана.

Теперь скачиваем подготовленный префикс. Ссылка на него есть и с вышеупомянутой статьи о дистрибутиве [x64]Ubuntu Mint Mate rel21.6 для дома и для игр. Распаковываем скачанный архив куда нибудь. Теперь опять идем в домашнюю папку, затем в .wine/drive_c/. Удаляем там все, кроме папки users. Затем из распакованного архива с префиксом из вложенной папки rel21.5-wine-BASE копируем все (с заменой файлов) в каталог .wine в домашней папке. После замены файлов префикса нужно в терминале выполнить команду:

wineboot --update

После этого можно пробовать устанавливать любые Windows-программы и игры. Для этого кликаем правой кнопкой мыши на установочном exe-файле и выбираем «запустить с помощью wine». После установки запускаем программы как в Windows. Очень многое заработает сразу, без каких либо дополнительных действий. Например, я сходу установил демо версию Euro Track Simulator 2 для Windows — и все заработало так же как в родной ОС (потеряв в fps совсем немного — все таки это OpenGL-игра). С Direct3D-играми потери производительности могут быть больше, из-за трансляции инструкций в OpenGL.

К слову, то что работает без проблем можно найти на сайте www.winehq.org. Просто введите в поиске интересующее вас приложение. Если в описании к нему написано Platinum или Gold — значит должно работать нормально.

Конфигурация компьютера, на который производилась установка системы

  • Корпус Winsis WI-05  (БП Winsis WMT-300TFX)
  • Материнская плата ASRock H61MV-ITX
  • Процессор INTEL Celeron G1620 Ivy Bridge
  • Вентилятор ZALMAN CNPS80F
  • Вентилятор для корпуса ZALMAN ZM-F1 FDB (использовался с некоторой переделкой, для замены слишком шумного вентилятора в БП)
  • Модуль памяти Patriot DDR3 2GB PC3-10600 1333MHz
  • Беспроводной USB адаптер TP-LINK TL-WN721N
  • Видеокарта PCI-E Asus GeForce GT630-SL-1GD3-L 1024MB 64bit GDDR3 (при стандартной компоновке эта видеокарта в указанный корпус не влезет — о том, как удалось ее установить, читайте в посте про HTPC)