Переименование PHP не работает - PullRequest
0 голосов
/ 31 июля 2010

Я загружаю файл с помощью cURL, используя опцию CURLOPT_FILE, а затем пытаюсь переименовать загруженный файл, например, из «1.txt» в «2.txt». Не удается переименовать файл.

PHP выдает ошибку:

"Предупреждение: переименовать (E: \ ... / test / 1.txt, E: \ ... / test / 2.txt) [function.rename]: такого файла или каталога в E: \ нет. ../test\lib\CURL\Download.php в строке 51 "

После этого я запускаю только однострочный скрипт:

<?php rename("E:\.../test/1.txt","E:\.../test/2.txt");

и переименование выполнено успешно.

Почему это работает сейчас? Та же операция переименования.

Что-то другое:

  1. ОС Windows

  2. Файл "1.txt" действительно существует

  3. Я использую абсолютный путь при переименовании

  4. перед переименованием я закрываю дескриптор файла, используемый cURL, с помощью fclose ()

Что не так? Как переименовать скачанный файл в первом скрипте без ошибки?

Ответы [ 4 ]

2 голосов
/ 31 июля 2010

Вы должны быть осторожны с разделителями каталогов в стиле Windows (\) в строках.Вы используете строки в двойных кавычках, поэтому любая обратная косая черта будет интерпретироваться как escape-последовательность, а не как разделитель пути.Либо используйте косую черту, либо одинарные кавычки:

$src = "E:\\xampp\\htdocs\\test\\1.txt";
$src = 'E:\xampp\htdocs\test\1.txt';
$src = "E:/xampp/htdocs/test/1.txt";

- все получится одинаково, но если вы попробуете:

$src = "E:\xampp\htdocs\test\1.txt";

PHP оценит это как:

$src = "E:xampphtdocstest1.txt";
2 голосов
/ 31 июля 2010

Я не думаю, что PHP поддерживает 3-х точечный синтаксис (...), это особенность командной строки Windows.

Также: вы можете попробовать использовать realpath для начального имени, чтобы убедиться, что оно существует

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

как решение, просто выполните

<?php rename("E:\..\../test/1.txt","E:\..\../test/2.txt");

Должен решить вашу проблему:)

0 голосов
/ 25 июня 2015

У меня есть эта проблема, и я решаю ее с помощью этого кода:

$oldname ='E:\.../test/1.txt';
$newname ='E:\.../test/2.txt';
rename($oldname,$newname);
0 голосов
/ 31 июля 2010

Так как OP говорит, что второй сценарий после запуска с той же строкой переименования работает, я не понимаю, насколько актуален другой текущий ответ.Я предполагаю, что вы используете fopen для создания файлового ресурса, запускающего curl_exec ($ ch);затем попытка переименовать файл без вызова fclose();, поскольку файл будет автоматически закрыт при выходе из сценария, это объясняет, почему будет работать второй сценарий с тем же кодом.

...