我一直试图只压缩.pdf,.mp3& .zip目录中的文件,但它压缩所有目录和文件。我只想要具有上述扩展名的文件。
如果这不可能发生,那么我想排除一些文件,比如我要排除index.php,foo.html,style.css&的script.js。
function Zip($source, $destination)
{
if (!extension_loaded('zip') || !file_exists($source)) {
return false;
}
$zip = new ZipArchive();
if (!$zip->open($destination, ZIPARCHIVE::CREATE)) {
return false;
}
$source = str_replace('\\', '/', realpath($source));
if (is_dir($source) === true)
{
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST);
$exclude = array('themes', 'style.css');
foreach ($files as $file)
{
$file = str_replace('\\', '/', $file);
if( in_array(substr($file, strrpos($file, '/')+1), array('.', '..')) )
continue;
if (!in_array($file, $exclude)) {
$file = realpath($file);
if (is_dir($file) === true)
{
$zip->addEmptyDir(str_replace($source . '/', '', $file . '/'));
}
else if (is_file($file) === true)
{
$zip->addFromString(str_replace($source . '/', '', $file), file_get_contents($file));
}
}
}
}
else if (is_file($source) === true)
{
$zip->addFromString(basename($source), file_get_contents($source));
}
return $zip->close();
}
请帮帮我,谢谢!
答案 0 :(得分:1)
列出要排除/包含在变量中的所有扩展名。 然后检查每个苍蝇扩展并跳过它们是否在上面的列表中。可以使用in_array完成,如上面所示的Debflav'。
请使用以下函数获取文件扩展名:
/**
* Get file extension type if we provide the filename.
* @param string $filename eg. 'filename.jpg'
*
* @return string Extension only eg. "jpg", 'gif'
*/
function _get_file_extension($filename=null)
{
$e = explode('.', $filename);
$extension = (count($e) > 0 ) ? $e[ ( count($e) - 1) ] : null;
return strtolower($extension);
}
希望有所帮助!
答案 1 :(得分:0)
正如我在评论中所说,您只能处理扩展名为mp3,pdf [...]的文件。因为您使用了RecursiveDirectoryIterator
我将执行以下操作:
if (is_dir($source) === true)
{
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST);
$allowedExtensions = array('mp3', 'pdf');
foreach ($files as $file) {
{
if (in_array($file->getExtension(), $allowExtensions)
{
// Your own logic
}
}
}
顺便说一句,DirectoryIterator自PHP 5起可用,但自PHP 5.3.6起可用getExtension()
。如果您使用的是PHP< 5.3.6您可以使用pathinfo()。