Crear archivo zip desde carpetas

Me pregunto si es posible crear un archivo zip desde carpetas. Tengo una carpeta y en estas carpetas hay cuatro carpetas y hay diferentes tipos de archivos. Ahora quiero comprimir esas cuatro carpetas de forma recursiva con sus archivos.

Lo intentésave() ygzip() pero no hacen lo que quiero

¿Alguien tiene una pista para mí?