Странные проблемы с XML (DOM) в PHP5

trofim

Новичок
Странные проблемы с XML (DOM) в PHP5

Пользуюсь виртуальным выделенным сервером (ОС - FreeBSD), решил установить PHP5 (до этого стояла четверка). PHP во время сборки запросил свежую libxml и libxslt. Скачал (libxml2-2.6.23, libxslt-1.1.16), установил их, потом и PHP(5.1.4) успешно встал. НО! При попытке что-либо установить в стандартный каталог /usr/local система выдавала ошибки "file system is read-only", поэтому все вышеперечисленное скомпилировал в /usr/local/etc. После подключения PHP как модуля к Apache в phpinfo() вижу: libxml2 Version 2.6.23, libxslt Version 1.1.1, libxslt compiled against libxml Version 2.6.3
Т.е. libxml подключилась новая, а libxslt почему-то подключилась старая, хотя и конфигурировал с ключами --with-libxml-dir=/usr/local/etc/libxml2' '--with-xsl=/usr/local/etc/libxslt'.
Особо сильно по поводу версии libxslt я не расстроился, главное - подключилась, уже хорошо.
Но тут начались странности при использовании XML, конкретно модуля DOMDocument. Например:
рабочий код :
PHP:
<?php
$xml1 = new DOMDocument();
$xml1->loadXML('<root><node/></root>');
echo $xml1->saveXML();
?>
//возвращает <?xml version="1.0"?>
<root><node/></root>

нерабочий код :
PHP:
<?php
$xml1 = new DOMDocument();
$xml1->loadXML('<root><node/></root>');
echo $xml1->saveXML();
$xml2 = new DOMDocument();
$xml2->loadXML('<root><node/></root>');
?>
//ничего не возвращает, экран чистый.

И еще целая куча самых невероятных казусов. Причем никакие ошибки не появляются. Даже через Exception не поймать, поскольку какой-либо метод (напр. $xml->loadXML()) просто зависает и не возвращает никакой результат.

Что мои кривые ручки сделали не так? В администрировании Unix я чайник, поэтому думается, проблемы в инсталляции библиотек. Или в чем-то другом?
 

trofim

Новичок
Так я об этом и говорю! Он абсолютно валидный. Но на моем хостинге он выполняться почему-то не хочет.
Что самое странное - какие-то вещи работают, а какие-то виснут.
Вот и хочу понять в чем причина...
 

Alexandre

PHPПенсионер
?
Что мои кривые ручки сделали не так?
скорее всего они не так установили libxml/xslt
в стандартный каталог /usr/local система выдавала ошибки "file system is read-only"
какие у тебы права? если root - то на время инсталляции тебе необходимо было поставить права на директорию /usr/local 755

не факт что раз скомпилировал с
dir=/usr/local/etc/libxml2, значить цеплять должно именно эту библиотеку. При компиляции бкрутся заголовочные файлы из этого каталога, а в системе может быть установленна совсем др. версия (линки на so). Надо проверить см ldconfig.
 

Gorynych

Посетитель PHP-Клуба
Re: Странные проблемы с XML (DOM) в PHP5

Автор оригинала: trofim

//ничего не возвращает, экран чистый.
как насчет:

1) echo htmlspecialchars($xml1->saveXML());

2) или посмотреть на исходный текст страницы?
 

trofim

Новичок
Спасибо, Alexandre.
Работаю под root'ом.
Тоже сразу подумал про права на директорию, но chnmod не выполняется с той же ошибкой "Read-only file system"
Сейчас покопаю ldconfig

-~{}~ 05.06.06 12:56:

Автор оригинала: Gorynych
как насчет:

1) echo htmlspecialchars($xml1->saveXML());

2) или посмотреть на исходный текст страницы?
Ну, братцы! Совсем за идиота не держите. Конечно, смотрел на исходный текст - пусто.
Еще раз говорю, ощущение, что подвисает парсер на некоторых скриптах. Потому что, даже если добавить вначало моего нерабочего примера
PHP:
print('sometext');
- все-равно ничего на экране не будет.
 

Gorynych

Посетитель PHP-Клуба
1) да нет, просто следую правилы "Начни с УЗИ!"

так как сам переползал с 4-ки на 5-ку и было полное ощущение того, что "ничего не работает и во всем виноват хостер" - предпочитаю теперь набор мини-тестов :)

2) "если добавить в начало ... все равно ничего на экране не будет"

а, если еще добавить контрольную печать и принудительное завершение:

print("<br/>Line:".__LINE__);
exit;

и подвигать его сверху вниз (отначала скрипта)? Типа: до такой-то строки работает, а после - нет?
 

Gorynych

Посетитель PHP-Клуба
У меня под рукой вариант:

FreeBSD 5.3-RELEASE
PHP Version 5.1.3
libXML Version 2.6.13
libxslt Version 1.1.10
libxslt compiled against libxml Version 2.6.13


т.е. версия libxslt отличается от libxml и сие нормально.

1) сборка производилась от root

2) Апач + suEXEC, Апач стартует от уникального пользователя и группы www1

3) каждый сайт - от уникального пользователя, члена группы www1,

4) права на каталоги библиотек НЕ правились, каждый проект - работает в своем каталоге с правами владельца . Все каталоги проектов - относятся к группе www1

при попытке смены прав на библиотечный каталог от одного из пользователей (не от root, естественно) ловлю Operation not permitted, но никак не Read-only file system

че-то мне кажется, что дело с XML не в сборке. Хотя сообщение Read-only file system для меня не понятно :-0
 

trofim

Новичок
Автор оригинала: Alexandre
в файл /etc/ld.so.conf внеси директорию, в которую лег so libxml/xslt и сделай ldconfig(
У меня нет файла ld.so.conf
Он точно должен так называться? (ОС FreeBSD 4.10-STABLE)

-~{}~ 05.06.06 14:32:

Автор оригинала: Gorynych
т.е. версия libxslt отличается от libxml и сие нормально.
версия libxslt, понятно, отличается от версии libxml, но собрана-то она у тебя с ней (libxslt compiled against libxml Version 2.6.13)

Хотя сообщение Read-only file system для меня не понятно :-0
"read-only file system" - главная загадка здесь. По-моему, только на носителях типа CD (DVD) бывают файловые системы "только на чтение". Это же не просто права доступа...

Я больше склоняюсь к версии Alexandre, что в системе новые библиотеки не прописались. Отправил письмо к хостеру, посмотрим, что скажут...

-~{}~ 05.06.06 16:10:

Ну точно.
ldconfig -r выдал:
93:-lxml2.5 => /usr/local/lib/libxml2.so.5
94:-lxslt.2 => /usr/local/lib/libxslt.so.2

Попробую переконфигурировать. О результатах сообщу)
 

Alexandre

PHPПенсионер
У меня нет файла ld.so.conf
Он точно должен так называться? (ОС FreeBSD 4.10-STABLE)
знаешь у меня тоже во FreeBsd его не оказалось :), хотя ldconfig есть,
попробуй
The LD_LIBRARY_PATH environment variable can be used to override the use
of directories (or the order thereof) from the cache or to specify addi-
tional directories where shared libraries might be found.
LD_LIBRARY_PATH is a `:' separated list of directory paths which are
searched by the dynamic linker when it needs to load a shared library.
It can be viewed as the run-time equivalent of the -L switch of ld(1).
должен быть
FILES
/var/run/ld.so.hints Standard hints file for the a.out dynamic linker.
/var/run/ld-elf.so.hints Standard hints file for the ELF dynamic linker.
/etc/ld.so.conf Conventional configuration file containing directory names for invocations with -aout.
/etc/ld-elf.so.conf Conventional configuration file containing directory names for invocations with -elf.
/etc/objformat Determines whether -aout or -elf is the default. If present, it must consist of a single line containing either `OBJFORMAT=aout' or `OBJFORMAT=elf'.
-~{}~ 05.06.06 16:29:

попробуй удалить старые либы и проинсталлировать их заново (если на хостинге нет других рабочих проектов), а то как рухнет все ....
 

Gorynych

Посетитель PHP-Клуба
Так, сегодня уже толком не смогу, но если будет актуально - могу завтра пересобрать (повторив) вашу сборку под FreeBSD 5.3

только довайте тогда уточнять: как и что собираем. как хотим взлететь Апач, как ПЫХ и т.п.д

P.S. просто у меня два сервера - один фришный, второй линуксовый
 

trofim

Новичок
Ну все. Тему закрываем. Не хотелось верить, но все это проделки хостера. Вот его ответ на мое письмо:

"В стандартном каталоге все библиотеки обновлены.
Для самостоятельной установки ПО предусмотрен каталог /opt.
Лучше использовать его, а не /usr/local/etc.

Теперь вы можете собрать PHP версии 5, используя библиотеки,
установленные в стандартных каталогах (/usr/local).

Самостоятельно вы не можете обновлять ПО, установленное в /usr/local.
Вы можете либо собрать нужную вам версию самостоятельно (и установить в
/opt), либо написать нам, и мы произведем обновление"
 
Сверху