Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP代码中访问zip文件_Php_Drupal 6 - Fatal编程技术网

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

如何在PHP代码中访问zip文件,php,drupal-6,Php,Drupal 6,嘿,伙计们,很抱歉格式不好,谢谢你们的支持。这次我会尽量解释得更好。 我有一个名为Content_4_2.zip的zip文件,位置为“C:\xampp\htdocs\drupalTheme”。此zip包含2个xml文件。 现在,我想传递这个zip的web服务方法的定义如下 <soap:Body> <AddFileToProject xmlns="http://tempuri.org/"> <Ticket>string</Ticket&

嘿,伙计们,很抱歉格式不好,谢谢你们的支持。这次我会尽量解释得更好。 我有一个名为Content_4_2.zip的zip文件,位置为“C:\xampp\htdocs\drupalTheme”。此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>
这是一种方法

 $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文件损坏

希望您能对相同的内容发表看法。

使用PHP的ZIP函数:

本教程将引导您找到正确的使用方法:

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

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

欢迎来到SO!有一些库可供使用:谷歌
drupal-zip
php-zip
应该会提供您所需的一切。现在它已重新格式化,我不确定您的问题是什么。你需要解压zip文件吗,或者这是关于其他事情吗?@Angela Sim:你的问题并不完全清楚-你说“在Java中,我能够将zip文件转换成bytearray”,这听起来像是你刚刚转换(并发送)了整个zip文件。但是在您的测试示例中,您首先尝试解压缩归档文件并发送包含的文件。你想发送哪些文件-整个zip存档文件,还是单独发送包含的文件?@Henrik Opek:我说我在使用基于Java的CMS时可以用Java执行类似的操作。现在我正在用PHP开发Drupal6,我正在尝试做同样的事情。我已经通过我的PHP代码创建了一个zip文件,它在“C:/xampp/htdocs/drupalTheme/Content_4_2.zip”位置创建了一个zip文件。现在我需要将该zip文件发送到我提到的webservice方法。请随意询问更多说明。@Angela Sim:好的,我在下面添加了发送整个zip文件的答案,对内容使用显式base64编码-如果这能解决您的问题,您可能需要尝试。
$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
  )
);