| 
				
					| yura3d_2 | Отправлено: 1 июля 2013 — 08:38   |  
					| 
 
  Junior Member
 
  
 Покинул форум
 Сообщений всего: 64
 Дата рег-ции: Апр. 2013
 Репутация: 2
 
 
 
 
  
 | Тут на форуме за последнее время прочитал несколько мнений, в которых люди высказывают свои опасения по поводу новых версий PHP и возможной неработоспособности ExBB на них. Хочу несколько развеять эти опасения и заявить, что при проектировании ядра ExBB FM 1.0 использовались максимально унифицированные между версиями языка средства и конструкции PHP, таким образом, ядро форума способно работать как на устаревшем PHP 4, так и с новыми версиями PHP 5.4 и грядущем PHP 6 (с минимальными изменениями). Если Ваш хостер уже перешёл на текущую стабильную ветку PHP 5.4.x, то ExBB с миниальными правками в ядре будет прекрасно работать и с ней. 
 На текущий момент единственная несовместимость ядра ExBB с PHP 5.4 выявлена в том, что в новой версии PHP запрещено явно использовать дескрипторы ресурсов (в ExBB это открытые файлы текстовой базы данных форумы) в качестве индекса массивов (общий массив дескрипторов открытых файлов применяется для противодействия блокировке и обнулению файлов в случае ошибочного завершения работы).
 
 Для решения проблемы совместимости откройте файл include/fm.class.php, находим строку:
 
 CODE:				$this->_FilePointers[$fp] = $fp; и замените её строкой:
 
 CODE:				$this->_FilePointers[(int) $fp] = $fp; В этом же файле найдите строку:
 
 CODE:				unset($arr,$this->_FilePointers[$fp]); и замените её строкой:
 
 CODE:				unset($arr,$this->_FilePointers[(int) $fp]); В этом же файле найдите строку:
 
 CODE:				unset($this->_FilePointers[$fp]); и замените её строкой:
 
 CODE:				unset($this->_FilePointers[(int) $fp]); На этом всё!
 |  
					|  |  |  
				
					| yura3d_2 | Отправлено: 1 июля 2013 — 16:04   |  
					| 
 
  Junior Member
 
  
 Покинул форум
 Сообщений всего: 64
 Дата рег-ции: Апр. 2013
 Репутация: 2
 
 
 
 
  
 | wasp пишет:yura3d_2, изменения можно сделать заранее? Не дожидаясь перехода хостера на новые версии? Другими словами: будет-ли изменённый код работоспособен на старых версиях? Да. Если хостер обновит версию PHP до 5.4 раньше, чем Вы сделаете эти изменения, форум будет выдавать предупреждения:
 
 CODE:Strict Standards: Resource ID#<NN> used as offset, casting to integer |  
					|  |  |  
				
					| alexx | Отправлено: 1 июля 2013 — 16:50   |  
					| 
 
  Advanced Member
 
  
 Покинул форум
 Сообщений всего: 495
 Дата рег-ции: Февр. 2010
 Откуда: Россия
 Репутация: 12
 
 
 
 
  
 | yura3d_2 Спасибо за предупреждение и решение, до конвертации хочется сохранить рабочим все, вот заметил:
 
 
 Цитата:В этом же файле найдите строку: CODE:unset($this->_FilePointers[$fp]); 
и замените её строкой:
 CODE:unset($this->_FilePointers[(int) $fp]);[/quote] 
 Первая строка встречается вот здесь еще ( 434 строка в файле), оставить или заменить?
 
 
 CODE:if ($mode != LOCK_SH) unset($this->_FilePointers[$fp]); |  
					|  |  |  
				
					| yura3d_2 | Отправлено: 1 июля 2013 — 20:19   |  
					| 
 
  Junior Member
 
  
 Покинул форум
 Сообщений всего: 64
 Дата рег-ции: Апр. 2013
 Репутация: 2
 
 
 
 
  
 | alexx пишет:Первая строка встречается вот здесь еще ( 434 строка в файле), оставить или заменить? Эта строка у Вас должна быть в закомментированном, и соответственно, неиспользуемом фрагменте кода. Поэтому её можно оставить как есть.
 
 
 BON пишет:с php 5.4 есть проблемы и с модом хранения статистики. Функции SQLte меняются. Нельзя пока ставить 5.4 Я пока говорю только про ядро, модов не касаюсь.
 
 
 BON пишет:yura3d_2, кстати, ещё был тест на php 5.4, не знаю поправили щас в нем это или это от двига зависит, но форум тупо не понимал кориллицу. Если в сообщении была кирилица то не добавлялись посты, если латиницей писать то нормал. Кому охото заморочиться, проверьте У меня работает
 |  
					|  |  |  
				
					| yura3d_2 | Отправлено: 23 июля 2013 — 22:46   |  
					| 
 
  Junior Member
 
  
 Покинул форум
 Сообщений всего: 64
 Дата рег-ции: Апр. 2013
 Репутация: 2
 
 
 
 
  
 | CAB Этот символ в вызовах функций - по сути синтаксическая ошибка. Просто старые версии PHP при встрече такового выводили либо нотисы, либо вообще никак на него не реагировали. Начиная с версии 5.4 синтаксический анализатор стал более строг ко многим мелочам и устаревшим конструкциям. Конечно, к 500-й ошибке это не должно приводить. Возможно, у Вас в файле php.ini просто отключён вывод ошибок на экран. Смотрите директиву display_errors, часто из-за отключённого вывода ошибок (а во многих репозиториях, в том числе Debian, он по-умолчанию как раз-таки отключён) вместо внятного сообщения об ошибках юзеры получают либо 500-ю ошибку, либо пустую страницу, что и вводит их в ступор.
 
 Ну а что с самим символом делать, думаю понятно - удалить.
 (Добавление)
 Кстати, строки, вызывающие проблему, относятся к моду Печать эффективности сжатия Gzip. В самом ядре ExBB подобной проблемы нет
 (Отредактировано автором: 23 июля 2013 — 22:47) |  
					|  |  |  
				
					| CAB | Отправлено: 24 июля 2013 — 12:41   |  
					| 
  
 
  Super Member
 
  
 Покинул форум
 Сообщений всего: 629
 Дата рег-ции: Февр. 2011
 Откуда: Москва
 Репутация: 30
 
 
 
 
  
 | yura3d_2 пишет:Спасибо за разъяснения.Ну а что с самим символом делать, думаю понятно - удалить. 
 yura3d_2 пишет:А что тогда делать с этим:В самом ядре ExBB подобной проблемы нет 1. В файле forums.php
 CODE:function viewing(&$statviewing, &$statforum) {
 2. В файле include\fm.class.php
 CODE:		function _Read2Write(&$fp,$filename,$newfile = TRUE) {
 CODE:		function _Write(&$fp,$arr) {
 CODE:		//function _Flock(&$fp,$filename,$mode = LOCK_SH) {
 3. В файле include\JsHttpRequest\JsHttpRequest.php
 CODE:            ob_start(array(&$this, "_obHandler"));
 CODE:            array_walk_recursive($result, array(&$this, '_toUtf8_callback'), $this->SCRIPT_ENCODING);
 CODE:    function _toUtf8_callback(&$v, $k, $fromEnc)
 CODE:                $data = preg_replace_callback('/%u([0-9A-F]{1,4})/si', array(&$this, '_ucs2EntitiesDecodeCallback'), $data);
 4. В файле include\lib.php
 CODE:function Print_Paginator($total,$get,$per,$links,&$first,$dots = FALSE) {
 CODE:Последнее от названного ранее мода.function validate_gzip_level( &$gzip_level )
 
 5. В файле include\vars.class.php
 CODE:        function Read_Vars(&$return,$array) {
 CODE:				return preg_replace("#&(\#[0-9]+;)#", "&$1", htmlspecialchars($var,ENT_QUOTES));
 CODE:		function _Boolean(&$array,$key) {
 6. В файле index.php
 CODE:function viewing(&$viewing) {
 CODE:function today(&$todayvisit) {
 7. В файле modules\mailer\_cron.php
 CODE:	function _Read2Write(&$fp, $file) {
 CODE:	function _Write(&$fp, $data) {
 8. В файле modules\mailer\Mailer.class.php
 CODE:								$sent = &$config['sent'];
 CODE:								$sent = &$config['through'];
 9. В файле modules\threadstop\frontindex.php
 CODE:function sort_array($array,$key,&$return_array){
 CODE:function _sort(&$array, $key, $state) {
 10. В файле postings.php
 CODE:function UpdateAutorsInfo(&$autors) {
 CODE:function UpdateOldList(&$topic,&$list) {
 CODE:function UpdateOldTopicFile(&$topic,&$postkey,$mode) {
 CODE:function UpdateAttaches(&$newtopic,&$attaches) {
 11. В файле search\search.php
 CODE:function get_query(&$wholeword,&$querymode,&$query_arr) {
 CODE:function get_results($inforum,$wholeword,$querymode,$query_arr,&$allres) {
 CODE:function boolean($inforum,&$query_arr,&$querymode,&$allres) {
 12. В файле topic.php
 CODE:function viewing(&$viewing) {
 
 yura3d_2 пишет:Я сначала так и подумал, но увидев количество таких "ошибок" засомневался.Этот символ в вызовах функций - по сути синтаксическая ошибка. |  
					|  |  |  
				
					| yura3d_2 | Отправлено: 24 июля 2013 — 14:36   |  
					| 
 
  Junior Member
 
  
 Покинул форум
 Сообщений всего: 64
 Дата рег-ции: Апр. 2013
 Репутация: 2
 
 
 
 
  
 | CAB пишет:Я сначала так и подумал, но увидев количество таких "ошибок" засомневался. Судя по Вашему сообщению, Вы никогда не слышали о механизме ссылок (references) в PHP. Поэтому для начала прочтите мануал http://php.net/manual/ru/languag...ences.whatdo.php
 В объявлении функций символ & не является ошибкой, он лишь указывает, что аргумент передаётся в функцию по ссылке, а не по значению. Такая передача производится в тех случаях, когда необходимо, чтобы функция могла работать с исходной переменной (объектом), а не с его локальной копией внутри функции (как при передаче по значению). В результате, все изменения, произведённые над ссылкой внутри функции, отражаются на значении исходной переменной за пределами функции (без необходимости использования выражения return, которое, к слову, может возвращать из функции лишь одно значение). Также передача аргументов по ссылке позволяет экономить ОЗУ и процессорное время.
 
 
 CAB пишет:CODE:ob_start(array(&$this, "_obHandler")); 
 CAB пишет:CODE:$sent = &$config['sent']; Ссылки также могут выступать элементами массива и операндами в выражениях, тут тоже ошибки нет. Итого, ни в одной из приведённых Вами строк нет ошибок.
 |  
					|  |  |  
				
					| CAB | Отправлено: 24 июля 2013 — 16:29   |  
					| 
  
 
  Super Member
 
  
 Покинул форум
 Сообщений всего: 629
 Дата рег-ции: Февр. 2011
 Откуда: Москва
 Репутация: 30
 
 
 
 
  
 | yura3d_2 пишет:Ещё раз большое спасибо за разъяснение и за ссылку на мануал. Я ж как раз и написал в своём первом посте, что не смог найти информацию по этому вопросу. Поисковики просто не понимали что я хочу ибо я сам не понимал что мне надо. Я правда и сейчас не понимаю, но хотя бы знаю как это называетсяСудя по Вашему сообщению, Вы никогда не слышали о механизме ссылок (references) в PHP.   Даже прочитав мануал, а также и другую найденную мной теперь информацию я не могу сообразить почему приведённая здесь http://exbb.info/community/topic...16457#1374616457 мной строка не правильная? По виду она вполне похожа на "правильные".
 
 yura3d_2, и ещё вопрос к первому сообщению темы.
 В файле search.php есть строка
 CODE:надо ли её изменить на							$fm->_FilePointers[$fp] = $fp;
 CODE:или в данном случае это не надо делать?							$fm->_FilePointers[(int) $fp] = $fp;
 |  
					|  |  |  |