Как получить доступ к zip-файлам в PHP-коде - PullRequest
1 голос
/ 15 декабря 2011

Привет, ребята, извините за плохое форматирование и спасибо за вашу поддержку.Я постараюсь объяснить лучше в этот раз.У меня есть zip-файл с именем Content_4_2.zip в папке 'C: \ xampp \ htdocs \ drupalTheme'.Этот zip содержит 2 xml файла.Теперь метод веб-службы, которому я хочу передать этот 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 я смог преобразовать zip-файл в байтовый массив, и веб-сервис был успешно вызван. Теперь я знаю, что в PHP такого преобразования нет.Итак, мой подход: 1. Получите имя zip-файла из каталога. 2. Передайте содержимое zip в веб-сервис.

Я пробовал это:

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

Обе приводят к отправке поврежденных почтовых файлов.

Хотели бы, чтобы ваши взгляды были одинаковыми.

Ответы [ 3 ]

0 голосов
/ 15 декабря 2011

Предполагая, что вы хотите отправить zip-архив целиком (т.е. без его распаковки), как подсказывает ваш второй тестовый пример, вы можете попробовать пропустить часть 'byte array' и просто использовать 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
  )
);
0 голосов
/ 16 декабря 2011

Спасибо за вашу помощь. Я нашел свое решение с помощью другого кода PHP SOAP Передача файлов . Первый ответ Джаррода был тем, что сработало для меня.Спасибо за поддержку, ребята

0 голосов
/ 15 декабря 2011

Использование PHP-функций ZIP: http://php.net/manual/en/ref.zip.php

Из этого туториала вы узнаете, как его использовать: http://www.timlinden.com/blog/website-development/unzip-files-with-php/

...