Bonjour,

je n'arrive pas à faire une archive d'un dossier en récupérant tous les sous dossiers de manière récursive en PHP.

La fonction ZIP est bien configurée.

Le code donne ça (c'est du stackoverflow) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
public static function createArchive( $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 );
 
				foreach ( $files as $file )
				{
					$file = str_replace( '\\', '/', $file );
 
					// Ignore "." and ".." folders
					if ( in_array( substr( $file, strrpos( $file, '/' ) + 1 ), ['.', '..'] ) )
					{
						continue;
					}
 
					$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();
		}
L'erreur :
Warning: ZipArchive::close(): Failure to create temporary file: Permission denied.
Droits d'accès : Lecture/Écriture/Exécution (777).

Sans vouloir troller, est-ce trop demandé d'avoir une blibliothèque standard PHP avec des fonctions de ce type ? createZipFromDirectory en C#