Перейти к контенту
  • 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)
Ссылка на комментарий
Поделиться на других сайтах

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

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

Гость
Ответить на вопрос...

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

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

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

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

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

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

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

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