não pode ficar método de classe de trabalho dentro de loop foreach - php
-
19-09-2019 - |
Pergunta
Eu escrevi a classe Fazer a ligação que tem um método shortTolong () esta deve retornar a URL real para um URL encurtado, devolvendo o 'local' cabeçalho de resposta. Eu testei e funciona OK aqui está o código
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();
}
}
O problema começa quando eu tento usar este método em outro arquivo que usa feedparser para obter entradas de feed que contenham este curto urls i nidas para analisar a partir de alguma razão eu recebo como resultado a curto url em vez do longo aqui é o código:
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 alguma razão eu obter o mesmo resultado para getUrl () e shortTolong () e eu sei com certeza isso é um erro.
alguma idéia porque isso está acontecendo? Graças
Edit- eu adicionei um aviso de erro para o método com curl_eror eu recebo esta mensagem de erro: "Protocolo não http suportado ou deficientes em libcurl" como eu disse eu testei este método do e está muito bem como como autônomo no mesmo ambiente (sem alterações) eu suspeito que tem algo a ver com feedparser usando curl muito trabalho ....
Solução
eu acho que você deve aparar () a url e que deve resolver o problema.