[solved] Problem with SoapClient and LiteSpeed

Sindre

Well-Known Member
#1
Hello,

I am struggling with a strange problem. I have a script which makes a simple Soap request to my Magento API:

PHP:
try {
   $proxy= new SoapClient($host.'/index.php/api/soap/?wsdl',array('exceptions' => 1,'trace' => 1,"connection_timeout" => 120));
   $sessionId= $proxy->login($apiuser, $apikey);
   echo  "Magento Api accessed Successfully.";
   echo "<br>Session Id is:". $sessionId;
} catch (Exception $e) {
   echo "==> Error: ".$e->getMessage();
}
When I run this through a browser I get
Code:
SOAP-ERROR: Parsing WSDL: "Couldn't load from 'http://....../index.php/api/soap/index/wsdl/1/' : failed to load external entity "http://..../index.php/api/soap/index/wsdl/1/"
However, when I run it from the command line it works fine:
Code:
/usr/local/lsws/fcgi-bin/lsphp5 path_to_script
Magento Api accessed Successfully.<br>Session Id is: xxxx
It is the same lsphp5 binary that is configured in LiteSpeed LSAPI external app.

Any ideas? I am sort of out of ideas at the moment.
 
Last edited by a moderator:

Sindre

Well-Known Member
#3
searched the net, your script may need access /etc/hosts

so, check open_basedir, it blocks reading /etc/hosts, disable open_basedir
Thanks, but I don't see why the script would need access to the /etc/hosts file? Also, why would it work through the CLI but not in a browser or using WGET? There must be something in LiteSpeed which is blocking the request. It just hangs until the timeout value is reached.
 

NiteWave

Administrator
#4
command line lsphp5 and exteral app lsphp5 may pick up different php.ini.

to confirm, check if open_basedir are same value
#/usr/local/lsws/fcgi-bin/lsphp5 phpinfo.php |grep open_basedir

and in browser, access domain.com/phpinfo.php and search open_basedir
 

Sindre

Well-Known Member
#5
command line lsphp5 and exteral app lsphp5 may pick up different php.ini.

to confirm, check if open_basedir are same value
#/usr/local/lsws/fcgi-bin/lsphp5 phpinfo.php |grep open_basedir

and in browser, access domain.com/phpinfo.php and search open_basedir
I already checked that. The same php.ini is used both by the CLI and LiteSpeed. open_basedir is not set.

Code:
# /usr/local/lsws/fcgi-bin/lsphp5 -i | grep open_basedir
open_basedir => no value => no value
 

Sindre

Well-Known Member
#7
Finally!! I just found the problem. In my LSWS config, the PHP suEXEC Max Conn was set to 2. I increased it to 3 and now it works :)

Not sure why, but this setting has an impact on the behavior of the SoapClient.
 

webizen

Well-Known Member
#8
the default is 5. maybe you changed that settings in the past for some reason. anyway, it is a bit of surprise to see the impact you described.
 

Sindre

Well-Known Member
#9
Yes, it was changed in order to better manage the resources on the server (it is used for shared web hosting). My only guess is that the SoapClient creates a new socket which counts as a suexec process, but it is kind of strange indeed.
 
Top