将文件移动到目录

时间:2016-06-10 00:53:55

标签: php rename move

所以在你的帮助下我能够组装下面的内容。

$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/但我希望它移动到刚创建的目录。 EG,如果它当前正在处理的文件叫做Jason&#39;然后它会创建./reporting/historic-metrics/Jason但是将文件移动到./reporting/historic-metrics /

2 个答案:

答案 0 :(得分:0)

似乎有两种可能性:

  1. 源文件路径或目标文件路径可能有误,您可以打印并检查

  2. 新创建的目标目录正在获取 正确的许可和所有权。

  3. 否则您的脚本看起来没问题。

答案 1 :(得分: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);
}
}