Перейти к контенту
  • 0

Не работает форма регистрации и т.д.


Вопрос

Возникла необходимость перенести форум (2.1.7) на новый сервер со следующими характеристиками:

 

MYSQL (5.5.35-0+wheezy1)
Версия PHP 5.4.4-14+deb7u8 (cgi-fcgi)

 

Все работает, кроме:

 

1) Формы регистрации (просто выдает пустую страницу без всяких ошибок). При этом существующие юзеры логинятся без проблем.

 

2) В админцентре висит вверху строчка: IPB Предупреждение [2] Creating default object from empty value (Строка: 50 файла /sources/lib/admin_functions.php)

 

Я связываю все это именно с новой версией ПХП и т.д. Может, и не так, но суть не в этом, а в том как все это исправить?

 

Помогите плиз! 

Ссылка на комментарий
Поделиться на других сайтах

Рекомендуемые сообщения

  • 0

2.х даже с пхп 5.3 задружить удается редко. А тут с 5.4 . У вас же CGI-версия, поставьте параллельно 5.2 специально для IPB

Ссылка на комментарий
Поделиться на других сайтах

  • 0

последняя версия php, с которой можно работать на 2.1.7 - 5.2.х

я пытался ставить на локалхосте на 5.3, переписываешь одну ненравящуюся конструкцию - получаешь ошибку дальше по ходу, получилось намного быстрее подключить старый репозитарий с 5.2 и поставить нужный php


ну или если чувствуете силу - ./configure и длинный, очень длинный список

потому что если потом окажется, что нужны ttf, то конфигуре снова

Ссылка на комментарий
Поделиться на других сайтах

  • 0

2) В админцентре висит вверху строчка: IPB Предупреждение [2] Creating default object from empty value (Строка: 50 файла /sources/lib/admin_functions.php)

На PHP 5.6 тоже такая фигня, хотя всё нормально работает.

 

 

последняя версия php, с которой можно работать на 2.1.7 - 5.2.х

...Соответственно, это не так :)

 

Задолбали эти гоп-обновления MYSQL и PHP, вечно норовящие быть несовместимыми с предыдущими версиями. Ради них плясать с обновлениями IPB, тянущей поезд модификаций и настроек, когда всё работает и надо изменить каких-то пару строк в коде - по меньшей мере неразумно. Вот бы создать поддержку совместимости старых IPB с новыми PHP/MYSQL, а? Спрос есть, можно даже платно.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

На PHP 5.6 тоже такая фигня, хотя всё нормально работает.

 

 

 

Задолбали эти гоп-обновления MYSQL и PHP, вечно норовящие быть несовместимыми с предыдущими версиями. Ради них плясать с обновлениями IPB, тянущей поезд модификаций и настроек, когда всё работает и надо изменить каких-то пару строк в коде - по меньшей мере неразумно. Вот бы создать поддержку совместимости старых IPB с новыми PHP/MYSQL, а? Спрос есть, можно даже платно.

 

 

подозреваю, что и многие моды придется переписывать

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Ясно, предложений нет. Учитывая подобную тенденциозность (даже со стороны IPB), единственный верный путь подсказан всё же Arharом. Если делаешь проект не на пару лет, надо городить свою выделенку - и ставить то, что работает. Господа, эпоха настала: пора демпить цены на VPS и выделенные серверы :boxing:

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Решение проблемы (вдруг ещё кому нужно):

 

В файле /sources/action_public/register.php ищем строчку:

$this->modules->register_class(&$this);

заменяем на:

$this->modules->register_class($this);

То есть удаляем символ "&".  Всё.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Не очень элегантно. Символ & означает, что используется не копия объекта, а ссылка на него. Т.е. если функция register_class меняет что-то в $this, то изменения передаются объекту, а если символ & убрать, то они будут потеряны. 
В php 5.4 передача ссылок была запрещена, они стали определяться в функции, а не в обращении к ней. 
Таким образом, если вы удаляете & из вызова функции, то надо его добавить в саму функцию.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Не очень элегантно. Символ & означает, что используется не копия объекта, а ссылка на него. Т.е. если функция register_class меняет что-то в $this, то изменения передаются объекту, а если символ & убрать, то они будут потеряны. 

В php 5.4 передача ссылок была запрещена, они стали определяться в функции, а не в обращении к ней. 

Таким образом, если вы удаляете & из вызова функции, то надо его добавить в саму функцию.

 

Склоняюсь к мнению, что там просто опечатка и "&" там в любом случае был лишний. Во всем листинге это единственный случай. И именно эта строка вызывает ошибку на этапе компиляции (поэтому никаких run-time ошибок не показывает).  По крайней мере у меня регистрация работает теперь.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

 

Не очень элегантно. Символ & означает, что используется не копия объекта, а ссылка на него. Т.е. если функция register_class меняет что-то в $this, то изменения передаются объекту, а если символ & убрать, то они будут потеряны. 

В php 5.4 передача ссылок была запрещена, они стали определяться в функции, а не в обращении к ней. 

Таким образом, если вы удаляете & из вызова функции, то надо его добавить в саму функцию.

 

Склоняюсь к мнению, что там просто опечатка и "&" там в любом случае был лишний. Во всем листинге это единственный случай. И именно эта строка вызывает ошибку на этапе компиляции (поэтому никаких run-time ошибок не показывает).  По крайней мере у меня регистрация работает теперь.

 

Склоняюсь к мнению, что вы просто не знаете php, вам выше написали про передачу переменной по ссылке

Ссылка на комментарий
Поделиться на других сайтах

  • 0

выше написали про передачу переменной по ссылке

А нужна ли была передача по ссылке?

 

 

Угадайте откуда код на скриншоте:

 

http://images.vfl.ru/ii/1463244110/050e4cc1/12658040.gif

По мере взросления версий код ipb становится сложней, но я не заметил уменьшения числа ляпов. Может разве в самой последней версии радикально переписали и исправили...

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Код из версии ниже 3. В тройке глобальные не использовались. А вообще стандартный код для dle даже текущей версии.

Что касается передачи ссылки, то я говорил чисто теоретически. Я лишь обратил внимание на то, что & это не просто мусор, а вполне конкретная конструкция использованная с определенными целями. 
Там подключаются различные модули, кому-то надо передавать данные наверх, кому-то нет. Надо смотреть конкретную конфигурацию, может здесь ссылка и не используется. А может быть это аукнется в самом неожиданном месте.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

может быть это аукнется в самом неожиданном месте

Регистрация либо осуществляется, либо нет. Вроде бы больше негде аукаться.

 

 

Код из 1.3.

Ошибка не простительная даже школьнику: сначала создаем ошибку, потом подавляем ее отображение; при этом код не выполняет вообще ничего.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

ну так-то да, есть и более короткий способ очистить буфер вывода перед отправкой картинки )

По поводу аукивания не так все просто. Я не знаю, какие данные конкретный модуль регистрации пытается выставить для текущего сеанса. Ему передают ссылку на ipsclass или что там у двойки. Он теоретически может и массив текущего пользователя набивать в этом экземпляре, а потом этот массив летит в базу в качестве нового мембера. Может какие-то поля не долетят, может какие-то флажки не встанут для последующей обработки.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

есть и более короткий способ

Я о заголовках. После flush'а они же не отправятся.

 

 

 

 

Может какие-то поля не долетят

Автор пишет, что регистрация происходит.

Подозреваю, что значок амперсанда в самом деле был лишним - в коде 1.х я их штук 5 удалил в свое время, и все они были абсолютно ненужными.

Но конечно же, предварительно следует посмотреть по коду, и по мере необходимости подправить что требуется. 

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Склоняюсь к мнению, что вы просто не знаете php, вам выше написали про передачу переменной по ссылке

 

 

 

 

Посмотрите соответствующий файл, и расскажите мне - нафига там ссылка.

 

  register.php

 

Функциональность конкретного блока кода я естественно проверил, на всякий случай.  То что я описал лишь решение проблемы не значит, что я тупо нашел строку и сделал изменения, не понимая - что я делаю. 

Изменено пользователем bitl
Ссылка на комментарий
Поделиться на других сайтах

  • 0

То что я описал лишь решение проблемы не значит, что я тупо нашел строку и сделал изменения, не понимая - что я делаю.

а выглядит именно так, поэтому и сделал такой вывод :)

в двойке при использовании модулей после какого-либо действия $this везде передается по ссылке. и это не выглядит как опечатка.

 

видимо, чтобы постоянно не отдавать разное кол-во переменных, не знаю задумки автора.

конкретно для данного примера, да, не нужна там, по поводу всех подобных моментов в двойке сказать не могу.

 

Ссылка на комментарий
Поделиться на других сайтах

  • 0

 

видимо, чтобы постоянно не отдавать разное кол-во переменных, не знаю задумки автора.

конкретно для данного примера, да, не нужна там, по поводу всех подобных моментов в двойке сказать не могу.

 

 

 

В 2.1.4 (коий у меня стоит, с заплатками и своими доработками уж 9 лет, посему обновлять не резон) это единственный случай, нигде больше не встречается. Поэтому на современном php  все работает, кроме регистрации и восстановления пароля. 

 

Я сам сначал полез гуглить, когда обнаружил проблему (сервер недавно переустановил), оказалось. что многие люди искали решение, и некоторые из-за этого прикручивали более старую версию php на сервере. Так что я пофиксив проблему решил отписаться в этой, вероятно уже не актуальной теме. Вдруг ещё кому-то будет надо. 

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Не поверите, но это все еще актуально. )) Пошел проверять предложенный способ.

Изменено пользователем TIER_FOREVER
Ссылка на комментарий
Поделиться на других сайтах

  • 0

Решение проблемы (вдруг ещё кому нужно):

 

В файле /sources/action_public/register.php ищем строчку:



$this->modules->register_class(&$this);

заменяем на:



$this->modules->register_class($this);

То есть удаляем символ "&".  Всё.

 

Дружище, ты гений! Все заработало! ))) 

 

А может подскажешь еще заодно как избавиться вот от этой раздражающей надписи:

IPB Предупреждение [2] Creating default object from empty value (Строка: 50 файла /sources/lib/admin_functions.php)
Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить на вопрос...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.