PHP переименовать / скопировать ... file_put / get_contents? - PullRequest
1 голос
/ 15 марта 2012

Я перепробовал целый ряд исправлений для своей проблемы, но не нашел решения, которое работает ...
Проблема проста ...
Допустим, у вас есть такая структура каталогов:

/website
  /admin
    /phpscript.php
  /img
    /folder1
      /image1.png
      /image2.png

То, что я в основном пытаюсь сделать, это: Создать папку ... например: folder2

/website
  /admin
    /phpscript.php
  /img
    /folder1
      /image1.png
      /image2.png
    /folder2

, а затем переместите image1 и image2 в папку2

Сценарий php находится в admin , где я разработал действие перемещения, которое будет выполняться.

Я пытался:
rename('../img/folder1/image1.png', '../img/folder2/image1.png');, что не удалось

copy('../img/folder1/image1.png', '../img/folder2/image1.png');, что также не удалось


Я могу использовать копирование и переименование, когда путь к файлу совпадает ... например:

rename('../img/folder1/image1.png', '../img/folder1/image3.png');

Это переименовано из image1.png в image3.png (image1.png больше не существует на сервере, а image3.png был создан сервером)

copy('../img/folder1/image1.png', '../img/folder1/image3.png');

Это сделало дубликат image1.png с именем image3.png (оба image1.png и image3.png были на сервере) Там все разрешения для папок на сервере Apache
... И я заметил, что вы можете сделать:

file_get_contents('../img/folder1/image1.png')
and then do
file_put_contents('../img/folder2/image1.png')

пока папка существует ... по какой-то причине она не любит перемещаться, когда mkdir () используется непосредственно перед file_put_contents ()

Это в основном мой код:

$path = "img/"; //Generated somewhere in code above
$old_folder = "folder1/"; //Generated somewhere in code above
$folder = "folder2/"; //Generated somewhere in code above

$tmp_old_path = "../$path$old_folder";
$tmp_new_path = "../$path$folder";

mkdir($tmp_new_path);

$FP = scandir($tmp_old_path);

foreach ($FP as $key => $val){
    if($val != '.' && $val != '..'){
        $str_contents = file_get_contents($tmp_old_path.$val);
        file_put_contents($tmp_new_path.$val, $str_contents);
    }
}

Ответы [ 2 ]

0 голосов
/ 15 марта 2012

Я нашел ответ на свой вопрос ...

, и это была проблема с разрешениями на сервере, который я использовал.

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

Теперь я знаю -.-

$old_folder = 'image/folder1';
$new_folder = 'image/folder2';

rename($old_folder, $new_folder);

Обычно это проблемы с разрешением из того, что я видел онлайн ... сумасшедший!

0 голосов
/ 15 марта 2012

Попробуйте с приведенным ниже фрагментом.Убедитесь, что у вас достаточно прав для выполнения exec команды

<?php
$cmd = 'mv "../img/folder1/image1.png" "../img/folder2/image1.png"';
exec($cmd, $output, $return_val);

if ($return_val == 0) {
   echo "success";
} else {
   echo "failed";
}
?>
...