8791 sujets

Développement web côté serveur, CMS

Bonjour, j'ai pu créer un script me permettant de récupérer les balises ayant l'attribut property sur le site rutube pour mon site de vidéos buzz. Bref J'ai mis le code du script dans un fichier functions.inc.php. Voici le code en question :

<?php
function description($param)
{
function file_get_contents_curl($url)
{
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

    $data = curl_exec($ch);
    curl_close($ch);

    return $data;
}
$id .=$_REQUEST["id"];
$html = file_get_contents_curl("http://rutube.ru/tracks/$id.html");
$doc = new DOMDocument();
@$doc->loadHTML($html);
$nodes = $doc->getElementsByTagName('title');
$metas = $doc->getElementsByTagName('meta');

for ($i = 0; $i < $metas->length; $i++)
{
    $meta = $metas->item($i);
    if($meta->getAttribute('property') == $param)
        $description = $meta->getAttribute('content');
}
return $description;
}
?>


Sur le fichier ou je veux faire appel à cette fonction j'ai mis :

<?php require("functions.inc.php");
echo description('og:title'); ?><br> Type : <?php require("functions.inc.php");
echo description('og:type'); ?><br> Blaa blaa


Là, un problème surgit. Je n'ai aucun retour pour le paramètre og:type ou n'importe quel autre paramètre quelque soit le nombre de fois que je fais appel à la fonction. Aussi tout ce qui est écrit après la deuxième balise php ne s'affiche pas comme par exemple ici le <br> Blaa blaa

J'espère que je pourrais trouver la réponse à ma question sur ce forum dont on m'a dit le plus grand bien. Merci d'avance.
Une fonction dans une autre fonction... comme c'est original Smiley langue

Commences par mettre en echo devant l'appel à ta fonction si tu veux afficher la valeur retournée.
Ensuite il doit y avoir des erreurs php dans ta fonction pour expliquer le fait que rien ne s'affiche après l'appel à cette dernière.
J'en vois déjà au moins une au niveau de la variable $id à laquelle tu concatènes $_REQUEST["id"] alors que la variable $id n'est pas définie au préalable.
Ok, merci mais desolé je n'y connais rien en php. J'ai pu créer ce script juste en rassemblant mais connaissances en c++ et html et les assimiler au php avec quelques bricoles sur les sites des cours php. Stp tu peux m'aider? Je sais que j'en demande trop. Merci.
Voilà j'ai pu mettre ça suivant ce que vous m'avez dit :

<?php
function file_get_contents_curl($url)
{
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

    $data = curl_exec($ch);
    curl_close($ch);

    return $data;
}
function description($param)
{
$id = NULL ;
$id .=$_REQUEST["id"];
$html = file_get_contents_curl("http://rutube.ru/tracks/$id.html");
$doc = new DOMDocument();
@$doc->loadHTML($html);
$nodes = $doc->getElementsByTagName('title');
$metas = $doc->getElementsByTagName('meta');

for ($i = 0; $i < $metas->length; $i++)
{
    $meta = $metas->item($i);
    if($meta->getAttribute('property') == $param)
        $description = $meta->getAttribute('content');
}
return $description;
}
?>


J'ai laissé le code pour faire l'appel le même mais toujours sans succès même problème. Que faire? Merci d'avance.
Déclarer une fonction c'est bien, mais faut peut être penser à l'appeler à un moment si tu veux qu'elle s’exécute.
Je l'ai déjà appelé via le code suivant :

<?php require("functions.inc.php");
echo description('og:title'); ?><br> Type : <?php require("functions.inc.php");
echo description('og:type'); ?><br> Blaa blaa

Mais le problème c'est que ni la deuxième utilisation de la fonction ni ce qui vient après ne s'affiche.
Je t'ai cleané un peu ta fonction :
function file_get_contents_curl($url)
{
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

    $data = curl_exec($ch);
    curl_close($ch);

    return $data;
}

function description($param)
{
    $id = $_REQUEST["id"];
    $html = file_get_contents_curl("http://rutube.ru/tracks/$id.html");
    $doc = new DOMDocument();
    @$doc->loadHTML($html);
    $nodes = $doc->getElementsByTagName('title');
    $metas = $doc->getElementsByTagName('meta');

    for ($i = 0; $i < $metas->length; $i++)
    {
        $meta = $metas->item($i);
        if($meta->getAttribute('property') == $param) {
            return $meta->getAttribute('content');
        }
    }
}


En revanche la procédure de fonction description utilise un paramètre "id" qui doit être passé en GET ou POST. Si celui-ci n'est pas défini dans la page courante alors la fonction ne pourra pas récupérer l'url "http://rutube.ru/tracks/$id.html".
littlegarden a écrit :
Je l'ai déjà appelé via le code suivant :

&lt;?php require(&quot;functions.inc.php&quot;);
echo description('og:title'); ?&gt;&lt;br&gt; Type : &lt;?php require(&quot;functions.inc.php&quot;);
echo description('og:type'); ?&gt;&lt;br&gt; Blaa blaa

Mais le problème c'est que ni la deuxième utilisation de la fonction ni ce qui vient après ne s'affiche.


Pas du tout, tu ne fais aucun appel à tes fonctions, tu fais simplement un double include.

De toute manière ta fonction n'est pas construite pour afficher quelques chose, elle renvoi simplement des données mais sans les afficher. Donc ça ne fonctionnera jamais.
Modifié par jb_gfx (29 May 2012 - 18:42)
Merci infiniment. Tu me sauves. Sinon je mets la page qui appel la fonction de la manière suivante page.php?id= donc l'id est bel et bien présent. Merci encore une fois.