CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden |
16.06.2010, 10:58:26
|
Anfänger
|
|
Registriert seit: Jun 2010
Alter: 34
Beiträge: 54
|
|
REST-Webservices
Hallo Leute,
ich habe ein kleines Problem.
Ich mache mich gerade mit REST-Webservices in PHP vertraut. Ich habe auf dieser Grundlage eine kleine Testanwendung geschrieben die mir nach einem REST Request nen String zurückgeben soll.
Das funktioniert zwar schon einigermaßen, jedoch habe ich noch zwei Kleine Probleme.
1. Ich habe keine Ahnung warum es funktioniert. =)
2. Wie übergebe ich meinem Webservice eine Variable die in diesen String, welcher zurückgegeben werden soll, eingebaut werden soll?
Hier mal das was ich bis jetzt zusammengezimmert habe:
(Siehe nächster Post aufgrund zu vieler zeichen)
Also, ich verstehe nicht wirklich wie der Inhalt zurückgegeben wird. In meinem Beispiel hier wird es deswegen auf der Seite angezeigt werden, da im Service ein echo steht. Wenn ich return schreibe kommt nix zurück.
Allerdings, in der Klasse welche ich oben verlinkt habe (ist eine Klasse welche den Webservice von Amazon benutzt, da wird auch eine variable namens response zurückgegeben, aber nirgends wird der Inhalt befüllt, wie geht das?
Hier mal die relevanten Teile aus der obrigen Klasse:
(Siehe nächster Post aufgrund zu vieler Zeichen)
Unten, in der Methode wird ja this->response zurückgegeben, doch wie kommt der Inhalt dort rein? Ich sehe nur dass der HTTP Code befüllt wird:
PHP-Code:
$this->response->code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
Diese Wert wird in der Methode weiter oben, also getBucket, in $response abgespeichert, dann in ein Array gepackt und zurückgegeben. Ich kann mir das nicht erklären wie da der Inhalt, also die Antwort des Webservice reinkommt.
Dann ist da natürlich noch mein Problem, wie ich dem Webservice Werte übergeben kann damit er die verarbeiten kann, wie geht das? Ich nehme mal an dafür sorgt
PHP-Code:
curl_setopt($curl, CURLOPT_POSTFIELDS, $this->name);
dass der Inhalt im Request landet, aber wie kriege ich die Daten in Service.php verwendet? Ich finde da irgendwie nix.
Dann noch, was hat es mit der wsdl datei auf sich? Ich finde immer nur so Sätze dass diese datei den Webservice beschreibt. Ist das nur zur definierung da? Also ähnlich wie ein Schema oder ein DTD für XML, oder wie muss die Verwendet werden?
Erstmal sorry für so viel Quellcode. Hoffe ihr könnt mir helfen.
Danke im voraus.
|
16.06.2010, 10:58:57
|
Anfänger
|
|
Registriert seit: Jun 2010
Alter: 34
Beiträge: 54
|
|
AW: REST-Webservices
index.php
PHP-Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data" name="form1" id="form1">
<input name="theName" type="text"/>
<input name="Submit" type="submit" value="Upload"/>
</form>
<?php
//include the S3 class
if (!class_exists('client'))require_once('client.php');
//instantiate the class
$client = new client();
//check whether a form was submitted
if(isset($_POST['Submit'])) {
//retreive post variables
$name = $_POST['theName'];
//create a new bucket
echo $client->getObject($name);
}
?>
</body>
</html>
Client.php
PHP-Code:
<?php
class client {
public function __construct() {
}
public static function getObject($name) {
$rest = new S3Request('GET', $name);
$response = $rest->getResponse();
return $response->body->Contents;
}
}
final class S3Request {
private $verb, $name, $host;
public $response;
function __construct($verb, $name) {
$this->verb = $verb;
$this->name = $name;
$this->host = 'localhost/WebServiceTest2/service.php';
$this->response = new STDClass;
$this->response->error = false;
}
public function getResponse() {
$query = '';
$curl = curl_init();
curl_setopt($curl, CURLOPT_USERAGENT, 'S3/php');
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_URL, 'http://'.$this->host);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, false);
curl_setopt($curl, CURLOPT_POSTFIELDS, $this->name);
if (curl_exec($curl))
$this->response->code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
else
$this->response->error = array(
'code' => curl_errno($curl),
'message' => curl_error($curl)
);
@curl_close($curl);
return $this->response;
}
}
?>
Service.php (Der angesprochene Webservice)
PHP-Code:
<?php
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
$str = "<?xml version ='1.0' encoding ='UTF-8' ?><root><name>Mein Name ist </name></root>";
echo $str;
?>
myWS.wsdl
Code:
<?xml version ='1.0' encoding ='UTF-8' ?>
<message name="getXMLRequest">
<part name="term" type="xs:string"/>
</message>
<message name="getXMLResponse">
<part name="value" type="xs:string"/>
</message>
<portType name="glossaryTerms">
<operation name="getXML">
<input message="getXMLRequest"/>
<output message="getXMLResponse"/>
</operation>
</portType>
|
16.06.2010, 10:59:47
|
Anfänger
|
|
Registriert seit: Jun 2010
Alter: 34
Beiträge: 54
|
|
AW: REST-Webservices
Teile die nicht von mir sind, Siehe verlinkte Klasse:
PHP-Code:
public static function getBucket($bucket, $prefix = null, $marker = null, $maxKeys = null) {
// Initialisieren des Requests $rest = new S3Request('GET', $bucket, '');
// Setzen der Parameter für den Request if ($prefix !== null && $prefix !== '') $rest->setParameter('prefix', $prefix);
if ($marker !== null && $prefix !== '') $rest->setParameter('marker', $marker);
if ($maxKeys !== null && $prefix !== '') $rest->setParameter('max-keys', $maxKeys);
// Verarbeitung des Request $response = $rest->getResponse();
// Fehlerbehandlung if ($response->error === false && $response->code !== 200) $response->error = array('code' => $response->code, 'message' => 'Unexpected HTTP status');
if ($response->error !== false) { trigger_error(sprintf("S3::getBucket(): [%s] %s", $response->error['code'], $response->error['message']), E_USER_WARNING); return false; }
$results = array();
// Marker beachten $lastMarker = null; if (isset($response->body, $response->body->Contents)) foreach ($response->body->Contents as $c) { $results[(string)$c->Key] = array( 'name' => (string)$c->Key, 'time' => strToTime((string)$c->LastModified), 'size' => (int)$c->Size, 'hash' => substr((string)$c->ETag, 1, -1) ); $lastMarker = (string)$c->Key; //$response->body->IsTruncated = 'true'; break; }
// Truncated Flag beachten (wurden alle Ergebnisse zurückgegeben) if (isset($response->body->IsTruncated) && (string)$response->body->IsTruncated == 'false') return $results;
// Loop through truncated results if maxKeys isn't specified if ($maxKeys == null && $lastMarker !== null && (string)$response->body->IsTruncated == 'true') do { $rest = new S3Request('GET', $bucket, '');
if ($prefix !== null) $rest->setParameter('prefix', $prefix); $rest->setParameter('marker', $lastMarker);
if (($response = $rest->getResponse(true)) == false || $response->code !== 200) break;
if (isset($response->body, $response->body->Contents)) foreach ($response->body->Contents as $c) { $results[(string)$c->Key] = array( 'name' => (string)$c->Key, 'time' => strToTime((string)$c->LastModified), 'size' => (int)$c->Size, 'hash' => substr((string)$c->ETag, 1, -1) ); $lastMarker = (string)$c->Key; } } while ($response !== false && (string)$response->body->IsTruncated == 'true');
// Ausgabe return $results; }
==========================================================
final class S3Request { private $verb, $bucket, $uri, $resource = '', $parameters = array(), $amzHeaders = array(), $headers = array( 'Host' => '', 'Date' => '', 'Content-MD5' => '', 'Content-Type' => '' ); public $fp = false, $size = 0, $data = false, $response;
/** * Constructor * * @param string $verb Verb * @param string $bucket Bucket name * @param string $uri Object URI * @return mixed */ function __construct($verb, $bucket = '', $uri = '') { $this->verb = $verb; $this->bucket = strtolower($bucket); $this->uri = $uri !== '' ? '/'.$uri : '/';
if ($this->bucket !== '') { $this->bucket = explode('/', $this->bucket); $this->resource = '/'.$this->bucket[0].$this->uri; $this->headers['Host'] = $this->bucket[0].'.s3.amazonaws.com'; $this->bucket = implode('/', $this->bucket); } else { $this->headers['Host'] = 's3.amazonaws.com'; if (strlen($this->uri) > 1) $this->resource = '/'.$this->bucket.$this->uri; else $this->resource = $this->uri; } $this->headers['Date'] = gmdate('D, d M Y H:i:s T');
$this->response = new STDClass; $this->response->error = false; }
/** * Get the S3 response * * @return object | false */ public function getResponse() { $query = ''; if (sizeof($this->parameters) > 0) {
$query = substr($this->uri, -1) !== '?' ? '?' : '&';
foreach ($this->parameters as $var => $value)
if ($value == null || $value == '') $query .= $var.'&'; else $query .= $var.'='.$value.'&';
$query = substr($query, 0, -1); $this->uri .= $query; if (isset($this->parameters['acl']) || !isset($this->parameters['logging'])) $this->resource .= $query; } $url = (extension_loaded('openssl')?'https://':'http://').$this->headers['Host'].$this->uri;
// Basic setup $curl = curl_init(); curl_setopt($curl, CURLOPT_USERAGENT, 'S3/php'); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($curl, CURLOPT_URL, $url);
// Headers $headers = array(); $amz = array();
foreach ($this->amzHeaders as $header => $value) if (strlen($value) > 0) $headers[] = $header.': '.$value;
foreach ($this->headers as $header => $value) if (strlen($value) > 0) $headers[] = $header.': '.$value;
foreach ($this->amzHeaders as $header => $value) if (strlen($value) > 0) $amz[] = strToLower($header).':'.$value;
$amz = (sizeof($amz) > 0) ? "\n".implode("\n", $amz) : '';
// Authorization string $headers[] = 'Authorization: ' . S3::__getSignature( $this->verb."\n". $this->headers['Content-MD5']."\n". $this->headers['Content-Type']."\n". $this->headers['Date'].$amz."\n".$this->resource );
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); curl_setopt($curl, CURLOPT_HEADER, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, false); curl_setopt($curl, CURLOPT_WRITEFUNCTION, array(&$this, '__responseWriteCallback')); curl_setopt($curl, CURLOPT_HEADERFUNCTION, array(&$this, '__responseHeaderCallback'));
// Request types switch ($this->verb) { case 'GET': break; case 'PUT': if ($this->fp !== false) { curl_setopt($curl, CURLOPT_PUT, true); curl_setopt($curl, CURLOPT_INFILE, $this->fp); if ($this->size > 0) curl_setopt($curl, CURLOPT_INFILESIZE, $this->size); } elseif ($this->data !== false) { curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PUT'); curl_setopt($curl, CURLOPT_POSTFIELDS, $this->data); if ($this->size > 0) curl_setopt($curl, CURLOPT_BUFFERSIZE, $this->size); } else curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PUT'); break; case 'HEAD': curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'HEAD'); curl_setopt($curl, CURLOPT_NOBODY, true); break; case 'DELETE': curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'DELETE'); break; default: break; }
// Execute, grab errors if (curl_exec($curl)) $this->response->code = curl_getinfo($curl, CURLINFO_HTTP_CODE); else $this->response->error = array( 'code' => curl_errno($curl), 'message' => curl_error($curl), 'resource' => $this->resource );
@curl_close($curl);
// Parse body into XML if ($this->response->error === false && isset($this->response->headers['type']) && $this->response->headers['type'] == 'application/xml' && isset($this->response->body)) { $this->response->body = simplexml_load_string($this->response->body);
// Grab S3 errors if (!in_array($this->response->code, array(200, 204)) && isset($this->response->body->Code, $this->response->body->Message)) { $this->response->error = array( 'code' => (string)$this->response->body->Code, 'message' => (string)$this->response->body->Message ); if (isset($this->response->body->Resource)) $this->response->error['resource'] = (string)$this->response->body->Resource; unset($this->response->body); } }
// Clean up file resources if ($this->fp !== false && is_resource($this->fp)) fclose($this->fp);
return $this->response; }
}
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 17:04:05 Uhr.
|