Parser une url ftp

Contenu du snippet

Cette fonction sépare tous les élements importants d'une URL ftp. Je pense que j'ai traité toutes les possibilités d'adresse. Si j'en ai oublié une, merci de me le faire savoir.

Différents types traités :
- ftp://ip/
- ftp://ip:port/
- ftp://login:password@ip/
- ftp://login:password@ip:port/

Source / Exemple :


<?php
	define('DEFAULT_PORT', 21);
	define('DEFAULT_LOGIN', 'Anonymous');
	define('DEFAULT_PASSW', 'anonymous@plifplaf.net');

	$url = 'ftp://192.168.0.1:4121/test/';
			
	function parse_ftp_url($url)
	{
		$exp = array(
			'^(.+):(.*)@(.+):([0-9]+)(.*)$', 	// login:passwd@ip:port/path
			'^(.+):(.*)@([^/]+)(.*)$', 		// login:passwd@ip/path
			'^(.+):([0-9]+)(.*)$', 			// ip:port/path
			'^([^/]+)(.*)$' 			// ip/path
		);
							
		if ( substr($url, 0, 6) == 'ftp://' )
			$url = substr($url, 6);
											
		$n = sizeof($exp);
				
		for ( $i = 0; $i < $n; ++$i )
		{
			if ( ereg($exp[$i], $url, $out) )
			{
				switch($i)
				{
					case 0:
						return(
							array(
								'server' 	=> $out[3],
								'port'		=> $out[4],
								'login'		=> $out[1],
								'passw'		=> $out[2],
								'path'		=> $out[5] == '' ? '/' : $out[5]
							)
						);
							
					case 1:
						return(
							array(
								'server' 	=> $out[3],
								'port'		=> DEFAULT_PORT,
								'login'		=> $out[1],
								'passw'		=> $out[2],
								'path'		=> $out[4] == '' ? '/' : $out[4]
							)
						);
								
					case 2:
						return(
							array(
								'server' 	=> $out[1],
								'port'		=> $out[2],
								'login'		=> DEFAULT_LOGIN,
								'passw'		=> DEFAULT_PASSW,
								'path'		=> $out[3] == '' ? '/' : $out[3]
							)
						);
								
					case 3:
						return(
							array(
								'server' 	=> $out[1],
								'port'		=> DEFAULT_PORT,
								'login'		=> DEFAULT_LOGIN,
								'passw'		=> DEFAULT_PASSW,
								'path'		=> $out[2] == '' ? '/' : $out[2]
							)
						);							
				} // switch
			} // if 
		} // for
				
		return(FALSE);
	} // end of function
			
	$res = parse_ftp_url($url);
			
	if ( $res == FALSE )
	{
		echo('L\'URL <b>' . $url . '</b> est invalide<br />' . "\n");
	}
	else
	{
		print_r($res);
	}
			
?>

Conclusion :


La fonction retourne FALSE si l'url passée en argument ne correspond à aucun masque, sinon, elle retourne le tableau contenant les informations.
N'hésitez pas à me le faire savoir s'il y a un quelquonque bug...

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.