Переместить файл в каталог

Так что с вашей помощью мне удалось собрать нижеприведенное.

$dir = "./reporting/live-metrics/";
$des = "./reporting/historic-metrics/";
$ctime = time();

foreach (glob($dir."*") as $file) {

$live = file_get_contents($file);

if (strpos($live, 'CORO') === false && filemtime($file) < time() - 1 * 10) {
$exclude[] = $live;
$lines = file( $file , FILE_IGNORE_NEW_LINES );
$lines[3] = 'Taken Down';
$lines[5] = $ctime;
file_put_contents( $file , implode( "\n", $lines ) );
if (!file_exists($des.basename($file).PHP_EOL)) {
mkdir($des.basename($file), 0777, true);
}
rename($file,$des.$ctime);
}
}

Моя проблема в том, что я пытаюсь переместить файл в новый созданный каталог, но у меня возникла небольшая проблема с ним. Независимо от того, что я делаю, я могу заставить его перейти только в $ des, но я не могу заставить его перейти в динамически созданный каталог для каждого конкретного файла. Я предполагаю, что это связано с тем, что я не использую переименование для правильных параметров. Ниже приведены некоторые комбинации, которые я пытался заставить переименовать и переместить.

rename($file,$des.basename($file).PHP_EOL.$ctime); //doesn't move or rename
rename($file,$des.basename($file).$ctime); //adds to historic-metrics/ as jason1465519298

Я также попытался создать функцию и установить переименование для вызова этого. например.

$path = $des.basename($file).PHP_EOL;
rename($file,$path.$ctime);

В настоящее время сценарий великолепен вплоть до перемещения файла. Он будет перемещен в ./reporting/historic-metrics/, но я бы хотел, чтобы он переместился в только что созданный каталог. Например, если файл, который он сейчас обрабатывает, называется «Jason», то он создаст ./reporting/historic-metrics/Jason, но переместит файл в ./reporting/historic-metrics/

1

Решение

Кажется, есть две возможности:

  1. Путь к исходному или целевому файлу может быть неправильным, вы можете распечатать и проверить

  2. Недавно созданный каталог назначения получает
    правильное разрешение & владение.

В противном случае ваш сценарий выглядит хорошо.

0

Другие решения

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

$dir = "./reporting/live-metrics/";
$des = "./reporting/historic-metrics/";
$ctime = time();

foreach (glob($dir."*") as $file) {

$live = file_get_contents($file);

if (strpos($live, 'CORO') === false && filemtime($file) < time() - 1 * 10) {
$exclude[] = $live;
$lines = file( $file , FILE_IGNORE_NEW_LINES );
$lines[3] = 'Taken Down';
$lines[5] = $ctime;
file_put_contents( $file , implode( "\n", $lines ) );
if (!file_exists($des.basename($file).PHP_EOL)) {
mkdir($des.basename($file), 0777, true);
}
$user = basename($file); //Gets file name that was used in mkdir
$path = (String) $des.$user."/"; //Compiles variables into string
rename($file,$path.$ctime);
}
}
0

По вопросам рекламы [email protected]