SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



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



:: Buchempfehlung ::

Webseiten professionell erstellen

Webseiten professionell erstellen zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP Grundlagen
Hilfe Community Kalender Heutige Beiträge Suchen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 16.06.2010, 10:58:26
Airwolf89 Airwolf89 ist offline
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($curlCURLINFO_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($curlCURLOPT_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.
Mit Zitat antworten
  #2  
Alt 16.06.2010, 10:58:57
Airwolf89 Airwolf89 ist offline
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($curlCURLOPT_USERAGENT'S3/php');
        
curl_setopt($curlCURLOPT_SSL_VERIFYHOST0);
        
curl_setopt($curlCURLOPT_SSL_VERIFYPEER0);
        
curl_setopt($curlCURLOPT_URL'http://'.$this->host);
        
curl_setopt($curlCURLOPT_HEADERfalse);
        
curl_setopt($curlCURLOPT_RETURNTRANSFERfalse);
        
curl_setopt($curlCURLOPT_POSTFIELDS$this->name);

        if (
curl_exec($curl))
            
$this->response->code curl_getinfo($curlCURLINFO_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>
Mit Zitat antworten
  #3  
Alt 16.06.2010, 10:59:47
Airwolf89 Airwolf89 ist offline
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->ETag1, -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->ETag1, -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($query0, -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($curlCURLOPT_USERAGENT'S3/php');
        
curl_setopt($curlCURLOPT_SSL_VERIFYHOST0);
        
curl_setopt($curlCURLOPT_SSL_VERIFYPEER0);
        
curl_setopt($curlCURLOPT_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($curlCURLOPT_HTTPHEADER$headers);
        
curl_setopt($curlCURLOPT_HEADERfalse);
        
curl_setopt($curlCURLOPT_RETURNTRANSFERfalse);
        
curl_setopt($curlCURLOPT_WRITEFUNCTION, array(&$this'__responseWriteCallback'));
        
curl_setopt($curlCURLOPT_HEADERFUNCTION, array(&$this'__responseHeaderCallback'));

        
// Request types
        
switch ($this->verb) {
            case 
'GET': break;
            case 
'PUT':
                if (
$this->fp !== false) {
                    
curl_setopt($curlCURLOPT_PUTtrue);
                    
curl_setopt($curlCURLOPT_INFILE$this->fp);
                    if (
$this->size 0)
                        
curl_setopt($curlCURLOPT_INFILESIZE$this->size);
                } elseif (
$this->data !== false) {
                    
curl_setopt($curlCURLOPT_CUSTOMREQUEST'PUT');
                    
curl_setopt($curlCURLOPT_POSTFIELDS$this->data);
                    if (
$this->size 0)
                        
curl_setopt($curlCURLOPT_BUFFERSIZE$this->size);
                } else
                    
curl_setopt($curlCURLOPT_CUSTOMREQUEST'PUT');
                break;
            case 
'HEAD':
                
curl_setopt($curlCURLOPT_CUSTOMREQUEST'HEAD');
                
curl_setopt($curlCURLOPT_NOBODYtrue);
                break;
            case 
'DELETE':
                
curl_setopt($curlCURLOPT_CUSTOMREQUEST'DELETE');
                break;
            default: break;
        }

        
// Execute, grab errors
        
if (curl_exec($curl))
            
$this->response->code curl_getinfo($curlCURLINFO_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(200204)) &&
                    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;
    }


Mit Zitat antworten
Antwort


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.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Ansprechen eines Webservices Schneidoa PHP Grundlagen 2 02.02.2010 14:15:59
rest einer division? Willow PHP Grundlagen 2 08.10.2006 12:50:37
Rest einer Division von großen Zahlen MatMel PHP Grundlagen 6 10.06.2006 19:30:05
Nach 2 Datensätzen wird der rest abgeschnitten? Morph PHP für Fortgeschrittene und Experten 10 02.05.2003 15:09:59


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:04:05 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt