2015-09-16 21 views
3

我有一个数组或超过1,000个文件,需要从我的服务器下载到本地PC。与PHP脚本在同一服务器上下载文件阵列

我需要保持它为每个文件复制相同的文件/文件夹结构。

这是文件的一个例子列表:

/lib/Zend/EventManager/Filter/FilterIterator.php 
/lib/Zend/EventManager/config.php 
/lib/Zend/Text/Figlet/themes.php 
/lib/Zend/Gdata/Analytics/DataEntry.php 
/lib/Zend/Gdata/Analytics/AccountQuery.php 
/lib/Zend/Gdata/Calendar/files.php 
/lib/Zend/Gdata/Query.php 
/lib/Zend/Gdata/Gbase/Feed.php 
/lib/Zend/Gdata/Photos.php 
/lib/Zend/Gdata/Photos/AlbumFeed.php 
/lib/Zend/Gdata/Media/Extension/press.php 
/lib/Zend/Gdata/Media/file.php 
/lib/Zend/Gdata/Extension/RecurrenceException.php 
/lib/Zend/Gdata/Extension/Comments.php 
/lib/Zend/Gdata/Extension/Recurrence.php 
/lib/Zend/Gdata/Extension/Rating.php 

要创建文件夹,浏览到他们FTP,然后下载它们会带我整天!我怎样才能用PHP做到这一点?

这些文件不能在浏览器中用URL访问,所以我必须使用文件路径。


UPDATE

这是我迄今为止尝试使用PHP ZipArchive ...

files.txt
测试文件来测试文件的样品我会需要。最终结果将超过1000个文件

lib/Zend/EventManager/Filter/FilterIterator.php 
lib/Zend/EventManager/config.php 
lib/Zend/Text/Figlet/themes.php 
lib/Zend/Gdata/Analytics/DataEntry.php 
lib/Zend/Gdata/Analytics/AccountQuery.php 
lib/Zend/Gdata/Calendar/files.php 
lib/Zend/Gdata/Query.php 
lib/Zend/Gdata/Gbase/Feed.php 
lib/Zend/Gdata/Photos.php 
lib/Zend/Gdata/Photos/AlbumFeed.php 
lib/Zend/Gdata/Media/Extension/press.php 
lib/Zend/Gdata/Media/file.php 
lib/Zend/Gdata/Extension/RecurrenceException.php 
lib/Zend/Gdata/Extension/Comments.php 
lib/Zend/Gdata/Extension/Recurrence.php 
lib/Zend/Gdata/Extension/Rating.php 
lib/Zend/Gdata/Books/VolumeQuery.php 
lib/Zend/Gdata/Books/VolumeFeed.php 
lib/Zend/Gdata/Exif/themes.php 
lib/Zend/Gdata/MimeBodyString.php 
lib/Zend/Gdata/HttpAdapterStreamingProxy.php 
lib/Zend/Gdata/Spreadsheets/Extension/test.php 
lib/Zend/Gdata/Spreadsheets/ListEntry.php 
lib/Zend/Gdata/Gapps/Query.php 
lib/Zend/Gdata/Gapps/GroupQuery.php 
lib/Zend/Gdata/Gapps/EmailListRecipientQuery.php 
lib/Zend/Gdata/Gapps/Error.php 
lib/Zend/Gdata/Gapps/OwnerFeed.php 
lib/Zend/Gdata/Gapps/alias.php 
lib/Zend/Gdata/Gapps/MemberQuery.php 
lib/Zend/Gdata/Gapps/EmailListQuery.php 
lib/Zend/Gdata/Gapps/NicknameFeed.php 
lib/Zend/Gdata/Exif.php 
lib/Zend/Gdata/App/LoggingHttpClientAdapterSocket.php 
lib/Zend/Gdata/App/Extension.php 
lib/Zend/Gdata/App/MediaEntry.php 
lib/Zend/Gdata/App/FeedEntryParent.php 
lib/Zend/Gdata/App/AuthException.php 

的download.php

$zip = new ZipArchive(); 
$filename = "./test112.zip"; 

if ($zip->open($filename, ZipArchive::CREATE)!==TRUE) { 
    exit("cannot open <$filename>\n"); 
}else{ 
    echo 'zip good'; 
} 
//$zip->addFromString("testfilephp.txt" . time(), "#1 This is a test string added as testfilephp.txt.\n"); 
//$zip->addFile("lib/Zend/files2.txt" ,"lib/Zend/EventManager/test.php"); 

// list of files to download 
$lines = file('files.txt'); 

// Loop through our array of files from the files.txt file 
foreach ($lines as $line_num =>$file) { 
    //echo "Line #<b>{$line_num}</b> : " . htmlspecialchars($file) . "<br />\n"; 

    // Add files to Zip file incliuding folder structure 
    $zip->addFile($file,$file); 

    echo $file; 
} 

// show number of files in new zip file and close zip archive 
echo "numfiles: " . $zip->numFiles . "\n"; 
echo "status:" . $zip->status . "\n"; 
$zip->close(); 

结果

这将创建我的zip文件,但不是添加的所有文件,它只是增加了最后在我的文件阵列中的文件到zip压缩文件!在这个例子中就是lib/Zend/Gdata/App/AuthException.php

+2

为什么不直接压缩服务器上的整个文件夹,然后下载压缩文件?这就是通常传输“许多文件”,在这里在互联网上...... – Siguza

+0

@Siguza整个服务器文件将是多个GB和数千个我不需要的文件。我只需要每个文件夹中的某些文件。这只是不实际 – JasonDavis

+0

你有SSH访问服务器?因为制作一个简单的脚本来查找和gzip文件会更容易。 –

回答

1

当你有SSH访问,你可以简单地在服务器上运行此:

# Change '*.php' to whatever you want to retrieve: 
find . -name '*.php' -print | zip archive.zip [email protected] 

然后你就可以通过SCP或FTP获取文件archive.zip。

+0

有没有办法来定义我需要的那些文件的文件列表和文件夹结构?我有一个包含文件夹路径和文件名的大约1,000个文件的PHP数组。 – JasonDavis

+0

您可以使用'-name'参数定义您需要的文件。如果你需要多个标准。你可以使用-o:'find。 -name'* .php'-o -name'* .css''。或者你的意思是你已经有了文件列表?在这种情况下,您可以跳过find命令:'cat yourlist.txt | zip archive.zip - @'。 –

+0

是的我有一个文件路径和名称为一个新行上的每个文件的1,000个文件的列表。我会尝试你的新答案,谢谢 – JasonDavis

相关问题