我尝试使用copy()将多个文件从Web服务器上的一个域复制到另一个域并循环遍历文件列表,但它只复制列表中的最后一个文件。 / p>
这是files-list.txt的内容:
/templates/template.php
/admin/admin.css
/admin/codeSnippets.php
/admin/editPage.php
/admin/index.php
/admin/functions.php
/admin/style.php
/admin/editPost.php
/admin/createPage.php
/admin/createPost.php
/admin/configuration.php
此脚本在我尝试将文件复制到的网站上运行。这是脚本:
$filesList = file_get_contents("http://copyfromhere.com/copythesefiles/files-list.txt");
$filesArray = explode("\n", $filesList);
foreach($filesArray as $file) {
$filename = trim('http://copyfromhere.com/copythesefiles' . $file);
$dest = "destFolder" . $file;
if(!@copy($filename, $dest))
{
$errors= error_get_last();
echo "COPY ERROR: ".$errors['type'];
echo "<br />\n".$errors['message'];
} else {
echo "$filename copied to $dest from remote!<br/>";
}
}
我按照自己的意愿单独获取每个文件的肯定消息,但是当我检查目录时,只有files-list.txt中的最后一个文件存在。我试过更改订单,所以我知道问题在于脚本,而不是任何单个文件。
echo语句的输出如下所示:
http://copyfromhere.com/copythesefiles/admin/admin.css copied to updates/admin/editPage.php from remote!
http://copyfromhere.com/copythesefiles/admin/admin.css copied to updates/admin/editPost.php from remote!
http://copyfromhere.com/copythesefiles/admin/admin.css copied to updates/admin/index.php from remote!
等
答案 0 :(得分:1)
除非您从该远程站点获取的数据在路径/文件名中具有前导/
,否则您无法生成正确的路径:
$file = 'foo.txt'; // example only
$dest = "destFolder" . $file;
产生destFolderfoo.txt
,你最终乱扔你的脚本的工作目录与一堆不稳定的文件名。也许你想要
$dest = 'destFolder/' . $file;
^----note this
代替。
答案 1 :(得分:1)
我稍微修改了您的代码,并在我的本地开发服务器上进行了测试。以下似乎有效:
$fileURL = 'http://copyfromhere.com/copythesefiles';
$filesArray = file("$fileURL/files-list.txt", FILE_IGNORE_NEW_LINES);
foreach ($filesArray as $file) {
$fileName = "$fileURL/$file";
$dest = str_replace($fileURL, 'destFolder', $fileName);
if (!copy($fileName, $dest)) {
$errors= error_get_last();
echo "COPY ERROR: ".$errors['type'];
echo "<br />\n".$errors['message'];
}
else {
echo "$fileName copied to $dest from remote!<br/>";
}
}
这使用了Mark B指出的相同修复程序,但也整合了一些代码。