8797 sujets

Développement web côté serveur, CMS

Pages :
Salut,

Pour un formulaire je me posais la question du test après avoir récupéré une URL. Comment vérifier que l'url existe ? j'imagine que l'on peut demander à google si le site est indexé ou un truc dans le genre. Et point de vue sécurité ?

JM.
Modifié par jmlapam (01 Jul 2012 - 22:26)
Tu peux utiliser CURL pour pinger l'URL en question.


<?php

/**
 * Ping an URL
 *
 * @param string $url The URL to ping
 * @return boolean
 */
function ping_url($url) {

  $return = true;

  $ch = curl_init($url);
  curl_setopt($ch, CURLOPT_TIMEOUT, 5);
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

  if (false === curl_exec($ch)) {
    $return = false;
  } elseif (200 !== curl_getinfo($ch, CURLINFO_HTTP_CODE)) {
    $return = false;
  }

  curl_close($ch);
  return $return;
}

/**
 * Usage example
 */
$messages = array(
    "La page <strong>%s</strong> n'existe pas.<br>",
    "La page <strong>%s</strong> existe.<br>"
);

$urls = array(
    'http://www.google.fr/',
    'http://forum.alsacreations.com/topic-20-62619-1-Tester-lurl-recuperee-dans-un-formulaire.html',
    'http://forum.alsacreations.com/topgdfgdfgdfgf.html',
    'http://www.dfghhhghgfh.com/truc.html',
);

foreach ($urls as $url) {
  printf($messages[(int) ping_url($url)], $url);
}

Modifié par jb_gfx (01 Jul 2012 - 20:10)
Ah d'accord merci à toi. J'avais trouvé un script qui utilisait @get_component mais cela me paraissait douteux car datant de 2007 et pas du tout recommandé par google.

Génial je vais mettre cela en pratique.
Modifié par jmlapam (01 Jul 2012 - 16:42)
Y'a aucun echo dans ma fonction, les echos c'était juste pour te montrer un exemple.


if (true === ping_url('http://www.google.fr/')) {
  // l'url existe
} else {
  // l'url n'existe pas
}


Cela dit la fonction est documentée, t'aurais pu trouver tout seul.
Modifié par jb_gfx (01 Jul 2012 - 18:11)
Oui, je me doute que c'est pour tester. On utilise toujours echo pour tester quand on développe. Le souci est que cela ne marche pas bien avec l'écho.

Edit: c'est pas clair ce que dis. En fait, je récupère l'URL via $_post et c'est elle que je teste donc. J'ai un vide dans le navigateur.

Si c'est faux j'envoie un truc vide ou avec un message du type "erreur d'URL dans le mail.
L'autre question que je me pose c'est :"est-ce que je dis au type que son URL est mauvaise sachant que c'est pas un champ obligatoire?
Modifié par jmlapam (01 Jul 2012 - 18:28)
Sinon j'ai résolu le souci d'affichage de l'écho et cela venait de XAMPP donc rien à voir.

EDIT : ça marche pas en ligne. J'ai peut-être les neurones en perdition, voici ce que je mets :

if (true === ping_url($_POST['url'])) {
  $url= trim($_POST['url']) ;	
} else {
  // message d'erreur
}

Modifié par jmlapam (01 Jul 2012 - 20:13)
Oui c'est les neurones. Smiley smile


$url = trim($_POST['url']);

if (true === ping_url($url)) {
  // traitement si url ok
} else {
  // traitement si url pas ok
}


jmlapam a écrit :

L'autre question que je me pose c'est :&quot;est-ce que je dis au type que son URL est mauvaise sachant que c'est pas un champ obligatoire?


Le champs peut ne pas être obligatoire ça n'empêche pas de le valider si il a été rempli par l'utilisateur.
Modifié par jb_gfx (01 Jul 2012 - 20:07)
Ok, je vais me coucher. Merci de ton aide et de ta patience. Smiley cligne

EDIT : ah mais en fait c'était pas google machin que je mettais mais $_POST ['url']
Modifié par jmlapam (01 Jul 2012 - 20:11)
jmlapam a écrit :
EDIT : ah mais en fait c'était pas google machin que je mettais mais $_POST ['url']


Et ça fonctionne pas ? Dans ce cas regarde si CURL est bien activé sur ton hébergement. Sur 99% des hébergeurs il l'est, mais on sait jamais.
jb_gfx a écrit :
Dans ce cas regarde si CURL est bien activé sur ton hébergement. Sur 99% des hébergeurs il l'est, mais on sait jamais.


Pas forcement, chez OVH, sur les dédiés, il peut être:

-Installé mais désactivé par défaut
-Installé et activé par défaut
-Pas installé du tout

ça dépends des distribs
@jb_gfx : oui j'ai ce qui faut je pense ;

cURL support enabled
cURL Information libcurl/7.21.0 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.15 libssh2/1.2.6
@jjk801 : je ne reçois pas le formulaire quand je teste en ligne. Dès que je retire la ligne pour tester mon URL ça marche.

C'est un formulaire assez simple que j'envoie avec vraiment le minimum de mise en page :

$body = "Name: $name \n\nEmail: $email \n\n URL: $url \n\n etc...";
@jjk801 : je ne reçois pas le formulaire quand je teste en ligne. Dès que je retire la ligne pour tester mon URL ça marche.

C'est un formulaire assez simple que j'envoie avec vraiment le minimum de mise en page :

$body = "Name: $name \n\nEmail: $email \n\n URL: $url \n\n etc...";
et aucun message d'erreur?
tu as testé ton $_POST['url']?
peut tu afficher la partie du code qui pose problème stp (avec les fonctions liés)
Modifié par JJK801 (01 Jul 2012 - 22:12)
Ouep tu as raison :
//Check URL via CURL
			function ping_url($url) {

			  $return = true;

			  $ch = curl_init($url);
			  curl_setopt($ch, CURLOPT_TIMEOUT, 5);
			  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
			  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

			  if (false === curl_exec($ch)) {
				$return = false;
			  } elseif (200 !== curl_getinfo($ch, CURLINFO_HTTP_CODE)) {
				$return = false;
			  }

			  curl_close($ch);
			  return $return;
			}
			
			
			
			//process URL
			if (true === ping_url($_POST['url'])){ 
					$url = trim($_POST['url']) ;
			}

			else {
						$urlError = 'URL doesn\'t exist !';
						$hasError = true;	
				}
Chez moi ça marche.

Pour reprendre le post précédent de jb_gfx, pourquoi utilise tu trim() qu'aprés ton test?


//process URL
$url = trim($_POST['url']) ;

if (true !== ping_url($url))
{
  $urlError = 'URL doesn\'t exist !';
  $hasError = true;
  unset($url);	
}


tu devrai aussi tester le http:// de ton adresse (pas pénalisant dans cURL mais ça coute pas grand chose, et ça peut être utile selon ce que tu fait a la suite).

Sinon pour ton problème, pas trop d'idée, si ta variable post est correcte, cURL est bien installé et php_curl activé je sait pas du tout.

J'ai fais le test sur http://www.google.fr et http://www.googleqsdfqfdgq.fr, le premier est bien "pingué" et le second me renvoi bien l'erreur.
Pages :