[Solved]Web Service Doesn't Work In Production Server

Hi all.

I made a web service in Yii and a simple web page to acces it.

If both are in the same server, the web service works fine. But if the web service is in production server and the simple web is in another server, the web service doesn’t works.

Here is my code:

Server Web Service:




<?php

    //set_time_limit(180);

    

    class DeputacionPontevedraWSController extends CController

    {

        //Definimos unha acción mediante a cal chamar ó formulario.

        public function actions() 

        { 

            return array(

                        'animal'=>array(

                                        'class'=>'CWebServiceAction', 

                                        ), 

                                    ); 

            

        } 

        

        //Función que devolve os datos do animal.

        /** 

         * @param string nomeUsuario - Nome de usuario

         * @param string PWD - Contrasinal do usuario

         * @param string desde - rexistro inicial a devolver.

         * @param string Ata - rexistro final a devolver

        * @return array Datos do animal

        * @soap 

        */ 

        public function getDatos($nomeUsuario, $PWD, $desde, $ata) 

        { 

            $datosAnimal = array(); //Array cos datos do animal se os hai e datos do erro se non os hai.

            $posibleErro;           //Auxiliar para gardar un posible erro.

            

            try 

            {

                //Recollemos o erro se o hai.

                $posibleErro = $this->comprobarDatos($nomeUsuario, $PWD, $desde, $ata);


                if(empty($posibleErro)) //Se non hai erro.

                {

                    //Recollemos os datos do animal.

                    $datosAnimal = Yii::app()->db->createCommand(

                                                "xxxxxxxxxxxxxxxxxx")->queryAll();

                    

                    if(empty($datosAnimal)) //Se non se atopou ningún rexistro.

                    {

                        //Avisamos.

                        $datosAnimal[] = 'Aviso - Non existen resultados para os criterios seleccionados';

                    }

                    else    //Se se atoparon rexistros.

                    {

                        //Temos q percorre-los todos pq o q recuperamos da foto é o nome,

                        //pero precisamos a propia foto e o tipo ademais do nome.

                        for($i=0; $i<count($datosAnimal); $i++)

                        {

                            if(!empty($datosAnimal[$i]['Foto']))//Se hai foto.

                            {

                                $nomeFoto = $datosAnimal[$i]['Foto'];//Recollemos o nome.

                                $arquivoEnBinario = base64_encode(file_get_contents('http://localhost'.Yii::app()->baseUrl . 

                                                            rutasArquivos::RUTA_IMAXES_ANIMALES . 

                                                            $datosAnimal[$i]['Foto']));//Recollemos a propia foto en binario.

                                $tipoFoto = $this->getFormatoImaxe(exif_imagetype('http://localhost'.Yii::app()->baseUrl . 

                                                            rutasArquivos::RUTA_IMAXES_ANIMALES . 

                                                            $datosAnimal[$i]['Foto']));//Recollemos o tipo da foto.

                            

                                $datosAnimal[$i]['Foto'] = array();//A foto será un array composto poo título, o tipo e a propia foto.

                                

                                //Enchemos os datos.

                                $datosAnimal[$i]['Foto']['Titulo'] = $nomeFoto;

                                $datosAnimal[$i]['Foto']['Formato'] = $tipoFoto;

                                $datosAnimal[$i]['Foto']['Contido'] = $arquivoEnBinario;

                            }

                            else    //Se non hai foto.

                            {

                                //Enchemos os datos con cadeas vacías.

                                $datosAnimal[$i]['Foto'] = array();

                                

                                $datosAnimal[$i]['Foto']['Titulo'] = '';

                                $datosAnimal[$i]['Foto']['Formato'] = '';

                                $datosAnimal[$i]['Foto']['Contido'] = '';

                            }

                        }

                    }

                }

                else//Se hai algún erro.

                {

                    $datosAnimal[] = $posibleErro;//Establecémo-lo.

                }

                

                return $datosAnimal;//Devolvemos os datos ou o erro en caso de que exista.

            }

            catch(SoapFault $ex) 

            {

                print $ex->getMessage();

                print $ex->getTraceAsString();

            }

        }

        

        

        //Función que devolve o total de animales na base de datos.

        /** 

        * @return integer Nº total de animales.

        * @soap 

        */ 

        public function getTotalAnimales() 

        { 

            return Yii::app()->db->createCommand(

                                                "xxxxxxxxxxxxxxxxxxxxx")->queryScalar();

        }

        

        //Función que comproba que os datos pasados ó servicio web sexan correctos.

        //Devolve o erro se o hai e unha cadea valeira se non o hai.

        // $nomeUsuario -> nome do usuario.

        // $$PWD-> contrasinal do usuario.

        // $desde-> rexistro inicial a recuperar.

        // $ata-> recibo final a recuperar.

        private function comprobarDatos($nomeUsuario, $PWD, $desde, $ata)

        {

            $erroDevolto = '';//Erro no caso de que o haiba.

            

            if(strlen($nomeUsuario) == 0 && strlen($PWD) == 0)//Nome de usuario e contrasinal non poden estar valeiros.

            {

                $erroDevolto = 'Erro 1 - Nome e Contrasinal de Usuario non enviados.';

            }

            elseif(strlen($nomeUsuario) == 0) //Nome de usuario non pode estar valeiro.

            {

                $erroDevolto = 'Erro 2 - Nome de Usuario non enviado.';

            }

            elseif(strlen($PWD) == 0) //Contrasinal de usuario non pode estar valeiro.

            {

                $erroDevolto = 'Erro 3 - Contrasinal de Usuario non enviado.';

            }

            elseif($nomeUsuario != deputacionPontevedraWS::DEP_USER && 

                    $PWD != deputacionPontevedraWS::DEP_USER_PWD)//O nome de usuario e o contrasinal non poden ser incorrectos.

            {

                $erroDevolto = 'Erro 4 - Nome e Contrasinal de Usuario incorrectos.';

            }

            elseif($nomeUsuario != deputacionPontevedraWS::DEP_USER)//O nome de usuario non pode ser incorrecto.

            {

                $erroDevolto = 'Erro 5 - Nome de Usuario incorrecto.';

            }

            elseif($PWD != deputacionPontevedraWS::DEP_USER_PWD)//o contrasinal non pode ser incorrecto.

            {

                $erroDevolto = 'Erro 6 - Contrasinal de Usuario incorrecto.';

            }

            elseif(!is_numeric($desde) && !is_numeric($ata))//Desde e ata deben ser numéricos.

            {

                $erroDevolto ='Erro 7 - Desde e Ata deben ser numéricos.';

            }

            elseif(!is_numeric($desde))//Desde debe ser numérico.

            {

                $erroDevolto = 'Erro 8 - Desde debe ser numérico.';

            }

            elseif(!is_numeric($ata))//Ata debe ser numérico.

            {

                $erroDevolto = 'Erro 9 - Ata debe ser numérico.';

            }

            elseif($desde > $ata)//Desde debe ser menor ca ata.

            {

                $erroDevolto = 'Erro 10 - Desde debe ser maior que Ata.';

            }


            return $erroDevolto;//Devolvemos o erro ou unha cadea valeira se non hai erro.

        }

        

        //Función que devolve o formato de imaxe dunha imaxe. Devolve o formato da imaxe ou null se

        //non é unha imaxe compatible.

        // $imaxe-> imaxe da cal queremos saber o formato.

        private function getFormatoImaxe($imaxe)

        {

            $formato = null;

            

            switch($imaxe)

            {

                case IMAGETYPE_GIF:

                    $formato = 'GIF';

                    break;

                case IMAGETYPE_JPEG:

                    $formato = 'JPEG';

                    break;

                case IMAGETYPE_PNG:

                    $formato = 'PNG';

                    break;

                case IMAGETYPE_SWF:

                    $formato = 'SWF';

                    break;

                case IMAGETYPE_PSD:

                    $formato = 'PSD';

                    break;

                case IMAGETYPE_BMP:

                    $formato = 'BMP';

                    break;

                case IMAGETYPE_TIFF_II:

                    $formato = 'TIFF_II (intel byte order)';

                    break;

                case IMAGETYPE_TIFF_MM:

                    $formato = 'TIFF_MM (motorola byte order)';

                    break;

                case IMAGETYPE_JPC:

                    $formato = 'JPC';

                    break;

                case IMAGETYPE_JP2:

                    $formato = 'JP2';

                    break;

                case IMAGETYPE_JPX:

                    $formato = 'JPX';

                    break;

                case IMAGETYPE_JB2:

                    $formato = 'JB2';

                    break;

                case IMAGETYPE_SWC:

                    $formato = 'SWC';

                    break;

                case IMAGETYPE_IFF:

                    $formato = 'IFF';

                    break;

                case IMAGETYPE_WBMP:

                    $formato = 'WBMP';

                    break;

                case IMAGETYPE_XBM:

                    $formato = 'XBM';

                    break;

                case IMAGETYPE_ICO:

                    $formato = 'ICO';

                    break;

            }

            

            return $formato;//Devolvemos o formato da imaxe.

        }

    }

?>



Client Side Code:




<html>


<head>

</head>


<body>


<?php

try {


	$client=new SoapClient('http://xxx.xxx.xxx.xxx/crefsa/index.php?r=DeputacionPontevedraWS/animal');


	$a = $client->getDatos('xxxxx','xxxxx', '0', '6');

	

	var_dump($client->getTotalAnimales());

	

	if(count($a)>0)

	{

		var_dump($a);

		echo ('<img src="data:image/jpg;base64,' . $a[0]['Foto']['Contido'] . '" alt="Descripción"/>');

		echo ('<img src="data:image/jpg;base64,' . $a[1]['Foto']['Contido'] . '" alt="Descripción"/>');

	}

	}

	catch (SoapFault $e)

  {

      echo "<pre>";

      print_r($e);

      echo "</pre><br><br><br>";

	  print_r($e->getMessage());


  }


?>


</body>


</html>



I get this error:




SoapFault Object

(

    [message:protected] => SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://xxx.xxx.xxx.xxx/crefsa/index.php?r=DeputacionPontevedraWS/animal' : failed to load external entity "http://xxx.xxx.xxx.xxx/crefsa/index.php?r=DeputacionPontevedraWS/animal"


    [string:Exception:private] => 

    [code:protected] => 0

    [file:protected] => C:\xampp\htdocs\probaWS.php

    [line:protected] => 11

    [trace:Exception:private] => Array

        (

            [0] => Array

                (

                    [file] => C:\xampp\htdocs\probaWS.php

                    [line] => 11

                    [function] => SoapClient

                    [class] => SoapClient

                    [type] => ->

                    [args] => Array

                        (

                            [0] => http://xxx.xxx.xxx.xxx/crefsa/index.php?r=DeputacionPontevedraWS/animal

                        )


                )


        )


    [previous:Exception:private] => 

    [faultstring] => SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://xxx.xxx.xxx.xxx/crefsa/index.php?r=DeputacionPontevedraWS/animal' : failed to load external entity "http://xxx.xxx.xxx.xxx/crefsa/index.php?r=DeputacionPontevedraWS/animal"


    [faultcode] => WSDL

    [xdebug_message] => ( ! ) SoapFault: SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://xxx.xxx.xxx.xxx/crefsa/index.php?r=DeputacionPontevedraWS/animal' : failed to load external entity "http://www.e-melloragandeira.com/crefsa/index.php?r=DeputacionPontevedraWS/animal"

 in C:\xampp\htdocs\probaWS.php on line 11

Call Stack

#TimeMemoryFunctionLocation

10.0007138448{main}(  )..\probaWS.php:0

20.0007138992SoapClient->SoapClient(  )..\probaWS.php:11


)







SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://xxx.xxx.xxx.xxx/crefsa/index.php?r=DeputacionPontevedraWS/animal' : failed to load external entity "http://www.e-melloragandeira.com/crefsa/index.php?r=DeputacionPontevedraWS/animal" 



Do I have to configure something on the server to work?

I would appreciate any help.

Regards.

If web service and simple web (to test web service) are in the production server, it works…of course… :unsure:

Hi all again.

I solved my problem. And the problem was in server configuration.

I read this post Great Link and it works.

Regards.