Почему PHP не создает этот zip-файл (проблема с разрешениями) - PullRequest
5 голосов
/ 01 февраля 2010
  • Я нахожусь на окнах

  • Я использую PHING для архивирования некоторых файлов

  • У меня много архивируемых вещей

  • Сжатие работает, за исключением тех, которые включают определенный набор phing-файлов в архивируемые файлы

  • Когда я отлаживаю, я вижу в ZIP-задаче phing, что ZipArchive :: close возвращает false. Строка ошибки гласит: «Отказано в доступе». В руководстве говорится, что close () - это то, что на самом деле записывает файл.

  • Это не временная связь, другими словами, это происходит, когда это первое, последнее или что-то еще. Все остальные работают. В этом нет ничего особенного.

Вот мой файл сборки: http://pastebin.org/84786 (хорошо для одного месяца)

Проблема в строке 251. Задачи zip, предшествующие и следующие за ним, работают нормально. В отладчике я вижу около 150 файлов, добавленных в zip. Я проверил правильность всех путей в отладчике.

Сборка на Linux работает нормально.

Когда я щелкаю правой кнопкой мыши по папке, куда отправляются zip-файлы, флажок «только для чтения» «скрывается», не проверяется или не проверяется. Раз я оставляю его отмеченным или не отмеченным, нажимаю ок и возвращаюсь в свойства папки, флажок снова «синий». По-видимому, это сделано специально (http://support.microsoft.com/kb/326549), и это не похоже на проблему, поскольку это происходит только с этим одним файлом.

Еще одна странная вещь - если я перейду к строке 252 и изменю набор файлов, чтобы он указывал, например, на файлы из модуля «import» прямо над ним, он создает zip. Однако .tar.gz в строке 236 один и тот же набор файлов работает нормально каждый раз. Так что это происходит только с определенным набором файлов для задач zip. Набор файлов прекрасно работает с задачей tar. Фактически все задачи в комментариях «пакета» ниже, которые также ссылаются на эти файлы, не создаются, но файлы tar.gz делают.

Что дает?

Также: новое наблюдение ... выглядит на обеих машинах с Windows, если я достаточно быстро обновляю вид файла, я вижу, как создается myzipfile.zip.tmp, но myzipfile.zip так и не создается.

На Linux я просто дважды проверил, все работает без нареканий. Пойди разберись.

Ответы [ 3 ]

1 голос
/ 01 февраля 2010

После вашего нового наблюдения кажется, что проблема связана с переименованием файла TMP в настоящий ZIP-файл. Либо существует проблема с именем файла, либо существует какая-то проблема с отложенной записью, когда файл еще не полностью завершен во время переименования.

0 голосов
/ 08 апреля 2010

Исходя из того, что вы говорите об этом, работая в Linux / Unix, я бы предположил, что вы столкнулись с различием в семантике файловой системы / блокировки. В Unix файлы блокируются только добровольно (другие программы все еще могут их читать, если они не «знают о блокировке»). В Windows блокировка обеспечивается операционной системой, что означает, что вы не можете прочитать все файлы, если они используются другой программой, и, конечно, не можете удалить их (у вас должны быть сообщения об ошибках для этой программы). Если я угадаю, вы пытаетесь заархивировать файл, заблокированный активным процессом, и он не работает. (Поскольку другие ваши операции с zip работают, я предполагаю, что запись не является проблемой, и у вас достаточно дискового пространства / квоты (и вы не пишете файлы размером более 2 ГБ в файловой системе FAT))

0 голосов
/ 05 апреля 2010

Я не видел рассматриваемого кода, но у меня была похожая проблема. Это произошло из-за того, что в коде использовались косые черты, а не обратные. Я изменил косые черты и должен был избежать их (\\). Не знаю, помогает ли это, но иногда мелочи вызывают самые большие проблемы.

...