⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 response.php

📁 php的编程工具
💻 PHP
字号:
<?php/** * @copyright Copyright 2007 Conduit Internet Technologies, Inc. (http://conduit-it.com) * @license Apache Licence, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * *     http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * @package Apache * @subpackage Solr * @author Donovan Jimenez <djimenez@conduit-it.com> *//** * Represents a Solr response.  Parses the raw response into a set of stdClass objects * and associative arrays for easy access. * * Currently requires json_decode which is bundled with PHP >= 5.2.0, Alternatively can be * installed with PECL.  Zend Framework also includes a purely PHP solution. * * @todo When Solr 1.3 is released, possibly convert to use PHP or Serialized PHP output writer */class Apache_Solr_Response{	/**	 * Holds the raw response used in construction	 *	 * @var string	 */	private $_rawResponse;	/**	 * Parsed values from the passed in http headers. Assumes UTF-8 XML (default Solr response format)	 *	 * @var string	 */	private $_httpStatus = 200;	private $_httpStatusMessage = '';	private $_type = 'text/xml';	private $_encoding = 'UTF-8';	private $_isParsed = false;	private $_parsedData;	/**	 * Constructor. Takes the raw HTTP response body and the exploded HTTP headers	 *	 * @param string $rawResponse	 * @param array $httpHeaders	 */	public function __construct($rawResponse, $httpHeaders = array())	{		//Assume 0, 'Communication Error', utf-8, and  text/xml		$status = 0;		$statusMessage = 'Communication Error';		$type = 'text/plain';		$encoding = 'UTF-8';		//iterate through headers for real status, type, and encoding		if (is_array($httpHeaders) && count($httpHeaders) > 0)		{			//look at the first header for the HTTP status code			//and message (errors are usually returned this way)			if (substr($httpHeaders[0], 0, 4) == 'HTTP')			{				$parts = split(' ', substr($httpHeaders[0], 9), 2);				$status = $parts[0];				$statusMessage = trim($parts[1]);				array_shift($httpHeaders);			}			//Look for the Content-Type response header and determine type			//and encoding from it (if possible)			foreach ($httpHeaders as $header)			{				if (substr($header, 0, 13) == 'Content-Type:')				{					//split content type into two parts if possible					$parts = split(';', substr($header, 13), 2);					$type = trim($parts[0]);					if ($parts[1])					{						//split the encoding section again to get the value						$parts = split('=', $parts[1], 2);						if ($parts[1])						{							$encoding = trim($parts[1]);						}					}					break;				}			}		}		$this->_rawResponse = $rawResponse;		$this->_type = $type;		$this->_encoding = $encoding;		$this->_httpStatus = $status;		$this->_httpStatusMessage = $statusMessage;	}	/**	 * Get the HTTP status code	 *	 * @return integer	 */	public function getHttpStatus()	{		return $this->_httpStatus;	}	/**	 * Get the HTTP status message of the response	 *	 * @return string	 */	public function getHttpStatusMessage()	{		return $this->_httpStatusMessage;	}	/**	 * Get content type of this Solr response	 *	 * @return string	 */	public function getType()	{		return $this->_type;	}	/**	 * Get character encoding of this response. Should usually be utf-8, but just in case	 *	 * @return string	 */	public function getEncoding()	{		return $this->_encoding;	}	/**	 * Get the raw response as it was given to this object	 *	 * @return string	 */	public function getRawResponse()	{		return $this->_rawResponse;	}	/**	 * Magic get to expose the parsed data and to lazily load it	 *	 * @param unknown_type $key	 * @return unknown	 */	public function __get($key)	{		if (!$this->_isParsed)		{			$this->_parseData();			$this->_isParsed = true;		}		if (isset($this->_parsedData->$key))		{			return $this->_parsedData->$key;		}		return null;	}	/**	 * Parse the raw response into the parsed_data array for access	 */	private function _parseData()	{		//An alternative would be to use Zend_Json::decode(...)		$data = json_decode($this->_rawResponse);		//convert $data->response->docs[*] to be Solr_Document objects		if (isset($data->response) && is_array($data->response->docs))		{			$documents = array();			foreach ($data->response->docs as $doc)			{				$document = new Apache_Solr_Document();				foreach ($doc as $key => $value)				{					//If a result is an array with only a single					//value then its nice to be able to access					//it as if it were always a single value					if (is_array($value) && count($value) <= 1)					{						$value = array_shift($value);					}					$document->$key = $value;				}				$documents[] = $document;			}			$data->response->docs = $documents;		}		//correct facet counts to make sense		//converts array([field value], [facet count], [field value], [facet count] ...) format		//to array([field value] => [facet count], ... ) format		if (isset($data->facet_counts) && isset($data->facet_counts->facet_fields))		{			foreach ($data->facet_counts->facet_fields as $key => $facet_array)			{				$new_facet_array = array();				while (count($facet_array) > 0)				{					$new_facet_array[array_shift($facet_array)] = array_shift($facet_array);				}				$data->facet_counts->facet_fields->$key = $new_facet_array;			}		}		$this->_parsedData = $data;	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -