begin process at 2012 02 15 20:18:08
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseau & Internet

 > CONNAITRE L'EXISTANCE D'UN FICHIER SUR UN SERVEUR HTTP EXTERNE

CONNAITRE L'EXISTANCE D'UN FICHIER SUR UN SERVEUR HTTP EXTERNE


 Information sur la source

Note :
Aucune note
Catégorie :Réseau & Internet Classé sous :socket, fsock, preg, fichier, http Niveau :Débutant Date de création :05/10/2007 Date de mise à jour :05/10/2007 23:52:09 Vu :4 708

Auteur : codefalse

Ecrire un message privé
Site perso
Commentaire sur cette source (11)
Ajouter un commentaire et/ou une note

 Description

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

  • <?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;
  • }
  • }
  • ?>
<?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 :)


 Historique

05 octobre 2007 14:23:20 :
Rajout des tags <?php ?> dans le code :p
05 octobre 2007 14:24:56 :
Modification du titre
05 octobre 2007 23:52:09 :
Suppression des returns inutiles

 Sources du même auteur

[PHP5] MULTI-THREADING : ACCÉLÉRATION DU TEMPS DE TRAVAIL D'...
Source avec Zip GESTIONNAIRE DE MODÈLES SQL
Source avec Zip [PHP5] - SIMPLE CLASSE D'ENVOI D'EMAIL
Source avec Zip CATAPULT FRAMEWORK, VERSION 0.1 : "ORIGIN"
[PHP5] - CLASSE D'UPLOAD

 Sources de la même categorie

Source avec Zip TAPI : METTRE EN RELATION DEUX POSTES TELEPHONIQUES par ravery
Source avec Zip CLIENT / SERVEUR : LES SOCKETS par Morphinof
Source avec Zip VALIDATEUR_3WC par lezj
Source avec Zip MYGGL GOOGLE API CLASS FOR BEGINERZ par lezj
CLASSE WIKILOC par aKheNathOn

 Sources en rapport avec celle ci

CLASSE DE GESTION DE "VARIABLES GLOBALES D'ENVIRONNEMENT" par pifou25
UPLOADER DES FICHIER DANSUN DOSSIER, SÉCURISÉ AVEC MOT DE PA... par raizzo
COMPTEUR DE VISITES SUR FICHIER par pierreSabatier
Source avec Zip CLIENT / SERVEUR : LES SOCKETS par Morphinof
ENREGISTRER UNE IMAGE D'UN SITE DISTANT par waterw72

Commentaires et avis

Commentaire de Teclis01 le 05/10/2007 18:39:41

C'est pas plus simple comme ceci ?

$sFile='monfichier';
$mContent=@file_get_content($sUrl);
if($mContent!==false){
   file_put_content($sFile,$sContent);
}

Commentaire de malalam le 05/10/2007 20:16:26 administrateur CS

BEGIN @TROLL
Le teclis qui parle de la simplicité d'un code, je rêve...
END @TROLL

Sinon, Alex, file_get_contents($sUrl) ne passera pas dans tous les cas, selon la config du serveur? Voire même dans peu de cas si on n'a pas la main sur le serveur. Les sockets sont le meilleur moyen.

Ceci mis à part, die()...return false ? Ah.
T'as peur que le die()...meure prématurément...?
En tous cas bien pour le throw new Exception au choix, j'ai fait mon choix ;-)
Rien de spécial à dire sur le code sinon, sauf que je l'aurais plus vu dans les snippets de codyx.org, mais bon.

Commentaire de codefalse le 05/10/2007 23:50:35 administrateur CS

j'y ai pensé pour les snippets mais j'était pas sur.
Je le rajoute ?
(et oué perso, je préfere aussi les exceptions :p)

Pour le return false apres un die ... ché pa, histoire de ralonger le code ? ;)

Commentaire de Teclis01 le 07/10/2007 00:47:20

BEGIN; TROLL;
mais euuuh >_<
COMMIT; TROLL

Ah bah je savais pas ça ^^ je venais juste de faire un script rapidos utilisant ces 2 fonctions du coup quand j'ai vu le titre j'ai regardé et j'ai posté (avec peu de verifs ) :)

Qu'entends tu par avoir la main sur le serveur ?

Commentaire de malalam le 07/10/2007 01:16:33 administrateur CS

Ben tu prends ta main droite (ou gauche, ça dépend) et tu la poses sur le serveur, bien à plat, il faut que la paume touche le métal; et là...
...

J'entends par là : pouvoir le configurer.
Par défaut, bien souvent, file_get_contents() ne sera pas autorisé à ouvrir des url, mais uniquement des fichiers locaux au serveur.

Commentaire de coucou747 le 07/10/2007 02:56:48 administrateur CS

Par défaut, bien souvent...

t'as une contradiction ici... ou une forme ambigue... en effet, par defaut ou ? sur quelle install de php ? sur quel hebergeur ?

bref, perso, j'ai pas ce genre de restrictions...

Commentaire de Teclis01 le 07/10/2007 23:29:21

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 :)

Commentaire de coucou747 le 07/10/2007 23:34:30 administrateur CS

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

Commentaire de coucou747 le 07/10/2007 23:35:39 administrateur CS

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...)

Commentaire de Zephyr11 le 03/12/2007 12:18:10

Toujours aussi débutant, mais comme la "classe de vérif de formulaire", ce code tombe à point nommé, merci !

Commentaire de codefalse le 03/12/2007 12:57:36 administrateur CS

merci à toi :)

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

upload fichier socket [ par yvesyves ] Bonjour,Je m'explique en tant que passagé car je programme pas en php mais je le comprend :J'ai 2 formulaires html avec un bouton submit et un champ d protections de fichiers derriere allopass [ par seabird ] Bonjour, Je suis actuellement en train de faire le site d'un groupe de musique sur lequel les morceaux seront vendus derriere allopass. j'utilise donc insertion failed [ par vinz78 ] &lt;?php$nomlabo=$HTTP_POST_VARS['Nomlab'];$idlabo=$HTTP_POST_VARS['id_labo'];$nomcont=$HTTP_POST_VARS['nom_cont'];$telephonecont=$HTTP_POST_VARS['tel demande formulaire info [ par zert92 ] bonjour, J'explique, j'ai crée avec les moyens que je connais se site http://525-tds-e39.legtux.org/e39.html je suis hebergée chez http://www.legt syntaxe preg_match [ par boakim ] Bonjour. J'essaie de comprendre la manière d'écrire des conditions pour une chaîne de caractères du style #^http:\/\/(.*)\.(gif|png|jpg)$#i dans pr requete HTTP : echec de socket_read() [ par supers03 ] Bonjour à tousJ'utilise depuis un certain temps un même script pour envoyer/recevoir des requêtes HTTP (socket_create, conenct, write, etc...) jusqu'à Extraire des informations d'un fichier texte [ par med93100 ] Bonjour la compagnie , Je tiens deja à vous dire que je suis débutant en PHP , donc mon prolbème est la , j'ai un texte avec plein de code html par e Lire des données d'un fichier rdf [ par tibine974 ] Bonjour/Bonsoir à tous et toutes !Voilà je veux lire certaines données d'un fichier rdf, mais je bloque, si quelqu'un pouvait m'aider svp !Fichier rdf Question templates [ par astuces_jeux ] Bonjour,J'ai remarqué que l'utilisation de la class fasttemplate est compliquée. Alors je voulais savoir si on ne pouvait pas faire ça simple : foncti suprimer les doublon d'un fichier texte [ par marco2003 ] Bonjour ,Je suis debutant et j'aurais besoin de suprimer le doublons d'un fichier texte  sur mon serveur .les fichier a la forme suivante :http://le-c


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,028 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales