Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Reply to this topicStart new topic
> Проблемы с WordPress (wp-includes/gettext.php), Warning: unpack() [function.unpack]: Type V: not enough input, need 4
xinx
сообщение Feb 9 2008, 13:27
Сообщение #1


Advanced Member
***

Группа: Members
Сообщений: 51
Регистрация: 2-February 05
Пользователь №: 86



Всем привет! Помогите разобраться пожалуйста кто в курсе.

При установке WordPress 2.3.1 или 2.3.3 происходит превышение времени исполнения и РНР выдает сообщение:

Код
Warning: unpack() [function.unpack]: Type V: not enough input, need 4, have 0 in /www/wp-includes/gettext.php on line 85

Warning: unpack() [function.unpack]: Type V: not enough input, need 4, have 0 in /www/wp-includes/gettext.php on line 85

Fatal error: Maximum execution time of 30 seconds exceeded in /www/wp-includes/gettext.php on line 158


проблема именно на ht-systems.ru возникает: ссылка 1, ссылка 2 (мой топик).

С другой стороны, у меня на ht-systems.ru работает еще несколько WordPress разных версий вполне нормально, в т.ч. и 2.3.1 :/

В общем я в растерянности. Что это ВООБЩЕ такое это самое "Type V: not enough input, need 4, have 0"?

Что делать?
Go to the top of the page
 
+Quote Post
Антон Нехороших
сообщение Feb 9 2008, 20:55
Сообщение #2


Administrator
***

Группа: Admin
Сообщений: 649
Регистрация: 11-August 04
Пользователь №: 1



А брать нужно родной вордпресс, а в натройках вырубить ru_RU и написать en_US.
Go to the top of the page
 
+Quote Post
SLam
сообщение May 25 2008, 10:31
Сообщение #3


Advanced Member
***

Группа: Members
Сообщений: 52
Регистрация: 5-January 05
Из: Казань
Пользователь №: 62



Столкнулся с той же проблемой.

Все-таки это не баг скрипта.

Я скачал свежий русский вордпресс с официального сайта.

Предложение пользоваться английской версией - не решение.


--------------------
Go to the top of the page
 
+Quote Post
Бакулин Илья
сообщение May 27 2008, 17:14
Сообщение #4


Member
**

Группа: Admin
Сообщений: 12
Регистрация: 13-March 08
Пользователь №: 1.963



Цитата(SLam @ May 25 2008, 11:31) [snapback]4339[/snapback]
Столкнулся с той же проблемой.

Все-таки это не баг скрипта.

Я скачал свежий русский вордпресс с официального сайта.

Предложение пользоваться английской версией - не решение.


Ну вот я вчера поставил скачанную с офсайта русскую версию WP... Ошибок при установке не возникло.... Точно последнюю брали??
Go to the top of the page
 
+Quote Post
SLam
сообщение May 28 2008, 00:56
Сообщение #5


Advanced Member
***

Группа: Members
Сообщений: 52
Регистрация: 5-January 05
Из: Казань
Пользователь №: 62



точно последняя.
Версия 2.5.1
ссылка: http://ru.wordpress.org/wordpress-2.5.1-ru_RU.zip


--------------------
Go to the top of the page
 
+Quote Post
Бакулин Илья
сообщение May 30 2008, 20:15
Сообщение #6


Member
**

Группа: Admin
Сообщений: 12
Регистрация: 13-March 08
Пользователь №: 1.963



Сегодня обновил в Установщике версию WP до 2.5.1 и добавил возможность выбора русского при установке. Попробуйте, что ли, из Установщика :-) Даже интересно.
Go to the top of the page
 
+Quote Post
SLam
сообщение May 30 2008, 23:20
Сообщение #7


Advanced Member
***

Группа: Members
Сообщений: 52
Регистрация: 5-January 05
Из: Казань
Пользователь №: 62



Поставил из установщика!

Вот результат:
Warning: unpack() [function.unpack]: Type V: not enough input, need 4, have 0 in /storage/home/slam6en9/chemedia/blog/wp-includes/gettext.php on line 91

Warning: unpack() [function.unpack]: Type V: not enough input, need 4, have 0 in /storage/home/slam6en9/chemedia/blog/wp-includes/gettext.php on line 91

Fatal error: Maximum execution time of 30 seconds exceeded in /storage/home/slam6en9/chemedia/blog/wp-includes/streams.php on line 66


--------------------
Go to the top of the page
 
+Quote Post
Бакулин Илья
сообщение Jun 1 2008, 10:23
Сообщение #8


Member
**

Группа: Admin
Сообщений: 12
Регистрация: 13-March 08
Пользователь №: 1.963



Цитата(SLam @ May 31 2008, 00:20) [snapback]4345[/snapback]
Поставил из установщика!

Вот результат:
Warning: unpack() [function.unpack]: Type V: not enough input, need 4, have 0 in /storage/home/slam6en9/chemedia/blog/wp-includes/gettext.php on line 91

Warning: unpack() [function.unpack]: Type V: not enough input, need 4, have 0 in /storage/home/slam6en9/chemedia/blog/wp-includes/gettext.php on line 91

Fatal error: Maximum execution time of 30 seconds exceeded in /storage/home/slam6en9/chemedia/blog/wp-includes/streams.php on line 66


Вот и славно :-) Теперь напишите, пожалуйста, письмо в службу техподдержки, укажите в письме, в какую папку и на каком домене попытаться произвести установку и какую БД можно для этого использовать. Укажите в теле письма ссылку на этот топик и напишите, что письмо для Ильи. Попробую разобраться, почему падает.

Цитата
В общем я в растерянности. Что это ВООБЩЕ такое это самое "Type V: not enough input, need 4, have 0"?

unpack - функция для раскодирования бинарных данных. Поскольку одна и та же последовательность байт может быть преобразована в различные типы данных, для однозначного декодирования нужно указание формата данных. Из мануала по pack format codes имеем:
Цитата
V - unsigned long (always 32 bit, little endian byte order)

Соответственно, 32 бита = 4 байта. Это как раз то количество байт, которое в нашем случае unpack очень хочет получить и не получает. А не получает, видимо, потому, что не удаётся считать из файла - это уже если посмотреть на gettext.php:91. Вот почему не удаётся считать - это и попробуем понять, если скажете, с какими начальными условиями проводить эксперимент smile.gif
Причина редактирования: уточнение по письму в ТП
Go to the top of the page
 
+Quote Post
Бакулин Илья
сообщение Jun 3 2008, 17:28
Сообщение #9


Member
**

Группа: Admin
Сообщений: 12
Регистрация: 13-March 08
Пользователь №: 1.963



Итак, данные были предоставлены SLam-ом при личном общении через службу техподдержки, WordPress был установлен на его аккаунте с указанной им БД.
Путём размещения некоторой отладочной информации в скриптах WordPress было выяснено место, где именно возникает проблема. Если кому интересно, gettext.php:91 к этому на самом деле отношения не имеет. Туда уже передаётся совершенно астрономическое число для чтения :-) Проблема на самом деле в кривоватой библиотеке streams.php. Там используется функция substr() для выделения данных из предварительно прочитанного в память MO-файла. Проблема в том, что разработчики WordPress не учли, что эта функция всё-таки предназначена для строк, а не для блобов :-) И никто не обещал, что она , во-первых, будет binary-safe, во-вторых, что будет работать с данными достаточно быстро.
В результате был сделан патч, который решает проблему с операциями с бинарными данными в WordPress, что устраняет ошибки в работе WP на нашем хостинге и заодно повышает скорость работы.
В близжайшее время в Установщике приложений появится возможность поставить WP вместе с корректирующим патчем.
Соответствующий багрепорт направлен к разработчикам WordPress.

Сам патч ниже.

[codebox]--- wp-includes/streams.php.orig 2008-02-05 09:47:27.000000000 +0300
+++ wp-includes/streams.php 2008-06-03 18:40:18.000000000 +0400
@@ -54,6 +54,8 @@
class StringReader {
var $_pos;
var $_str;
+ var $mem_fd = 0;
+ var $mem_fd_clen;

function StringReader($str='') {
$this->_str = $str;
@@ -61,18 +63,27 @@
}

function read($bytes) {
- $data = substr($this->_str, $this->_pos, $bytes);
+ if($bytes<=0)return 0;
+ if(!$this->mem_fd)
+ {
+ $this->mem_fd = fopen("php://memory", 'r+');
+ fputs($this->mem_fd, $this->_str);
+ $this->mem_fd_clen = ftell($this->mem_fd);
+ fseek($this->mem_fd, 0);
+ }
+ $data = fread($this->mem_fd, $bytes);
$this->_pos += $bytes;
- if (strlen($this->_str)<$this->_pos)
- $this->_pos = strlen($this->_str);
+ if ($this->mem_fd_clen<$this->_pos)
+ $this->_pos = $this->mem_fd_clen;

return $data;
}

function seekto($pos) {
$this->_pos = $pos;
- if (strlen($this->_str)<$this->_pos)
- $this->_pos = strlen($this->_str);
+ if ($this->mem_fd_clen<$this->_pos)
+ $this->_pos = $this->mem_fd_clen;
+ fseek($this->mem_fd, $this->_pos);
return $this->_pos;
}
[/codebox]
Причина редактирования: добавлен патч
Go to the top of the page
 
+Quote Post
SLam
сообщение Jun 4 2008, 02:46
Сообщение #10


Advanced Member
***

Группа: Members
Сообщений: 52
Регистрация: 5-January 05
Из: Казань
Пользователь №: 62



битый архив)


--------------------
Go to the top of the page
 
+Quote Post
Бакулин Илья
сообщение Jun 4 2008, 17:25
Сообщение #11


Member
**

Группа: Admin
Сообщений: 12
Регистрация: 13-March 08
Пользователь №: 1.963



Цитата(SLam @ Jun 4 2008, 03:46) [snapback]4351[/snapback]
битый архив)


Действительно :-(
Отредактировал пост. Патч написал прямо в теле сообщения. Заодно его стало возможным скачать, не регистрируясь на форуме.
Go to the top of the page
 
+Quote Post
Сергей help
сообщение Jun 10 2008, 18:44
Сообщение #12


Newbie
*

Группа: Members
Сообщений: 4
Регистрация: 10-June 08
Пользователь №: 2.023



Цитата(Бакулин Илья @ Jun 3 2008, 17:28) [snapback]4350[/snapback]
Итак, данные были предоставлены SLam-ом при личном общении через службу техподдержки, WordPress был установлен на его аккаунте с указанной им БД.
Путём размещения некоторой отладочной информации в скриптах WordPress было выяснено место, где именно возникает проблема. Если кому интересно, gettext.php:91 к этому на самом деле отношения не имеет. Туда уже передаётся совершенно астрономическое число для чтения :-) Проблема на самом деле в кривоватой библиотеке streams.php. Там используется функция substr() для выделения данных из предварительно прочитанного в память MO-файла. Проблема в том, что разработчики WordPress не учли, что эта функция всё-таки предназначена для строк, а не для блобов :-) И никто не обещал, что она , во-первых, будет binary-safe, во-вторых, что будет работать с данными достаточно быстро.
В результате был сделан патч, который решает проблему с операциями с бинарными данными в WordPress, что устраняет ошибки в работе WP на нашем хостинге и заодно повышает скорость работы.
В близжайшее время в Установщике приложений появится возможность поставить WP вместе с корректирующим патчем.
Соответствующий багрепорт направлен к разработчикам WordPress.

Сам патч ниже.

[codebox]--- wp-includes/streams.php.orig 2008-02-05 09:47:27.000000000 +0300
+++ wp-includes/streams.php 2008-06-03 18:40:18.000000000 +0400
@@ -54,6 +54,8 @@
class StringReader {
var $_pos;
var $_str;
+ var $mem_fd = 0;
+ var $mem_fd_clen;

function StringReader($str='') {
$this->_str = $str;
@@ -61,18 +63,27 @@
}

function read($bytes) {
- $data = substr($this->_str, $this->_pos, $bytes);
+ if($bytes<=0)return 0;
+ if(!$this->mem_fd)
+ {
+ $this->mem_fd = fopen("php://memory", 'r+');
+ fputs($this->mem_fd, $this->_str);
+ $this->mem_fd_clen = ftell($this->mem_fd);
+ fseek($this->mem_fd, 0);
+ }
+ $data = fread($this->mem_fd, $bytes);
$this->_pos += $bytes;
- if (strlen($this->_str)<$this->_pos)
- $this->_pos = strlen($this->_str);
+ if ($this->mem_fd_clen<$this->_pos)
+ $this->_pos = $this->mem_fd_clen;

return $data;
}

function seekto($pos) {
$this->_pos = $pos;
- if (strlen($this->_str)<$this->_pos)
- $this->_pos = strlen($this->_str);
+ if ($this->mem_fd_clen<$this->_pos)
+ $this->_pos = $this->mem_fd_clen;
+ fseek($this->mem_fd, $this->_pos);
return $this->_pos;
}
[/codebox]



скажите пожалуйста, как правильно поправить этот файл streams.php, не совсем понимаю +- что добавить что убрать, может есть уже нормально собранный файл где можно скачать, а то сам код вижу но поправить правильно не получается. Большое спасибо.
Go to the top of the page
 
+Quote Post
DarkDragon
сообщение Jun 11 2008, 22:24
Сообщение #13


Advanced Member
***

Группа: Members
Сообщений: 399
Регистрация: 27-January 05
Пользователь №: 80



Сохранить код как thatpatch.patch в каталоге wordpress
Залогиниться через SSH
Зайти в каталог wordpress
Сказать
patch < ./thatpatch.patch


--------------------
Тёмный... Маг... Дракон...
Go to the top of the page
 
+Quote Post
Сергей help
сообщение Jun 13 2008, 10:58
Сообщение #14


Newbie
*

Группа: Members
Сообщений: 4
Регистрация: 10-June 08
Пользователь №: 2.023



Цитата(DarkDragon @ Jun 11 2008, 22:24) [snapback]4362[/snapback]
Сохранить код как thatpatch.patch в каталоге wordpress
Залогиниться через SSH
Зайти в каталог wordpress
Сказать
patch < ./thatpatch.patch


а проще нельзя как-то это сделать, нельзя ли просто заменить нужный мне файл и все? а то подключиться через SSH, я могу тока через CPanel. не подскажите как быть? бо ошибка часто такая вылазит.
Go to the top of the page
 
+Quote Post
Бакулин Илья
сообщение Jun 15 2008, 13:52
Сообщение #15


Member
**

Группа: Admin
Сообщений: 12
Регистрация: 13-March 08
Пользователь №: 1.963



Цитата(Сергей help @ Jun 13 2008, 11:58) [snapback]4364[/snapback]
а проще нельзя как-то это сделать, нельзя ли просто заменить нужный мне файл и все? а то подключиться через SSH, я могу тока через CPanel. не подскажите как быть? бо ошибка часто такая вылазит.


Сообщите, какую именно версию WordPress Вы используете? Дело в том, что патч накладывается конкретно на изменяемый участок кода, гарантируя неизменность остальных; если же заменять целиком файл, не факт, что его содержимое будет соответствовать нужной версии.
Go to the top of the page
 
+Quote Post
Сергей help
сообщение Jun 16 2008, 10:51
Сообщение #16


Newbie
*

Группа: Members
Сообщений: 4
Регистрация: 10-June 08
Пользователь №: 2.023



Цитата(Бакулин Илья @ Jun 15 2008, 13:52) [snapback]4365[/snapback]
Сообщите, какую именно версию WordPress Вы используете? Дело в том, что патч накладывается конкретно на изменяемый участок кода, гарантируя неизменность остальных; если же заменять целиком файл, не факт, что его содержимое будет соответствовать нужной версии.


версия WordPress 2.5.1.
Go to the top of the page
 
+Quote Post
DarkDragon
сообщение Jun 23 2008, 03:11
Сообщение #17


Advanced Member
***

Группа: Members
Сообщений: 399
Регистрация: 27-January 05
Пользователь №: 80



Цитата(Сергей help @ Jun 13 2008, 11:58) [snapback]4364[/snapback]
а проще нельзя как-то это сделать, нельзя ли просто заменить нужный мне файл и все? а то подключиться через SSH, я могу тока через CPanel. не подскажите как быть? бо ошибка часто такая вылазит.


Вообще-то это был самый простой способ.
Если не можете зайти через SSH (а это вообще бывает??) - скачайте нужный файл к себе на комп по FTP, пропатчите на локальном компьютере и закачайте пропатченный файл обратно.


--------------------
Тёмный... Маг... Дракон...
Go to the top of the page
 
+Quote Post
Сергей help
сообщение Jun 23 2008, 13:36
Сообщение #18


Newbie
*

Группа: Members
Сообщений: 4
Регистрация: 10-June 08
Пользователь №: 2.023



Цитата(DarkDragon @ Jun 23 2008, 03:11) [snapback]4376[/snapback]
Вообще-то это был самый простой способ.
Если не можете зайти через SSH (а это вообще бывает??) - скачайте нужный файл к себе на комп по FTP, пропатчите на локальном компьютере и закачайте пропатченный файл обратно.


вы видите здесь не патч, а код, что мне с этим кодом делать?
Go to the top of the page
 
+Quote Post
DarkDragon
сообщение Jul 11 2008, 04:20
Сообщение #19


Advanced Member
***

Группа: Members
Сообщений: 399
Регистрация: 27-January 05
Пользователь №: 80



Мда... тяжело общаться с человеком, не знающим простых вещей... :/
Пожалуйста, приконнектитесь к ht-systems по SSH и попросите там
man patch
пожалуйста...

ps тридесятой компании большей не существует, есть Хостинговые Телесистемы (администрация)


--------------------
Тёмный... Маг... Дракон...
Go to the top of the page
 
+Quote Post
sonika
сообщение Jul 26 2008, 16:42
Сообщение #20


Newbie
*

Группа: Members
Сообщений: 1
Регистрация: 26-July 08
Пользователь №: 2.052



Цитата(Сергей help @ Jun 13 2008, 11:58) [snapback]4364[/snapback]
а проще нельзя как-то это сделать, нельзя ли просто заменить нужный мне файл и все? а то подключиться через SSH, я могу тока через CPanel. не подскажите как быть? бо ошибка часто такая вылазит.

см. здесь: _http://www.brusdeylins.info/wordpress/probleme-mit-gettextphp/
проще говоря, открываете файл streams.php (в папке wp-includes), находите строчку
Код
$data = substr($this->_str, $this->_pos, $bytes);

и меняете ее на:
Код
$data = "";
for ($i=0; $i<$bytes; $i++) {
    $data .= $this->_str[$this->_pos+$i];
};

у меня все стало окей (вроде бы, по крайней мере в течении 15 мин. ходьбы по сайту ошибка больше не повторилась).
wp 2.3.3

UPD исправленный streams.php:
http://forum.maxsite.org/viewtopic.php?pid=29767#p29767
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 3rd September 2010 - 01:27
Хостинг и регистрация доменов