J'ai écrit la classe Link qui a une méthode shortTolong() qui devrait renvoyer l'URL réelle d'une URL raccourcie en retournant l'en-tête de réponse 'location'. Je l'ai testé et il fonctionne OK voici le codeimpossible de faire fonctionner la méthode de classe à l'intérieur foreach loop - php
public function shortTolong()
{
$urlMatch = array();
$ch = curl_init();
$options = array
(
CURLOPT_URL=>$this->getUrl(),
CURLOPT_HEADER=>true,
CURLOPT_RETURNTRANSFER=>true,
CURLOPT_FOLLOWLOCATION=>false,
CURLOPT_NOBODY=>true);
curl_setopt_array($ch, $options);
$server_output = curl_exec($ch);
preg_match_all(LINK, $server_output,&$urlMatch,PREG_SET_ORDER);
if($urlMatch)
{
foreach($urlMatch as $set)
{
$extracted_url = $set[2].'://'.$set[3];
}
return $extracted_url;
}
else
{
return $this->getUrl();
}
}
le problème commence lorsque je tente d'utiliser cette méthode sur un autre fichier qui utilise feedparser pour obtenir des entrées d'alimentation contenant ce court urls i ned d'analyser de certains raison pour laquelle je reçois un résultat court url au lieu de la longue est ici le code:
foreach($parser->getItems() as $item)
{
$idpreg = '/\d+/';
preg_match_all($idpreg, $item['ID'],$statusid);
$retweetid = ($statusid[0][1]);
$datetime = $item['PUBLISHED'];
$user = $item['AUTHOR']['NAME'];
preg_match_all(LINK, $item['TITLE'], &$linkMatch);
$final = $linkMatch[0][0];
//if($linkMatch[0][0])
echo '<p>';
$link = new Link($final);
echo $link->getUrl();
echo '<br>';
echo $link->shortTolong();
echo '<br>';
echo $user;
echo '<br>';
echo $retweetid;
echo '</p>';
}
de quelque raison que je reçois le même résultat pour getUrl() et shortTolong() et je sais que pour certains cela est un Erreur.
des idées pourquoi cela se passe-t-il? Merci
Modifier- j'ai ajouté un avis d'erreur à la méthode avec curl_eror je reçois ce message d'erreur: « protocole HTTP non pris en charge ou désactivé dans libcurl » comme je l'ai dit je l'ai testé cette méthode à et il fonctionne très bien comme comme seul dans le même environnement (pas de changements) je soupçonne que cela a quelque chose à voir avec FeedParser en utilisant curl aussi ....
avez-vous essayé echo $ server_output = curl_exec ($ ch); ?? Est-ce que cela imprime une sortie? –
mettre une garniture sur l'URL et voir si cela aide. –
sab - merci de répondre $ server_output génère les en-têtes de réponse de l'URL comme prévu pouvez-vous expliquer pourquoi pensez-vous que trim() serait utile? comme je l'ai dit cette méthode fonctionne très bien quand je l'ai testé sur le problème de l'objet généré statique commence lorsque l'objet est lancé dynamiquement avec feedparser –