如何在PHP代码中访问zip文件
嘿,伙计们,很抱歉格式不好,谢谢你们的支持。这次我会尽量解释得更好。 我有一个名为Content_4_2.zip的zip文件,位置为“C:\xampp\htdocs\drupalTheme”。此zip包含2个xml文件。 现在,我想传递这个zip的web服务方法的定义如下如何在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&
<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
)
);