2012-09-09 20 views
1

我想将文件从一个目录移动到另一个目录。然而,诀窍是,我想移动整个路径的文件。在PHP中移动整个目录树的最佳方法

说我有文件在

/my/current/directory/file.jpg 

,我想将它移动到

/newfolder/my/current/directory/file.jpg 

因此,大家可以看到我要保留相对路径,以便在未来能打动我如果我需要的话,它可以返回到/my/current/directory/。还有一件事是,/newfolder是空的 - 我可以在那里复制任何东西,所以没有预制的结构(另一个文件可能被复制到/newfolder/my/another/folder/anotherfile.gif。理想情况下,我希望能够创建一个方法,当我通过提交给它的原始路径目标总是相同的 - /newfolder/...

+0

是可以执行系统命令,或者你想在PHP中做到这一点? – Hawili

+0

它可以这么做 – RandomWhiteTrash

回答

0

如果你在unix中,你可以尝试这样的事情/ linux环境:

$original_file = '/my/current/directory/file.jpg'; 
$new_file = "/newfolder{$original_file}"; 

// create new diretory stricture (note the "-p" option of mkdir) 
$new_dir = dirname($new_file); 
if (!is_dir($new_dir)) { 
    $command = 'mkdir -p ' . escapeshellarg($new_dir); 
    exec($command); 
} 

echo rename($original_file, $new_file) ? 'success' : 'failed'; 
+0

这是我的想法最初 - 我错过了dirname()的存在,它似乎有点麻烦。除此之外,它就像一个魅力。为什么是-1? – RandomWhiteTrash

+0

因为我写move()而不是rename(),所以我当然更新了! –

0

你可以简单地使用下面的

<?php 
$output = `mv "/my/current/directory/file.jpg" "/newfolder/my/current/directory/file.jpg"`; 
if ($output == 0) { 
    echo "success"; 
} else { 
    echo "fail"; 
} 
?> 

请注意我用反引号`来执行,而不是使用功能象exec

+0

'echo($ output)? '失败':'成功';';) –

+0

对不起,但在我的测试中,如果目标目录不存在,它不会复制该文件。 – RandomWhiteTrash

相关问题