| 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.phpCODE:function viewing(&$statviewing, &$statforum) { 
   
2. В файле include\fm.class.phpCODE:		function _Read2Write(&$fp,$filename,$newfile = TRUE) { 
  CODE:		function _Write(&$fp,$arr) { 
  CODE:		//function _Flock(&$fp,$filename,$mode = LOCK_SH) { 
   
3. В файле include\JsHttpRequest\JsHttpRequest.phpCODE:            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.phpCODE:function Print_Paginator($total,$get,$per,$links,&$first,$dots = FALSE) { 
  CODE:function validate_gzip_level( &$gzip_level ) 
  Последнее от названного ранее мода. 
 
5. В файле include\vars.class.phpCODE:        function Read_Vars(&$return,$array) { 
  CODE:				return preg_replace("#&(\#[0-9]+;)#", "&$1", htmlspecialchars($var,ENT_QUOTES)); 
  CODE:		function _Boolean(&$array,$key) { 
   
6. В файле index.phpCODE:function viewing(&$viewing) { 
  CODE:function today(&$todayvisit) { 
   
7. В файле modules\mailer\_cron.phpCODE:	function _Read2Write(&$fp, $file) { 
  CODE:	function _Write(&$fp, $data) { 
   
8. В файле modules\mailer\Mailer.class.phpCODE:								$sent = &$config['sent']; 
  CODE:								$sent = &$config['through']; 
   
9. В файле modules\threadstop\frontindex.phpCODE:function sort_array($array,$key,&$return_array){ 
  CODE:function _sort(&$array, $key, $state) { 
   
10. В файле postings.phpCODE:function UpdateAutorsInfo(&$autors) { 
  CODE:function UpdateOldList(&$topic,&$list) { 
  CODE:function UpdateOldTopicFile(&$topic,&$postkey,$mode) { 
  CODE:function UpdateAttaches(&$newtopic,&$attaches) { 
   
11. В файле search\search.phpCODE: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.phpCODE: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; 
  или в данном случае это не надо делать? | 
				 
				
					|   | 
					
						
						 
					 | 
				 
			 
            			
            			
            
					 |