Странное поведение rename () в PHP

У меня странная проблема с моим php. Всякий раз, когда я пытаюсь переместить файл с помощью rename (), не только файл не перемещается, но также удаляется каталог, в который он должен быть скопирован, вместе со всеми файлами в нем. Исходный код:

rename('temp.odt', 'tmp/report.odt');

, но я уже пробовал другие разделители путей, такие как

rename('temp.odt', 'tmp\report.odt');

rename('temp.odt', 'tmp\\report.odt');

rename('temp.odt', 'tmp' . DIRECTORY_SEPARATOR . 'report.odt');

rename('C:\wamp\www\zaiko\temp.odt', 'C:\wamp\www\zaiko\tmp\report.odt');

, все безрезультатно. Код поступает из стороннего модуля, который используется в системе, над которой я работаю.

Точки хорошо проверены:

  1. Файл temp.odt действительно существует в текущем каталоге;
  2. Каталог tmp существует, и в нем есть несколько файлов. И не только для чтения.
  3. Целевой файл еще не существует (фактическое имя файла имеет метку времени, я сократил ее здесь для простоты)

После выполнения rename () команда 'temp.odt 'не поврежден в своем исходном месте, а папка' tmp ' исчезла , как и все, что внутри нее. Выдается следующее предупреждение:

(!) Предупреждение: rename (temp.odt, tmp \ report.odt) [function.rename]: системе не удалось найти указанный путь *. (код: 3) в C: \ wamp \ www \ zaiko \ modules \ mod_deliver.php в строке 192

* переведено с португальского

Запуск: Apache 2.2.17 с PHP 5.3.5 в Windows XP с NTFS


Редактирование:

Только что нашел причину проблемы. Оказывается, модуль, используемый приложением, в свою очередь, использует библиотеку сжатия; в этой библиотеке используется временная папка с точно таким же именем, как и в приложении.

Он должен использовать какой-то кеш, который объяснил бы, почему ошибка не появлялась 100% раз.

Проблема решена изменением имени папки 'tmp' на любое другое.

Всем спасибо за ваше время и извините за то, что беспокоили вас такой глупостью, которая, как оказалось, не имела абсолютно никакого отношения к моей первоначальной догадке и, следовательно, к сформулированному вопросу.

6
задан Brian Tompsett - 汤莱恩 21 August 2015 в 10:20
поделиться