Ejemplo n.º 1
0
 /**
  * Retrieves a file from cache if it exists, otherwise retreive from net,
  * add to cache, and return from cache.
  *
  * @param  string   URL to WSDL
  * @param  array    proxy parameters
  * @param  int      expected MD5 of WSDL URL
  * @access public
  * @return string  data
  */
 function get($wsdl_fname, $proxy_params = array(), $cache = 0)
 {
     $cachename = $md5_wsdl = $file_data = '';
     if ($this->_cacheUse) {
         // Try to retrieve WSDL from cache
         $cachename = SOAP_WSDL_Cache::_cacheDir() . '/' . md5($wsdl_fname) . ' .wsdl';
         if (file_exists($cachename)) {
             $wf = fopen($cachename, 'rb');
             if ($wf) {
                 // Reading cached file
                 $file_data = fread($wf, filesize($cachename));
                 $md5_wsdl = md5($file_data);
                 fclose($wf);
             }
             if ($cache) {
                 if ($cache != $md5_wsdl) {
                     return $this->_raiseSoapFault('WSDL Checksum error!', $wsdl_fname);
                 }
             } else {
                 $fi = stat($cachename);
                 $cache_mtime = $fi[8];
                 //print cache_mtime, time()
                 if ($cache_mtime + $this->_cacheMaxAge < time()) {
                     // expired
                     $md5_wsdl = '';
                     // refetch
                 }
             }
         }
     }
     if (!$md5_wsdl) {
         // Not cached or not using cache. Retrieve WSDL from URL
         // is it a local file?
         // this section should be replace by curl at some point
         if (!preg_match('/^(https?|file):\\/\\//', $wsdl_fname)) {
             if (!file_exists($wsdl_fname)) {
                 return $this->_raiseSoapFault("Unable to read local WSDL {$wsdl_fname}", $wsdl_fname);
             }
             if (function_exists('file_get_contents')) {
                 $file_data = file_get_contents($wsdl_fname);
             } else {
                 $file_data = implode('', file($wsdl_fname));
             }
         } else {
             $uri = explode('?', $wsdl_fname);
             $rq = new HTTP_Request($uri[0], $proxy_params);
             // the user agent HTTP_Request uses fouls things up
             if (isset($uri[1])) {
                 $rq->addRawQueryString($uri[1]);
             }
             if (isset($proxy_params['proxy_host']) && isset($proxy_params['proxy_port']) && isset($proxy_params['proxy_user']) && isset($proxy_params['proxy_pass'])) {
                 $rq->setProxy($proxy_params['proxy_host'], $proxy_params['proxy_port'], $proxy_params['proxy_user'], $proxy_params['proxy_pass']);
             } elseif (isset($proxy_params['proxy_host']) && isset($proxy_params['proxy_port'])) {
                 $rq->setProxy($proxy_params['proxy_host'], $proxy_params['proxy_port']);
             }
             $result = $rq->sendRequest();
             if (PEAR::isError($result)) {
                 return $this->_raiseSoapFault("Unable to retrieve WSDL {$wsdl_fname}," . $rq->getResponseCode(), $wsdl_fname);
             }
             $file_data = $rq->getResponseBody();
             if (!$file_data) {
                 return $this->_raiseSoapFault("Unable to retrieve WSDL {$wsdl_fname}, no http body", $wsdl_fname);
             }
         }
         $md5_wsdl = md5($file_data);
         if ($this->_cacheUse) {
             $fp = fopen($cachename, "wb");
             fwrite($fp, $file_data);
             fclose($fp);
         }
     }
     if ($this->_cacheUse && $cache && $cache != $md5_wsdl) {
         return $this->_raiseSoapFault("WSDL Checksum error!", $wsdl_fname);
     }
     return $file_data;
 }
Ejemplo n.º 2
0
 /**
  * Submit REST Request to read data
  *
  * @param	 string			$method						 HTTP Method to use: GET, POST,
  * @param	 array			 $params						 Array of parameters for the request
  * @param	 bool				$returnSolrError		If Solr reports a syntax error,
  *																					should we fail outright (false) or
  *																					treat it as an empty result set with
  *																					an error key set (true)?
  * @return	array|PEAR_Error													 The Solr response (or a PEAR error)
  * @access	private
  */
 private function _select($method = HTTP_REQUEST_METHOD_GET, $params = array(), $returnSolrError = false)
 {
     global $timer;
     $this->client->setMethod($method);
     $this->client->setURL($this->host . "/select/");
     $params['wt'] = 'json';
     $params['json.nl'] = 'arrarr';
     // Build query string for use with GET or POST:
     $query = array();
     if ($params) {
         foreach ($params as $function => $value) {
             if ($function != '') {
                 // Strip custom FacetFields when sharding makes it necessary:
                 if ($function === 'facet.field') {
                     $value = $this->_stripUnwantedFacets($value);
                     // If we stripped all values, skip the parameter:
                     if (empty($value)) {
                         continue;
                     }
                 }
                 if (is_array($value)) {
                     foreach ($value as $additional) {
                         $additional = urlencode($additional);
                         $query[] = "{$function}={$additional}";
                     }
                 } else {
                     $value = urlencode($value);
                     $query[] = "{$function}={$value}";
                 }
             }
         }
     }
     // pass the shard parameter along to Solr if necessary:
     if (!empty($this->_solrShards) && is_array($this->_solrShards)) {
         $query[] = 'shards=' . urlencode(implode(',', $this->_solrShards));
     }
     $queryString = implode('&', $query);
     if ($this->debug) {
         echo "<pre>{$method}: ";
         $fullSearchUrl = print_r($this->host . "/select/?" . $queryString, true);
         //Add debug parameter so we can see the explain section at the bottom.
         $debugSearchUrl = print_r($this->host . "/select/?debugQuery=on&" . $queryString, true);
         echo "<a href='" . $debugSearchUrl . "' target='_blank'>{$fullSearchUrl}</a>";
         echo "</pre>\n";
     }
     if ($method == 'GET') {
         $this->client->addRawQueryString($queryString);
     } elseif ($method == 'POST') {
         $this->client->setBody($queryString);
     }
     // Send Request
     $timer->logTime("Prepare to send request to solr");
     $result = $this->client->sendRequest();
     //$this->client->clearPostData();
     $timer->logTime("Send data to solr");
     if (!PEAR_Singleton::isError($result)) {
         return $this->_process($this->client->getResponseBody(), $returnSolrError);
     } else {
         return $result;
     }
 }
Ejemplo n.º 3
0
 /**
  * Retrieves a file from cache if it exists, otherwise retrieve from net,
  * add to cache, and return from cache.
  *
  * @param  string   URL to WSDL
  * @param  array    proxy parameters
  * @param  int      expected MD5 of WSDL URL
  * @access public
  * @return string  data
  */
 function get($wsdl_fname, $proxy_params = array(), $cache = 0)
 {
     $cachename = $md5_wsdl = $file_data = '';
     if ($this->_cacheUse) {
         // Try to retrieve WSDL from cache
         $cachename = $this->_cacheDir() . '/' . md5($wsdl_fname) . ' .wsdl';
         if (file_exists($cachename) && ($file_data = file_get_contents($cachename))) {
             $md5_wsdl = md5($file_data);
             if ($cache) {
                 if ($cache != $md5_wsdl) {
                     return $this->_raiseSoapFault('WSDL Checksum error!', $wsdl_fname);
                 }
             } else {
                 $fi = stat($cachename);
                 $cache_mtime = $fi[8];
                 if ($cache_mtime + $this->_cacheMaxAge < time()) {
                     // Expired, refetch.
                     $md5_wsdl = '';
                 }
             }
         }
     }
     // Not cached or not using cache. Retrieve WSDL from URL
     if (!$md5_wsdl) {
         // Is it a local file?
         if (strpos($wsdl_fname, 'file://') === 0) {
             $wsdl_fname = substr($wsdl_fname, 7);
             if (!file_exists($wsdl_fname)) {
                 return $this->_raiseSoapFault('Unable to read local WSDL file', $wsdl_fname);
             }
             $file_data = file_get_contents($wsdl_fname);
         } elseif (!preg_match('|^https?://|', $wsdl_fname)) {
             return $this->_raiseSoapFault('Unknown schema of WSDL URL', $wsdl_fname);
         } else {
             $uri = explode('?', $wsdl_fname);
             $rq = new HTTP_Request($uri[0], $proxy_params);
             // the user agent HTTP_Request uses fouls things up
             if (isset($uri[1])) {
                 $rq->addRawQueryString($uri[1]);
             }
             if (isset($proxy_params['proxy_host']) && isset($proxy_params['proxy_port']) && isset($proxy_params['proxy_user']) && isset($proxy_params['proxy_pass'])) {
                 $rq->setProxy($proxy_params['proxy_host'], $proxy_params['proxy_port'], $proxy_params['proxy_user'], $proxy_params['proxy_pass']);
             } elseif (isset($proxy_params['proxy_host']) && isset($proxy_params['proxy_port'])) {
                 $rq->setProxy($proxy_params['proxy_host'], $proxy_params['proxy_port']);
             }
             $result = $rq->sendRequest();
             if (PEAR::isError($result)) {
                 return $this->_raiseSoapFault("Unable to retrieve WSDL {$wsdl_fname}," . $rq->getResponseCode(), $wsdl_fname);
             }
             $file_data = $rq->getResponseBody();
             if (!$file_data) {
                 return $this->_raiseSoapFault("Unable to retrieve WSDL {$wsdl_fname}, no http body", $wsdl_fname);
             }
         }
         $md5_wsdl = md5($file_data);
         if ($this->_cacheUse) {
             $fp = fopen($cachename, "wb");
             fwrite($fp, $file_data);
             fclose($fp);
         }
     }
     if ($this->_cacheUse && $cache && $cache != $md5_wsdl) {
         return $this->_raiseSoapFault('WSDL Checksum error!', $wsdl_fname);
     }
     return $file_data;
 }
Ejemplo n.º 4
0
 function makeRequest($action, $params)
 {
     if ($params == '') {
         $params = array();
     }
     $retryCount = 0;
     do {
         $retry = false;
         $timestamp = time();
         // Add Actions
         $params['Action'] = $action;
         $params['Expires'] = gmdate('Y-m-d\\TH:i:s\\Z', $timestamp + 10);
         $params['Version'] = '2008-01-01';
         $params['AWSAccessKeyId'] = $this->accessKey;
         $params['SignatureVersion'] = '1';
         // build our string to sign
         uksort($params, 'strcasecmp');
         $stringToSign = '';
         foreach ($params as $key => $val) {
             $stringToSign = $stringToSign . "{$key}{$val}";
         }
         // Sign the string
         $hasher =& new Crypt_HMAC($this->secretKey, "sha1");
         $params['Signature'] = $this->hex2b64($hasher->hash($stringToSign));
         $request = '';
         foreach ($params as $key => $val) {
             $request .= $key . '=' . urlencode($val) . '&';
         }
         // get rid of the last &
         $request = substr($request, 0, strlen($request) - 1);
         // set our endpoint, keeping in mind that not all actions require a queue name in the URI
         $endpoint = $this->activeQueueURL;
         if ($action == 'ListQueues' || $action == 'CreateQueue') {
             $endpoint = $this->endpoint;
         }
         $req = new HTTP_Request($endpoint);
         $req->setMethod('GET');
         $req->addRawQueryString($request);
         $req->sendRequest();
         // check if we should retry this request
         $responseCode = $req->getResponseCode();
         // you should always retry a 5xx error, as some of these are expected
         if ($responseCode >= 500 && $responseCode < 600 && $retryCount <= 5) {
             $retry = true;
             $retryCount++;
             sleep($retryCount / 4 * $retryCount);
         }
     } while ($retry == true);
     $xml = $req->getResponseBody();
     // PHP 5 - The easier way!
     $data = new SimpleXMLElement($xml);
     return $data;
 }