помогите плиз с PHP+XML+utf8

И всё прочее, что касается HTML
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Skimenok
рядовой
Сообщения: 15
Зарегистрирован: 2008-08-05 16:24:40
Откуда: Ukraine, Simferopol
Контактная информация:

помогите плиз с PHP+XML+utf8

Непрочитанное сообщение Skimenok » 2009-07-08 11:58:14

Картина:
На машине собран Apache + php5 + Mysql50
Апачь собан с поддержкой xml о чем свидеетльстует как я понимаю раздел в

Код: Выделить всё

phpinfo.php

libxml
libXML support 	active 
libXML Version 	2.7.3 
libXML streams 	enabled
Есть двигло которое при обращени ругаеться во так:

Код: Выделить всё

Fatal error: Call to undefined function xml_parser_create() in /usr/local/www/vlad/imagevue/include/ivXmlParser.class.php on line 42
Вот листинг данного парса:

Код: Выделить всё

<?php
/**
 * XML parser
 *
 * @author McArrow
 */
class ivXmlParser
{
	/**
	 * XML parser resource
	 * @var resource
	 */
	var $_parser = null;
	
	/**
	 * Node stack
	 * @var ivStack
	 */
	var $_nodeStack = null;

	/**
	 * Head node
	 * @var ivXml
	 */
	var $_head = null;

	/**
	 * Constructor
	 *
	 */
	function ivXmlParser()
	{
		$this->__construct();
	}

	/**
	 * Constructor
	 *
	 */
	function __construct()
	{
		$this->_parser = xml_parser_create('CP1251');
		xml_parser_set_option($this->_parser, XML_OPTION_CASE_FOLDING, 0);
		xml_parser_set_option($this->_parser, XML_OPTION_SKIP_WHITE, 1);
		xml_parser_set_option($this->_parser, XML_OPTION_TARGET_ENCODING, 'UTF-8');
		xml_set_object($this->_parser, $this);
		xml_set_element_handler($this->_parser, '_startElementHandle', '_endElementHandle');
		xml_set_character_data_handler($this->_parser, '_elementDataHandle');
	}
	
	/**
	 * Parse XML string
	 *
	 * @param  string $xmlString
	 * @return ivXml
	 */
	function &parse($xmlString)
	{
		$this->_nodeStack = new ivStack();
		if (!xml_parse($this->_parser, $xmlString)) {
			return false;
		}
		$result = &$this->_head;
		return $result;
	}
	
	function getLastError()
	{
		return array(
			'errorCode' => xml_get_error_code($this->_parser),
			'errorString' => xml_error_string(xml_get_error_code($this->_parser)),
			'line' => xml_get_current_line_number($this->_parser),
			'char' => xml_get_current_column_number($this->_parser) + 1
		);
	}

	/**
	 * Handle start element
	 *
	 * @param resource $parser
	 * @param string   $name   Node name
	 * @param array    $attrs  Node attributes
	 */
	function _startElementHandle($parser, $name, $attrs)
	{
		$currentNode = &ivXmlNode::create($name, $attrs);
		// Need to use container for node because of bug in xmlparser with multibyte encodings
		$container = new stdClass();
		$container->node = &$currentNode;
		$container->value = null;
		$last = &$this->_nodeStack->tail();
		if ($last) {
			$last->node->addChild($currentNode);
		} else {
			$this->_head = &$currentNode;
		}
		$this->_nodeStack->push($container);
	}

	/**
	 * Handle end element
	 *
	 * @param resource $parser
	 * @param string   $name   Node name
	 */
	function _endElementHandle($parser, $name)
	{
		$last = &$this->_nodeStack->tail();
		$last->node->setValue($last->value);
		$this->_nodeStack->pop();
	}

	/**
	 * Handle element's value
	 *
	 * @param resource $parser
	 * @param string   $data   Node value
	 */
	function _elementDataHandle($parser, $data)
	{
		$last = &$this->_nodeStack->tail();
		$last->value .= (string) $data;
	}

}
?>
соответственно ругается он на 42 строчу где написано:

Код: Выделить всё

function __construct()
	{
		$this->_parser = xml_parser_create('UTF-8');
		xml_parser_set_option($this->_parser, XML_OPTION_CASE_FOLDING, 0);
		xml_parser_set_option($this->_parser, XML_OPTION_SKIP_WHITE, 1);
		xml_parser_set_option($this->_parser, XML_OPTION_TARGET_ENCODING, 'UTF-8');
		xml_set_object($this->_parser, $this);
		xml_set_element_handler($this->_parser, '_startElementHandle', '_endElementHandle');
		xml_set_character_data_handler($this->_parser, '_elementDataHandle');
	}
По логике он ругаетсья на кодировку. Логически помыслив попытася поменять кожировку на CP1251 результат тотже....

что с этой радостью делать??

Зарание спасибо!

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

ViktorichZ
сержант
Сообщения: 152
Зарегистрирован: 2008-10-30 12:15:26

Re: помогите плиз с PHP+XML+utf8

Непрочитанное сообщение ViktorichZ » 2009-07-08 13:36:14

Call to undefined function xml_parser_create
проще говоря ваш php не знает функции xml_parser_create

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: помогите плиз с PHP+XML+utf8

Непрочитанное сообщение zg » 2009-07-08 18:47:19

Skimenok писал(а):Апачь собан с поддержкой xml о чем свидеетльстует как я понимаю раздел в
для этой функции требуется библиотека expat

Skimenok
рядовой
Сообщения: 15
Зарегистрирован: 2008-08-05 16:24:40
Откуда: Ukraine, Simferopol
Контактная информация:

Re: помогите плиз с PHP+XML+utf8

Непрочитанное сообщение Skimenok » 2009-07-11 8:41:13

т.е. насколько я понимаю надо пересобрать пхп с библиотекамми libxml libexpat
Нашол в инете информацию что библиотека expat идет уже в наборе с апачем, и все что требуется это сконфигурировать сам пхп с указанием на эту библиотеку..
подскажите как правельно это делаеться, попатлсяся сделать так

Код: Выделить всё

./configure --with-layout=GNU --with-config-file-scan-dir=/usr/local/etc/php --disable-all --enable-libxml --enable-xml --with-libxml-dir=/usr/local  --enable-reflection --program-prefix= --enable-fastcgi --with-apxs2=/usr/local/sbin/apxs --with-regex=php --with-zend-vm=CALL --prefix=/usr/local --mandir=/usr/local/man --infodir=/usr/local/info/ --build=i386-portbld-freebsd7.0
на что пр иконфиге не получил никаких замечаний

потом набрал:
и получил в результате:

Код: Выделить всё

ext/xml/xml.o(.text+0x251): In function `zif_xml_get_current_byte_index':
/usr/ports/lang/php5/work/php-5.2.10/ext/xml/xml.c:1500: undefined reference to `XML_GetCurrentByteIndex'
ext/xml/xml.o(.text+0x2e1): In function `zif_xml_get_current_column_number':
/usr/ports/lang/php5/work/php-5.2.10/ext/xml/xml.c:1484: undefined reference to `XML_GetCurrentColumnNumber'
ext/xml/xml.o(.text+0x371): In function `zif_xml_get_current_line_number':
/usr/ports/lang/php5/work/php-5.2.10/ext/xml/xml.c:1468: undefined reference to `XML_GetCurrentLineNumber'
ext/xml/xml.o(.text+0x401): In function `zif_xml_get_error_code':
/usr/ports/lang/php5/work/php-5.2.10/ext/xml/xml.c:1434: undefined reference to `XML_GetErrorCode'
ext/xml/xml.o(.text+0x4f1): In function `php_xml_parser_create_impl':
/usr/ports/lang/php5/work/php-5.2.10/ext/xml/xml.c:1113: undefined reference to `XML_ParserCreate_MM'
ext/xml/xml.o(.text+0x51b):/usr/ports/lang/php5/work/php-5.2.10/ext/xml/xml.c:1121: undefined reference to `XML_SetUserData'
ext/xml/xml.o(.text+0x15f4): In function `zm_info_xml':
/usr/ports/lang/php5/work/php-5.2.10/ext/xml/xml.c:263: undefined reference to `XML_ExpatVersion'
ext/xml/xml.o(.text+0x1ac8): In function `xml_parser_dtor':
/usr/ports/lang/php5/work/php-5.2.10/ext/xml/xml.c:321: undefined reference to `XML_ParserFree'
ext/xml/xml.o(.text+0x20dc): In function `zif_xml_parse':
/usr/ports/lang/php5/work/php-5.2.10/ext/xml/xml.c:1375: undefined reference to `XML_Parse'
ext/xml/xml.o(.text+0x243b): In function `zif_xml_set_end_namespace_decl_handler':
/usr/ports/lang/php5/work/php-5.2.10/ext/xml/xml.c:1346: undefined reference to `XML_SetEndNamespaceDeclHandler'
ext/xml/xml.o(.text+0x24fb): In function `zif_xml_set_start_namespace_decl_handler':
/usr/ports/lang/php5/work/php-5.2.10/ext/xml/xml.c:1327: undefined reference to `XML_SetStartNamespaceDeclHandler'
ext/xml/xml.o(.text+0x25bb): In function `zif_xml_set_external_entity_ref_handler':
/usr/ports/lang/php5/work/php-5.2.10/ext/xml/xml.c:1308: undefined reference to `XML_SetExternalEntityRefHandler'
ext/xml/xml.o(.text+0x267b): In function `zif_xml_set_notation_decl_handler':
/usr/ports/lang/php5/work/php-5.2.10/ext/xml/xml.c:1290: undefined reference to `XML_SetNotationDeclHandler'
ext/xml/xml.o(.text+0x273b): In function `zif_xml_set_unparsed_entity_decl_handler':
/usr/ports/lang/php5/work/php-5.2.10/ext/xml/xml.c:1272: undefined reference to `XML_SetUnparsedEntityDeclHandler'
ext/xml/xml.o(.text+0x27fb): In function `zif_xml_set_default_handler':
/usr/ports/lang/php5/work/php-5.2.10/ext/xml/xml.c:1253: undefined reference to `XML_SetDefaultHandler'
ext/xml/xml.o(.text+0x28bb): In function `zif_xml_set_processing_instruction_handler':
/usr/ports/lang/php5/work/php-5.2.10/ext/xml/xml.c:1235: undefined reference to `XML_SetProcessingInstructionHandler'
ext/xml/xml.o(.text+0x297b): In function `zif_xml_set_character_data_handler':
/usr/ports/lang/php5/work/php-5.2.10/ext/xml/xml.c:1216: undefined reference to `XML_SetCharacterDataHandler'
ext/xml/xml.o(.text+0x2a55): In function `zif_xml_set_element_handler':
/usr/ports/lang/php5/work/php-5.2.10/ext/xml/xml.c:1197: undefined reference to `XML_SetElementHandler'
ext/xml/xml.o(.text+0x2f35): In function `zif_xml_error_string':
/usr/ports/lang/php5/work/php-5.2.10/ext/xml/xml.c:1449: undefined reference to `XML_ErrorString'
ext/xml/xml.o(.text+0x3099): In function `zif_xml_parse_into_struct':
/usr/ports/lang/php5/work/php-5.2.10/ext/xml/xml.c:1410: undefined reference to `XML_SetDefaultHandler'
ext/xml/xml.o(.text+0x30b4):/usr/ports/lang/php5/work/php-5.2.10/ext/xml/xml.c:1411: undefined reference to `XML_SetElementHandler'
ext/xml/xml.o(.text+0x30c7):/usr/ports/lang/php5/work/php-5.2.10/ext/xml/xml.c:1412: undefined reference to `XML_SetCharacterDataHandler'
ext/xml/xml.o(.text+0x30f6):/usr/ports/lang/php5/work/php-5.2.10/ext/xml/xml.c:1415: undefined reference to `XML_Parse'
*** Error code 1

Stop in /usr/ports/lang/php5/work/php-5.2.10.


что не так я делаю? подскажите плиз..

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: помогите плиз с PHP+XML+utf8

Непрочитанное сообщение zg » 2009-07-11 11:03:34

Skimenok писал(а):подскажите как правельно это делаеться, попатлсяся сделать так
ну какбы http://ru.php.net/manual/en/xml.installation.php

Skimenok
рядовой
Сообщения: 15
Зарегистрирован: 2008-08-05 16:24:40
Откуда: Ukraine, Simferopol
Контактная информация:

Re: помогите плиз с PHP+XML+utf8

Непрочитанное сообщение Skimenok » 2009-07-11 13:23:57

zg писал(а):
Skimenok писал(а):подскажите как правельно это делаеться, попатлсяся сделать так
ну какбы http://ru.php.net/manual/en/xml.installation.php
Я читал этот манул.
исходя из него получаеться есле библиотека expat лежит в

Код: Выделить всё

/usr/local/include/
то ключ конфига будет выглядеть так

Код: Выделить всё

--with-libexpat-dir=/usr/local/include

я правельно нонимаю?

и того конфиг будет выглядеть так :

Код: Выделить всё

./configure 
--with-layout=GNU 
--with-config-file-scan-dir=/usr/local/etc/php 
--disable-all 
--enable-libxml 
--with-libxml-dir=/usr/local 
--with-libexpat-dir=/usr/local/include 
--enable-reflection 
--program-prefix= 
--enable-fastcgi 
--with-apxs2=/usr/local/sbin/apxs 
--with-regex=php 
--with-zend-vm=CALL 
--prefix=/usr/local 
--mandir=/usr/local/man 
--infodir=/usr/local/info/ 
--build=i386-portbld-freebsd7.0

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: помогите плиз с PHP+XML+utf8

Непрочитанное сообщение zg » 2009-07-11 13:43:57

Skimenok писал(а):есле библиотека expat лежит в
а если без если? :roll:
These functions are enabled by default, using the bundled expat library.
если ты специально не выключал эти фнукции, то они будут присутсвовать. Пхп, который идёт в портах специально выключает абсолютно все опции, но при этом имеет отдельный порт расширений, который это всё доставляет. Поэтому, если ты конфигурируешь пхп ручками, то просто проверь наличие библиотеки

Код: Выделить всё

zg# locate libexpat.a
/usr/local/lib/libexpat.a
zg#
она, кстати, обязательно идёт с апачем.

ну и пара статей на тему:
http://anton-pribora.ru/articles/os/fre ... -freebsd7/ - сборка пхп ручками
http://anton-pribora.ru/articles/os/freebsd/phpmyadmin/ - тут сборка пхп из портов

Если будешь собрать, как во второй статье, то потом

Код: Выделить всё

zg# make -C/usr/ports/textproc/php5-xml install
... 
zg# php -r 'var_dump(function_exists("xml_parser_create"));'
bool(true)
:pardon:

Skimenok
рядовой
Сообщения: 15
Зарегистрирован: 2008-08-05 16:24:40
Откуда: Ukraine, Simferopol
Контактная информация:

Re: помогите плиз с PHP+XML+utf8

Непрочитанное сообщение Skimenok » 2009-07-11 14:32:24

zg писал(а):
Skimenok писал(а):есле библиотека expat лежит в
а если без если? :

Код: Выделить всё

srv1  # locate expat.a
/usr/local/lib/libexpat.a

srv1  # locate libxml2.a
/usr/local/lib/libxml2.a

srv1  # locate libxslt.a
/usr/local/lib/libxslt.a

srv1  # locate iconv.a
/usr/lib/libkiconv.a
/usr/local/lib/libiconv.a

но пробелему это почемуто не решает.

Удинственно чего не было на машине это Модуль для работы с UTF.
При устанвке заимел ошиьку ввиде:

Код: Выделить всё

===>  Extracting for icu-3.6
=> MD5 Checksum OK for icu4c-3_6-src.tgz.
=> SHA256 Checksum OK for icu4c-3_6-src.tgz.
===>  Patching for icu-3.6
===>  Applying FreeBSD patches for icu-3.6
1 out of 2 hunks failed--saving rejects to i18n/regexcmp.cpp.rej
1 out of 8 hunks failed--saving rejects to i18n/rematch.cpp.rej
1 out of 2 hunks failed--saving rejects to test/intltest/regextst.h.rej
1 out of 4 hunks failed--saving rejects to test/intltest/regextst.cpp.rej
=> Patch patch-CVE-2007-4770 failed to apply cleanly.
*** Error code 1

Stop in /usr/ports/devel/icu.
*** Error code 1

Stop in /usr/ports/devel/icu.

Собано руками по ринципу статьи
http://anton-pribora.ru/articles/os/fre ... -freebsd7/
Вот кое что ешо непонятное из выыода phpinfo():
  • Configuration File (php.ini) Path /usr/local/etc
    Loaded Configuration File (none)

Код: Выделить всё

srv# locate php.ini
/usr/local/etc/php.ini-dist
/usr/local/etc/php.ini-recommended
/usr/ports/lang/php4/files/patch-php.ini-dist
/usr/ports/lang/php4/files/patch-php.ini-recommended
/usr/ports/lang/php5/files/patch-php.ini-dist
/usr/ports/lang/php5/files/patch-php.ini-recommended
/usr/ports/lang/php5/work/php-5.2.10/php.ini-dist
/usr/ports/lang/php5/work/php-5.2.10/php.ini-dist.bak
/usr/ports/lang/php5/work/php-5.2.10/php.ini-dist.orig
/usr/ports/lang/php5/work/php-5.2.10/php.ini-dist.orig.bak
/usr/ports/lang/php5/work/php-5.2.10/php.ini-recommended
/usr/ports/lang/php5/work/php-5.2.10/php.ini-recommended.bak
/usr/ports/lang/php5/work/php-5.2.10/php.ini-recommended.orig
/usr/ports/lang/php5/work/php-5.2.10/php.ini-recommended.orig.bak
Нигде в статьях невстречал что делать иил не делать с данным фалом .

есле же соберать как в вашей статье из портов то при выполнении :

Код: Выделить всё

srv# php -r 'var_dump(function_exists("xml_parser_create"));'
PHP Warning:  Module 'pcre' already loaded in Unknown on line 0
bool(true)
видим вот это.... :cz2:

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: помогите плиз с PHP+XML+utf8

Непрочитанное сообщение zg » 2009-07-11 15:40:23

Skimenok писал(а):При устанвке заимел ошиьку ввиде:
скорее всего нужно обновить порты и сделать clean.
Skimenok писал(а):PHP Warning:  Module 'pcre' already loaded in Unknown on line 0
видимо два раза прописан как расширение. Либо собран с натвно и модулем. Проверяй по списку

Код: Выделить всё

zg# php --ini
Configuration File (php.ini) Path: /usr/local/etc
Loaded Configuration File:         /usr/local/etc/php.ini
Scan for additional .ini files in: /usr/local/etc/php
Additional .ini files parsed:      /usr/local/etc/php/extensions.ini

zg#
Skimenok писал(а):Loaded Configuration File (none)
дак там и нету конкретно php.ini ;-)