如何在PHP代码中访问zip文件

时间:2011-12-15 13:16:38

标签: php drupal-6

嘿,伙计们抱怨格式错误,并为你的支持提供帮助。这次我会尝试更好地解释。 我在位置'C:\ xampp \ htdocs \ drupalTheme'上有一个名为Content_4_2.zip的zip文件。此zip包含2个xml文件。 现在,我要传递此zip的Web服务方法的定义如下。

<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中,我能够转换zip   将文件写入bytearray并成功调用Web服务。现在我知道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文件。

希望对您有同样的看法。

3 个答案:

答案 0 :(得分:0)

使用PHP的ZIP功能:http://php.net/manual/en/ref.zip.php

本教程应该引导如何使用它的正确途径: http://www.timlinden.com/blog/website-development/unzip-files-with-php/

答案 1 :(得分:0)

假设您想要整体发送zip存档(即不提取它),正如您的第二个测试示例提示的那样,您可能想尝试跳过“字节数组”部分并使用base64_encode()来直接编码文件。使用您的示例代码,它看起来有点像这样:

$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
  )
);

答案 2 :(得分:0)

感谢您的帮助。我通过其他代码找到了我的解决方案 PHP SOAP Transfering Files .Jarrod的第一个答案是对我有用的。感谢支持人员