2011-12-15 7 views
1

あなたのサポートのためにフォーマットが悪いと申し訳ありません。私はこの時間をより良く説明しようとします。 場所 'C:\ xampp \ htdocs \ drupalTheme'にContent_4_2.zipという名前のzipファイルがあります。このジップには2つのxmlファイルが含まれています。 このzipを渡したいWebサービスメソッドには、次のような定義があります。PHPコードでZIPファイルにアクセスするには

<soap:Body> 
    <AddFileToProject xmlns="http://tempuri.org/"> 
     <Ticket>string</Ticket> 
     <ProjectID>string</ProjectID> 
     <Filename>string</Filename> 
     <FileData>base64Binary</FileData> 
     <SourceLanguageID>string</SourceLanguageID> 
     <TargetLanguageIDs> 
     <string>string</string> 
     <string>string</string> 
     </TargetLanguageIDs> 
     <Metadata> 
     <Meta Name="string" Value="string" /> 
     <Meta Name="string" Value="string" /> 
     </Metadata> 
     <IsReferenceMaterial>boolean</IsReferenceMaterial> 
    </AddFileToProject> 
    </soap:Body> 

FileData 'base64Binary'は、送信したいコンテンツ、つまりzipファイルです。 Javaでは、私は ファイルをbytearrayに変換することができ、Webサービスはsucessfully.Nowと呼ばれていました。私は、このような変換はPHPでないことを知っています。 私のアプローチは です。1. ディレクトリからzipファイルの名前を取得します。2. zipの内容をWebサービスにパスします。

私はこれを試してみました:

$zipFile = 'C:/xampp/htdocs/drupalTheme/Content_4_2.zip'; 
    $zip = zip_open($zipFile); 
    $addFile = $ServicesLink->AddFileToProject(array('Ticket'=>$ticket,'ProjectID'=>$projectID,'Filename'=>$fileName,'FileData'=> $zip, 'SourceLanguageID'=> $srcLang, 'TargetLanguageIDs'=> $finalTarArray,'Metadata'=> null,'IsReferenceMaterial'=>false)); 

このappraoch

$zipFile = 'C:/xampp/htdocs/drupalTheme/Content_4_2.zip'; 
    $file = file_get_contents('./Content_4_2.zip',true); 
    $byteArr = str_split($file); 
    foreach ($byteArr as $key=>$val) { $byteArr[$key] = ord($val); } 

    $addFile = $ServicesLink->AddFileToProject(array('Ticket'=>$ticket,'ProjectID'=>$projectID,'Filename'=>$fileName,'FileData'=> $byteArr, 'SourceLanguageID'=> $srcLang, 'TargetLanguageIDs'=> $finalTarArray,'Metadata'=> null,'IsReferenceMaterial'=>false)); 

オーバー送ら壊れたzipファイル内の両方の結果を。

あなたの意見を同じにしたいと思います。

+0

ようこそ!これに利用できるライブラリがあります:グーグルの 'drupal zip'や' php zip'は必要なものすべてを提供するはずです。 –

+1

これは再フォーマットされたので、私はあなたの質問が何であるか分かりません。 zipファイルを解凍する必要がありますか、それとも他の方法についてですか? –

+0

@Angela Sim:あなたの質問は完全にはっきりしていません - あなたは「Javaではzipファイルをbytearrayに変換することができました」という_は、Zipファイル全体を変換(および送信)したように聞こえます。しかし、あなたのテストの例では、まずアーカイブを解凍し、含まれているファイルを送信しようとします。どのファイルを送信しますか?ZIPアーカイブ全体、または含まれているファイルは個別に保存しますか? –

答えて

0

おかげでジャロッドによって【選択最初の答えは私のために働いたものだった別のコード PHP SOAP Transfering Filesで私の解決策を見つけました。サポートスタッフに感謝

0

を(すなわちなし2番目のテスト例のように、 'byte array'部分をスキップして、ファイルを直接エンコードするのにbase64_encode()を使用するとよいでしょう。あなたの例のコードを使用して、それは次のように多少なります。あなたのhelp.Iため

$zipFile = 'C:/xampp/htdocs/drupalTheme/Content_4_2.zip'; 
$fileContent = file_get_contents($zipFile, true); 
$fileEncoded = base64_encode($fileContent); 
$addFile = $ServicesLink->AddFileToProject(
    array(
    'Ticket'=>$ticket, 
    'ProjectID'=>$projectID, 
    'Filename'=>$fileName, 
    'FileData'=> fileEncoded, 
    'SourceLanguageID'=> $srcLang, 
    'TargetLanguageIDs'=> $finalTarArray, 
    'Metadata'=> null, 
    'IsReferenceMaterial'=>false 
) 
); 
関連する問題