Rev 480 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/*** $Id: tapir.php 1953 2009-01-05 19:59:53Z rdg $** LICENSE INFORMATION** This program is free software; you can redistribute it and/or* modify it under the terms of the GNU General Public License* as published by the Free Software Foundation; either version 2* of the License, or (at your option) any later version.** This program is distributed in the hope that it will be useful,* but WITHOUT ANY WARRANTY; without even the implied warranty of* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the* GNU General Public License for more details:** http://www.gnu.org/copyleft/gpl.html*** @author Renato De Giovanni <renato [at] cria . org . br>* @author Dave Vieglais (Biodiversity Research Center, University of Kansas)** ACKNOWLEDGEMENTS** TapirLink has been generously funded by the Biodiversity* Information Standards, TDWG, with resources from the Gordon and* Betty Moore Foundation. The Global Biodiversity Information* Facility, GBIF, has also been a major supporter of the TAPIR* initiative since its very beginning and also collaborated to* test this software.** TapirLink was based on the DiGIR PHP provider, which was* originally developed by Dave Vieglais from the Biodiversity* Research Center, University of Kansas. The software is now being* distributed under the GPL with permission from its original* author. The original copyright information is also* reproduced below.** --------------------------------** Copyright (c) 2002 The University of Kansas Natural History* Museum and Biodiversity Research Center. All rights reserved.** Permission is hereby granted, free of charge, to any person* obtaining a copy of this software and associated documentation* files (the "Software"), to deal with the Software without* restriction, including without limitation the rights to use,* copy, modify, merge, publish, distribute, sublicense, and/or* sell copies of the Software, and to permit persons to whom the* Software is furnished to do so, subject to the following* conditions:** - Redistributions of source code must retain the above copyright* notice, this list of conditions and the following disclaimers.** - Redistributions in binary form must reproduce the above* copyright notice, this list of conditions and the following* disclaimers in the documentation and/or other materials provided* with the distribution.** - Neither the names of The University of Kansas Natural History* Museum and Biodiversity Research Center, The University of Kansas* at Lawrence, nor the names of its contributors may be used to* endorse or promote products derived from this Software without* specific prior written permission.** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER* DEALINGS IN THE SOFTWARE.*/// Definition of this constant can be used to indicate that// the Web Service (tapir.php) was calleddefine( 'TP_RUNNING_TAPIR', 1 );require_once('tapir_globals.php');require_once('TpUtils.php');require_once('TpServiceUtils.php');require_once('TpDiagnostics.php');require_once('TpResources.php');require_once('TpRequest.php');require_once('TpResponse.php');// Register a new error handler$old_error_handler = set_error_handler( 'TapirErrorHandler' );// Avoid HTML in errorsini_set( 'html_errors', false );// Store timestamp for profilingdefine( 'INITIAL_TIMESTAMP', TpUtils::MicrotimeFloat() );// LogsTpUtils::InitializeLogs();// Main loggerglobal $g_log;// Debug loggerglobal $g_dlog;$g_dlog->debug( '[Starting debug log]' );$g_dlog->debug( 'TapirLink version: '.TP_VERSION.' (revision '.TP_REVISION.')' );$request_uri = ( isset( $_SERVER['REQUEST_URI'] ) ) ? $_SERVER['REQUEST_URI'] : 'null';$g_dlog->debug( 'Request URI: '.$request_uri );$g_dlog->debug( 'Include path: '.ini_get( 'include_path' ) );// Set the maximum script run time// Note: if php set safe mode is on then this can't be set from here,// and will need to be set in php.ini file// Définit à 120 par TapirLink mis à 60 globalement pour Sequoia car safe_mode actifif (! ini_get('safe_mode') ) {set_time_limit( TP_MAX_RUNTIME );}// Debuggingif ( ! defined( '_DEBUG' ) ){// Load the value from a request variable called "debug", default is false// for security reasonsif ( TP_ALLOW_DEBUG ){define( '_DEBUG', (bool)TpUtils::GetVar( 'debug', false ) );}else{define( '_DEBUG', false );}}// Instantiate request object$request = new TpRequest();// If no resource was specified in the request URI, then dump some help informationif ( ! $request->ExtractResourceCode() ){include_once( 'index.php' );die();}// Get resource code and check if it's valid$resource_code = $request->GetResourceCode();$r_resources =& TpResources::GetInstance();$raise_errors = false;$r_resource =& $r_resources->GetResource( $resource_code, $raise_errors );if ( $r_resource == null ){$response = new TpResponse( $request );$response->ReturnError( 'Resource "'.$resource_code.'" not found.' );die();}$r_resources->SetCurrentResourceCode( $resource_code );if ( $r_resource->GetStatus() != 'active' ){$response = new TpResponse( $request );$response->ReturnError( 'Resource "'.$resource_code.'" is not active.' );die();}// Check PHP version$current_version = phpversion();if ( version_compare( $current_version, '5.0', '<' ) > 0 ){if ( version_compare( $current_version, TP_MIN_PHP_VERSION, '<' ) > 0 ){$msg = 'PHP Version '.TP_MIN_PHP_VERSION.' or later required. '.'Some features may not be available. Detected version '.$current_version;TpDiagnostics::Append( DC_VERSION_MISMATCH, $msg, DIAG_WARN );}}else if ( version_compare( $current_version, '6.0', '<' ) > 0 ){if ( version_compare( $current_version, '5.0.3', '<' ) > 0 ){// Avoid bug in "xml_set_start_namespace_decl_handler"$msg = 'Provider error: Unsupported PHP version ('.$current_version.'). To '.'use PHP5 it is necessary to have at least version 5.0.3';$response = new TpResponse( $request );$response->ReturnError( $msg );die();}}// Get parametersif ( ! $request->InitializeParameters() orTpDiagnostics::Count( array( DIAG_ERROR, DIAG_FATAL ) ) ){$response = new TpResponse( $request );$response->ReturnError( 'Failed to parse request' );die();}// By default, assume that the database encoding cannot be detected// by the mb_detect_encoding PHP functionglobal $g_encoding_can_be_detected;$operation = $request->GetOperation();if ( $operation == 'ping' ){require_once('TpPingResponse.php');$response = new TpPingResponse( $request );}else if ( $operation == 'capabilities' ){require_once('TpCapabilitiesResponse.php');$response = new TpCapabilitiesResponse( $request );}else if ( $operation == 'metadata' ){require_once('TpMetadataResponse.php');$response = new TpMetadataResponse( $request );}else if ( $operation == 'inventory' ){require_once('TpInventoryResponse.php');$response = new TpInventoryResponse( $request );}else if ( $operation == 'search' ){require_once('TpSearchResponse.php');$response = new TpSearchResponse( $request );}else{// Unknown operation$response = new TpResponse( $request );$response->ReturnError( 'Unknown operation "'.$operation.'"' );die();}$response->Process();exit();?>