LINUX.ORG.RU

Не работает SOAP (PHP 5.4, Debian 6)


0

1

Доброго времени суток! При запуске скрипта из командной строки PHP ругается на строки:

    public function __construct()
	 {
            $this->soap = new SoapClient(CBR::WSDL);
	 }

следующим образом:

root@debian:/var/www# php script2.php

Fatal error: Class 'SoapClient' not found in /var/www/www-cryptcp/script2.php on line 10

PHP установлен из пакетов, пакет php-soap установлен:

root@debian:~# aptitude search ~iphp
i A libapache2-mod-php5             - server-side, HTML-embedded scripting langu
i A libphp-adodb                    - The ADOdb database abstraction layer for P
i A php-auth-sasl                   - Abstraction of various SASL mechanism resp
i A php-http-request                - provides an easy way to perform HTTP reque
i A php-mail                        - PHP PEAR module for sending email
i A php-mail-mime                   - PHP PEAR module for creating MIME messages
i A php-mail-mimedecode             - PHP PEAR module to decode MIME messages
i A php-net-dime                    - class that implements DIME encoding
i A php-net-smtp                    - PHP PEAR module implementing SMTP protocol
i A php-net-socket                  - PHP PEAR Network Socket Interface module
i A php-net-url                     - easy parsing of Urls
i A php-pear                        - PEAR - PHP Extension and Application Repos
i   php-soap                        - a SOAP Client/Server class for PHP
i   php5                            - server-side, HTML-embedded scripting langu
i   php5-cgi                        - server-side, HTML-embedded scripting langu
i   php5-cli                        - command-line interpreter for the php5 scri
i   php5-common                     - Common files for packages built from the p
i   php5-curl                       - CURL module for php5
i   php5-gd                         - GD module for php5
i   php5-imagick                    - imagick module for php5
i   php5-imap                       - IMAP module for php5
i   php5-ldap                       - LDAP module for php5
i   php5-mcrypt                     - MCrypt module for php5
i   php5-mysql                      - MySQL module for php5
i   php5-pspell                     - pspell module for php5
i   php5-snmp                       - SNMP module for php5
i   php5-sqlite                     - SQLite module for php5
i   php5-tidy                       - tidy module for php5
i   php5-xdebug                     - xdebug module for php5
i   php5-xmlrpc                     - XML-RPC module for php5
i   php5-xsl                        - XSL module for php5
i   phpmyadmin                      - MySQL web administration tool

Думала, нужно прописать строку extension=php_soap.so в php.ini, но файла php_soap.so в ситстеме нет. Вывод команды php -m|grep soap пустой.

Помогите, пожалуйста, заставить soap работать.

У тебя в коде возможно объявлен свой namespace, если так - попробуй для глобальных классов добавить \

$this->soap = new \SoapClient(CBR::WSDL);

Хотя класс CBR вместе с константой может не найтись, если он не в текущем пространстве. Он вроде не глобальный.

Пути указал? С автозагрузкой разобрался?

Приведи весь код.

swwwfactory ★★ ()
/** SOAP_Client */
require 'SOAP/Client.php';

/* This client runs against the example server in SOAP/example/server.php.  It
 * does not use WSDL to run these requests, but that can be changed easily by
 * simply adding '?wsdl' to the end of the url. */
$soapclient = new SOAP_Client('http://localhost/SOAP/example/server.php');

и другие примеры в /usr/share/php/doc/SOAP/example для php_soap из debian.

php_soap.so это по-моему, если собираешь soap при сборке php http://us1.php.net/soap

vtVitus ★★★★★ ()

поможем девушке (?) :)
mkdir /tmp/php
cd /tmp/php
sudo apt-get install php5-dev
apt-get source php5
cd php5-5.3.3/ext/soap
phpize5
./configure
make
sudo make install
Installing shared extensions: /usr/lib/php5/20090626/
ll /usr/lib/php5/20090626/soap.so
-rwxr-xr-x 1 root root 999433 Ноя 14 17:20 /usr/lib/php5/20090626/soap.so

vtVitus ★★★★★ ()
Последнее исправление: vtVitus (всего исправлений: 1)
Ответ на: комментарий от vtVitus

Спасибо большое:) Однако при сборке получила ошибку:

/tmp/php/php5-5.4.21/ext/soap/php_encoding.c: In function ‘get_zval_property’:
/tmp/php/php5-5.4.21/ext/soap/php_encoding.c:1247: error: too many arguments to function ‘object->value.obj.handlers->read_property’
/tmp/php/php5-5.4.21/ext/soap/php_encoding.c: In function ‘unset_zval_property’:
/tmp/php/php5-5.4.21/ext/soap/php_encoding.c:1281: error: too many arguments to function ‘object->value.obj.handlers->unset_property’
/tmp/php/php5-5.4.21/ext/soap/php_encoding.c: In function ‘to_xml_object’:
/tmp/php/php5-5.4.21/ext/soap/php_encoding.c:2071: warning: passing argument 3 of ‘zend_unmangle_property_name’ from incompatible pointer type
/usr/local/include/php/Zend/zend_compile.h:576: note: expected ‘char **’ but argument is of type ‘const char **’
/tmp/php/php5-5.4.21/ext/soap/php_encoding.c:2071: warning: passing argument 4 of ‘zend_unmangle_property_name’ from incompatible pointer type
/usr/local/include/php/Zend/zend_compile.h:576: note: expected ‘char **’ but argument is of type ‘const char **’
make: *** [php_encoding.lo] Ошибка 1

Incher ()
Ответ на: комментарий от Incher

Это имно несовпадение версий phpize и сорцов. в debian 6 php вроде 5.3, у тебя 5.4 ставили, наверно, с dotdeb.org. Надо поставить php-dev для 5.4. Если стоит, то попробуй поиграться с alternatives на phpize. Если на --version видишь такое

xxx@xxx-dev:~$ phpize --version
Configuring for:
PHP Api Version:         20090626
Zend Module Api No:      20090626
Zend Extension Api No:   220090626
то phpize от 5.3

просто phpize пробовала?

vtVitus ★★★★★ ()
Последнее исправление: vtVitus (всего исправлений: 1)
Ответ на: комментарий от vtVitus

Да, ставили с dotdeb.org, phpsize версия такая же как у вас в примере, а phpsize5:

root@debian:/tmp/php/php5-5.4.21/ext/soap# phpize5 --version
Configuring for:
PHP Api Version:         20100412
Zend Module Api No:      20100525
Zend Extension Api No:   220100525
Однако если использовать phpize или phpize5 перед ./configure - при make все равно вылетает та же ошибка.

Incher ()
Ответ на: комментарий от Incher

Странно обновился из dotdeb.org

#dotdeb.org
deb http://packages.dotdeb.org squeeze-php54 all
deb-src http://packages.dotdeb.org squeeze-php54 all

по окончании установки и phpize и phpize5 указывает на одно и тоже, есть мнение, что обновление с dotdeb.org было произведено как-то не так и alternatives не правильные. должно и php/php5 возвращать

PHP 5.4.21-1~dotdeb.0 (cli) (built: Nov  2 2013 21:32:49)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
и phpize/phpize5 возвращать
Configuring for:
PHP Api Version:         20100412
Zend Module Api No:      20100525
Zend Extension Api No:   220100525
Должно быть
xxx@xxx-dev:/tmp/php/php5-5.4.21/ext/soap$ update-alternatives --list php
/usr/bin/php5
xxx@xxx-dev:/tmp/php/php5-5.4.21/ext/soap$ update-alternatives --list phpize
/usr/bin/phpize5

Если это не так, то через update-alternatives выставляй правильные значения. Так же перед каждым phpize надо вызывать make clean

И таки из-под рута не работай. Отстрелишь себе ногу, на боевом сервере, будет больно :D

vtVitus ★★★★★ ()
Ответ на: комментарий от vtVitus

Этот сервер полубоевой-полутестовый, но все равно будет больно)) - там куча всякого барахла и пару рабочих приложений, юзающих PHP. А вообще там с PHP какая-то вакханалия творится, на этом сервере раньше был 5.3, потом видимо из dotdeb.org криво проапгрейдила. Результат для update-alternatives --list php и update-alternatives --list phpize такой же, а вообще вывод php -v выглядит так:

root@debian:/usr/lib/php5/20100525+lfs# php -v
PHP 5.3.11 (cli) (built: Apr 29 2012 05:07:47)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies

хотя пакеты php5, php5-cli стоят версии 5.4 из dotdeb.org:

root@debian:/usr/lib/php5/20100525+lfs# aptitude show php5
Пакет: php5
Новый: да
Состояние: установлен
Автоматически установлен: нет
Версия: 5.4.21-1~dotdeb.0
Приоритет: необязательный
Раздел: php
...
root@debian:/usr/lib/php5/20100525+lfs# aptitude show php5-cli
Пакет: php5-cli
Новый: да
Состояние: установлен
Автоматически установлен: нет
Версия: 5.4.21-1~dotdeb.0
Приоритет: необязательный
Раздел: php
...

Спасибо большое за помощь, попробую навести порядок в этом зоопарке)

P.S. Ваш soap.so к сожалению не подошел, у меня 32-битная debian:

root@debian:/usr/lib/php5/20100525+lfs# php --php-ini /etc/php5/cli/php.ini
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php5/20100525+lfs/soap.so' - /usr/lib/php5/20100525+lfs/soap.so: wrong ELF class: ELFCLASS64 in Unknown on line 0

Incher ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.