[solved] Problem with SoapClient and LiteSpeed

Discussion in 'PHP' started by Sindre, Jan 27, 2013.

  1. Sindre

    Sindre Member

    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: Jan 28, 2013
  2. NiteWave

    NiteWave Administrator

    searched the net, your script may need access /etc/hosts

    so, check open_basedir, it blocks reading /etc/hosts, disable open_basedir
  3. Sindre

    Sindre Member

    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.
  4. NiteWave

    NiteWave Administrator

    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
  5. Sindre

    Sindre Member

    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
  6. NiteWave

    NiteWave Administrator

    then strace lsphp5 process when access the php script in browser, check the output of strace, you may get clue there.
  7. Sindre

    Sindre Member

    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.
  8. webizen

    webizen New Member

    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.
  9. Sindre

    Sindre Member

    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.

Share This Page