Connaitre l'existance d'un fichier sur un serveur http externe

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 041 fois - Téléchargée 17 fois

Contenu du snippet

Bonjour à tous.
(Nota : Je n'ai pas trouvé de fonctions similaires, si c'est le cas, veuillez m'en excuser)

L'idée, c'est de tester l'existence d'un fichier sur un serveur http afin de l'ouvrir apres.
En effet, si vous faites un fopen ('http://www.domain.tld/mon_fichier.xml', 'r'); et que le fichier n'existe pas, la fonction fopen va tourner pendant toute la durée du Max Execution Time.
Afin de ne pas perdre de temps, j'ai fait une petite fonction qui permet de retourner un boolean disant si le fichier demandé existe.

Voila la source :

Source / Exemple :


<?php
function online_file_exist ($sUrl, $iPort = 80) {
	if (!is_string ($sUrl)) { // Si le premier paramètre n'est pas un String
		die ('Invalide paramètre. Le premier paramètre doit être un String');
		// ou throw new exception ('...'); au choix
	}
	else if (!is_int ($iPort)) { // Si le second paramètre n'est pas un entier
		die ('Invalide paramètre. Le second paramètre doit être un entier');
		// ou throw new exception ('...'); au choix
	}
	else { // Sinon
		// On récupere la valeur du serveur
		preg_match ('#\/\/(.*)\/(.*)#', $sUrl, $sUrlInfo);
		
		// Le Serveur
		$sServerName = $sUrlInfo[1];

		// Le fichier demandé
		$sFilePath = $sUrlInfo[2];

		// On ouvre le socket
		if (($rSock = @fsockopen($sServerName, $iPort)) === false) {
			die ('Impossible d\'ouvrir '.$sServerName.'. Le server n\'est pas accessible');
			// ou throw new exception ('...'); au choix
		}

		// On envoie la requete de demande de fichier
		$sRequest = 'GET /'.$sFilePath.' HTTP/1.1'."\r\n";
		$sRequest .= 'Host: '.$sServerName."\r\n";
		$sRequest .= 'Connection: Close'."\r\n\r\n";
	
		if (!@fwrite ($rSock, $sRequest)) {
			die ('Impossible d\'envoyer la requête !');
			// ou throw new exception ('...'); au choix
		}

		// On récupere la réponse
		$sHttpResponse = @fgets($rSock, 128);
		// et on ferme la resource
		@fclose($rSock);

		// Si la réponse est bonne (200), alors on retourne true, sinon false;
		if (strpos ($sHttpResponse, '200') !== false)
			return true;
		else
			return false;
	}
}
?>

Conclusion :


Note :
Vous devez avoir les sockets d'activés pour utiliser cette fonction !

Après je suis ouvert à toute proposition de fonction existant déjà (:/ lol), ou plus performante :)

A voir également

Ajouter un commentaire

Commentaires

codefalse
Messages postés
1127
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
merci à toi :)
cs_Zephyr11
Messages postés
5
Date d'inscription
lundi 10 juillet 2006
Statut
Membre
Dernière intervention
14 novembre 2010

Toujours aussi débutant, mais comme la "classe de vérif de formulaire", ce code tombe à point nommé, merci !
coucou747
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30
Oh, un oubli... desole... pour eviter de me faire insulter dans un lamentable troll comme on en a vu parfois ici... j'ai la mauvaise habitude de nommer la fonction fsockopen fsock... pardonnez moi cette meprise, cet abus de langage, ou ce crime contre le php (rayez la mention inutile...)
coucou747
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30
teclis01, les conseils de malalam sont souvent d'un grand secours...

moi je prefere largement le fsock, il est plus souple, il permet :
- de faire suivre des cookies
- de poster
- de recuperer diverses informations donnees par le serveur (signature, etc...)
- de mieux gerer l'entete
Teclis01
Messages postés
1423
Date d'inscription
mardi 14 décembre 2004
Statut
Membre
Dernière intervention
29 décembre 2012
4
Mais il se fou de moi en plus !!! >_<
ok je ne savais pas que ce genre de droit etait de manière générale non authorisé. Merci de l'info :)

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.