Controle de la taille d'un fichier distant

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 285 fois - Téléchargée 28 fois

Contenu du snippet

ce code est la version (nexen.net) qui marche pour les sites heberges (hote virtuel) et simplifie pour etre ici d'un tel comme dans phpBB. pas de commentaire car tard et fatigué mais je reviendrai si vous avez des questions. il y as trois fonctions
is_img qui verifie si l'url rentre se termine par gif ou jpg ca evite de se connecter pour rien mais bon .gif marche. on peut toujours rechercher par expression reguliere...

is_size c'est la fonction en elle meme

add_http rajoute http:// si ca n'y est pas

le morceau de code c'est pour montrer une utilisation

Source / Exemple :


function is_img($this){
	$res = false;
	if(eregi(".(jpg|gif)$",$this))
		{
			$res = true;
				}
	return $res;
}

function is_size($this){
$res = false;
	if (eregi('^(http:\/\/)[a-z0-9\-]+\.[a-z0-9\-]+\.[a-z]+',$this,$reg))
		{
			$host = $reg[0];
				}
	
	$path = explode($reg[0]."/",$this);
	$limit_size = 21000;  // en gros 20ko mais vous pouvez changer
	$fp = fsockopen($host, 80, &$errno, &$errstr, 30);

	if(!$fp) 
		{
			$res = false;
				}
	else
		{
			fputs($fp,"HEAD $host/$path[1] HTTP/1.0\r\n");
			fputs($fp,"Connection: close \r\n\r\n");

  			while(!feof($fp))
				{ 
  					$buffer = fgets($fp, 1024); 
  					$split = explode(' ', $buffer); 
  						if($split[0]=="Content-Length:")
							{ 
  								$size=(int)$split[1];
								if ($size < $limit_size)
									{
			   							$res = true;
											}
								break;
 										}
						}
			fclose($fp);
			}
	}

function add_http($this){
	if(eregi("^http://", $this))
		{
			return $this;
			}
	else
		{
			$this = "http://".$this;
			return $this;
			}
	}

/////le morceau de code
.....
if ($logo!='')
		{
			$logo = add_http($logo);
			if (is_img($logo))
				{
					if (!is_size($logo))
						{
							$error++;
							$error_level[$error] = "Le logo ne sera pas affiché. Vérifiez le poids de l'image et la validité du lien.";
							$logo = '';
								}
					}
			else
				{
					$error++;
					$error_level[$error] = "Le logo ne sera pas affiché. Format de fichier invalide.";
					$logo = '';
						}
			}
......

//pour utiliser error_level pour ceux qui se demande a quoi ca sert

if ($error > 0)
					{
						echo "<font color=\"#ff3300\" size=\"+1\">";
						for($i=1; $i<=$error; $i++)
							{
								echo "$error_level[$i]\n<br>";
									}
						echo "</font>\n<br>\n<br>";
							}
.....

Conclusion :


Voila bon c'est pas le code du siecle (voir au dessus ) mais ca peut servir pour une section membre, un forum enfin un truc perso quoi.
Pour les mauvaises langues qui pensent que je commentes pas parce que c'est pas de moi he bien desole mais il est 3h22. je mange du code depuis 8 h ce matin et j'ai pas envie de raconter des betises.( et pis j'suis fatigué aussi )
Je vais pousser aussi pour l'upload de fichiers distant par cette voie tres bientot mais bon vous pouvez toujours voir phpBB il le fait tres bien.

A voir également

Ajouter un commentaire

Commentaire

Messages postés
15
Date d'inscription
samedi 13 avril 2002
Statut
Membre
Dernière intervention
28 avril 2003

allez j'en dis quand meme quelque chose pourquoi
fputs($fp,"HEAD $host/$path[1] HTTP/1.0
");
et pas
fputs($fp,"GET $host/$path[1] HTTP/1.0
");
he bien parce que ce qui nous interresse se trouve dans les entete http, get reviens a demander le fichier complet. essayez en mettant
echo $buffer;
apres
$buffer = fgets($fp, 1024);
virer le reste (enfin ce qui sert plus )
if($split[0]=="Content-Length:")
{
$size=(int)$split[1];
if ($size < $limit_size)
{
$res = TRUE;
}
break;
}
et lancer le script avec head puis get vous verrez la difference ...
Pour le reste je vais vous detaillez les bug rencontrés mais le script de nexen ne marchait pas sur un hote virtuel (i.e il renvoyait la page de free quand vous mettez www.site.free.fr au lieu de l'image demandé sur un hote en particulier) la ca marche dans tous les cas virtuels ou pas.
bon je vais me couchez

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.