2011-08-09 3 views
5

私は私がやりたい何このポストバイト配列

public bool UploadFile(string fileName, byte[] data) 
{ 
    //... 
} 

のようなものを探して、ファイルを受信するための方法とWCFサービスを持ってこれにデータを投稿することですメソッドをPHPからのWCFサービスで使用できますが、PHPからWCFサービスによってホストされる.NETメソッドにバイト配列をポストすることさえ可能であるかどうかはわかりません。

だから私はこの

$file = file_get_contents($_FILES['Filedata']['tmp_name']); // get the file content 
$client = new SoapClient('http://localhost:8000/service?wsdl'); 

$params = array(
    'fileName' => 'whatever', 
    'data' => $file 
); 

$client->UploadFile($params); 

のようなものを考えていたが、これは可能でしょうか任意の一般的な推奨事項は、そこに私が知っておくべきことがありますか?

+0

[PHPからWCF問題へのバイト配列の送信]の可能な複製(http://stackoverflow.com/questions/2986151/sending-a-byte-array-from-php-to-wcf-problem) – gbjbaanb

答えて

5

公式PHPドキュメントは、file_get_contentsがファイル全体を文字列で返すことを示しています(http://php.net/manual/en/function.file-get-contents.php)。誰も知らないことは、この文字列がWCFサービスにポストされたときに.NET Bytearrayと互換性があることです。

以下の例を参照してください。

$filename = $_FILES["file"]["name"]; 
$byteArr = file_get_contents($_FILES['file']['tmp_name']); 

try { 
    $wsdloptions = array(
     'soap_version' => constant('WSDL_SOAP_VERSION'), 
     'exceptions' => constant('WSDL_EXCEPTIONS'), 
     'trace' => constant('WSDL_TRACE') 
    ); 

    $client = new SoapClient(constant('DEFAULT_WSDL'), $wsdloptions); 

    $args = array(
     'file' => $filename, 
     'data' => $byteArr 
    ); 


    $uploadFile = $client->UploadFile($args)->UploadFileResult; 

    if($uploadFile == 1) 
    { 
     echo "<h3>Success!</h3>"; 
     echo "<p>SharePoint received your file!</p>"; 
    } 
    else 
    { 
     echo "<h3>Darn!</h3>"; 
     echo "<p>SharePoint could not receive your file.</p>"; 
    } 


} catch (Exception $exc) { 
    echo "<h3>Oh darn, something failed!</h3>"; 
    echo "<p>$exc->getTraceAsString()</p>"; 
} 

乾杯!