2016-08-17 1 views
0

Ich versuche, Marketo Create File Rest API zu implementieren. Aber ich bekomme 'Class CURLFile nicht gefunden' Fehler aufgrund meiner PHP-Version. Also bitte helfen, wie ich 'CURLFile' Funktion im unteren php verwenden kann oder ist sie ein anderes Äquivalent der gleichen Funktion. Bitte überprüfen Sie meinen Code unten: -Wie zu beheben 'CURLFile' Funktion nicht gefunden Fehler?

<?php 
$file = new CreateFile(); 
$file->file = new CURLFile("File.txt", "text/plain", "file"); 
$file->folder = new stdClass(); 
$file->folder->id = 5565; 
$file->folder->type = "Folder"; 
$file->name = "Test File.txt"; 
print_r($file->postData()); 

class CreateFile{ 
    private $host = "CHANGE ME"; 
    private $clientId = "CHANGE ME"; 
    private $clientSecret = "CHANGE ME"; 
    public $name;//name of file to create, required 
    public $file;//CURLFile of file to input 
    public $folder;//json object with two members, id and type(Folder or Program) 
    public $description;//option description of file 
    public $insertOnly;//boolean option to only perform an Insert 

    public function postData(){ 
     $url = $this->host . "/rest/asset/v1/files.json?access_token=" . $this->getToken(); 
     $ch = curl_init($url); 
     $requestBody = $this->bodyBuilder(); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($ch, CURLOPT_HTTPHEADER, array('accept: application/json','Content-Type: multipart/form-data')); 
     curl_setopt($ch, CURLOPT_POST, 1); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, $requestBody); 
     curl_getinfo($ch); 
     $response = curl_exec($ch); 
     return $response; 
    } 

    private function getToken(){ 
     $ch = curl_init($this->host . "/identity/oauth/token?grant_type=client_credentials&client_id=" . $this->clientId . "&client_secret=" . $this->clientSecret); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($ch, CURLOPT_HTTPHEADER, array('accept: application/json',)); 
     $response = json_decode(curl_exec($ch)); 
     curl_close($ch); 
     $token = $response->access_token; 
     return $token; 
    } 
    private function bodyBuilder(){ 
     $requestBody = array("file" => $this->file, "name" => $this->name, "folder" => json_encode($this->folder)); 
     if (isset($this->description)){ 
      $requestBody["description"] = $this->description; 
     } 
     if(isset($this->insertOnly)){ 
      $requestBody["insertOnly"] = $this->insertOnly; 
     } 
     return $requestBody; 
    } 
} 

Antwort

2

$file->file = new CURLFile("File.txt", "text/plain", "file");

mit $file->file = "@File.txt;filename=file;type=text/plain";

in PHP ersetzen 5.5+ Sie einstellen müssen curl_setopt ($ch, CURLOPT_SAFE_UPLOAD, false);

+0

Funktioniert! Vielen Dank. Dies ist wie ein Polyfill für ältere PHP-Versionen. –

0

PHP durch ladbare Module bestimmte Funktionalität bereitstellt. Dies ist meistens der Fall für Dinge, die zusätzliche Bibliotheken wie libcurl benötigen. Um diese Funktionalität nutzen zu können, muss das entsprechende Modul auf Ihrem System installiert sein und eine Anweisung zum Laden des entsprechenden Moduls muss in Ihrer php.ini Datei erscheinen.

Wie Sie das curl-Modul installieren, hängt davon ab, wie Sie PHP installiert haben. Es kann so einfach sein wie die Installation des Pakets, oder es kann erforderlich sein, dass Sie alles neu kompilieren.

1

Überprüfen Sie Ihre PHP-Version. CURLFile funktioniert nur für die PHP-Version => 5.5

+0

Es funktioniert jetzt, danke –

Verwandte Themen