Bonjour à tous.
Suite à [Forum, topic 16907] [Important] Auto update et autres web services HS chez Free, ceux qui, comme moi, utilisaient les web services (WS) de Piwigo pour agrémenter des pages sur le même hébergement Free que la galerie mais hors galerie sont dans la panade. Explications en me basant sur mon cas personnel :
Mon site n'est pas organisé uniquement autour de ma galerie et comporte une page d'accueil générale qui permet d'accéder ensuite aux diverses pages (historique, FAQ, liens,...) et applications (galerie, forum, livre d'or,...) qui sont indépendantes entre elles (pas d'intégration totale dans la galerie mis à part le forum qui partage simplement la table users).
Pour agrémenter cette page d'accueil générale, j'ai utilisé les WS pour y afficher une "preview" des images de la galerie : 5 images prises au hasard. Le problème maintenant, chez Free avec le filtrage du port 80, c'est que la méthode d'appel de ces images via le WS se fait par la fonction CURL qui nécessite des URL complètes de type http://**** qui sont dorénavant filtrées.
D'un point de vue technique, il est compréhensible que cette méthode, qui revient à passer par les antipodes pour faire un trajet Paris-Paris, ne soit pas très appréciées sur des structures d'hébergement mutualisées comme Free. Et l'admin des pages persos chez Free refusera de cautionner cela en ouvrant ces URL locales.
L'idée des WS en général était orientée vers les partenariats inter-sites pour lesquels la méthode est tout à fait valide (encore faut-il demander maintenant l'ouverture des URL à Free). Mais ce n'est plus adapté pour de l'intra-sites.
D'où ma question : Existe-t-il une autre approche / méthode qui permette d'utiliser les WS en intra-site sans pour autant faire le tour du monde avant de revenir sur son propre domaine ? Et, plus particulièrement, comment afficher 5 images au hasard de sa galerie sur une page externe à la galerie mais faisant partie du même site sans utiliser CURL ?
Hors ligne
Piwigo - /extensions/piwigopress/PiwigoPress_get.php - Piwigo
Ce module utilise CURL en dernier ressort.
S'il peut t'inspirer et te permettre d'adapter ton code...
;-)
Hors ligne
Merci Vincent.
J'ai jeté un oeil assez rapidement ('tite pause au boulot) mais je crois que çà ne va pas le faire. Le code propose effectivement plusieurs méthodes d'appel mais, malheureusement, elles sont toutes "personna non grata" chez Free :
- file_get_contents nécessite l'accès au php.ini -> C'est mort.
- fsockopen n'est pas autorisé chez Free
- CURL... -> Retour au point de départ.
Je peux me gourer. Je vérifierai en profondeur ce soir.
Hors ligne
Je n'ai pas exploré chez free...
Mais es-tu certain qu'avec une url relative, tu ne peux pas faire un file_get_contents même chez free?
FILE_USE_INCLUDE_PATH est un paramètre à tester
Es-tu certain qu'on ne peut pas faire du file_get_contents dans /include ?
( /include : pas dans Piwigo mais à partir de la racine de ton site)
=> Faire une copie révisée de l'API
(Cf. http://php.net/manual/fr/function.file-get-contents.php )
Dans mes phpinfo() je lis chez free: allow_url_fopen On On
Cela m'étonne que free bloque ça en local.
Au pire pour faire ce que tu veux faire même chez free:
- Lors des visites de tes guests, par un plugin perso...
- Tu parses une micro-page (objet différent de template, sans faire de display).
- Tu enregistres ta micro-page dans un fichier micro-page.html.
Dans ton site (blog ou autre, chez free ou pas), tu insères ta micro page dans un iframe.
Où est le problème?
Hors ligne
Bonjour.
D'après mes tests pas de problème pour lire un fichier situé dans le site :
exemple :
// Création d'un flux
$opts = array(
'http'=>array(
'method'=>"GET",
'header'=>"Accept-language: en\r\n" .
"Cookie: foo=bar\r\n"
)
);
$context = stream_context_create($opts);
// Accès à un fichier HTTP avec les entêtes HTTP indiqués ci-dessus
$file = file_get_contents('../info.htm', false, $context);
echo $file;
Si ça peut faire avancer la chose...
A+
Hors ligne
Comme dit dans mon message de ce midi, j'ai très survolé le code et les implications avec Free. Effectivement, après une analyse plus complète, je confirme que la première méthode qui utilise file_get_contents avec un chemin relatif devrait fonctionner.
Grâce à vos infos, je regarde comment arriver à mettre çà en oeuvre et je reviens donner le résultat ici. Merci !!
Hors ligne
Bon, j'avoue que je patauge lamentablement. Je n'arrive pas à faire interpréter le flux généré par ws.php via file_get_contents. J'avais déjà eu du mal, à l'époque, pour mettre en place le WS sur ma page principale en utilisant CURL et cela ne s'arrange pas maintenant.
Voici le code intégré actuellement dans ma page et qui ne fonctionne plus :
<?php // initialisation de la session $session = curl_init(); // configuration des options curl_setopt($session, CURLOPT_URL,"http://lucifer.devil.free.fr/phpwebgallery/ws.php?method=pwg.categories.getImages&format=php&recursive=true"."&order=random&f_with_thumbnail=true&per_page=5&page=0&partner=[Clé partenariat]"); curl_setopt($session, CURLOPT_HEADER, 0); curl_setopt($session, CURLOPT_RETURNTRANSFER, true); // exécution de la session $response = curl_exec($session); $thumbc = unserialize($response); // fermeture des ressources curl_close($session); // Réponse correcte ? if ($thumbc["stat"]=='ok') { for ($i=0;$i<$thumbc["result"]["images"]["count"];$i++) { $picture = $thumbc["result"]["images"]["_content"][$i]; // dans picture nous avons : id, width, height, hit, file, name, comment, tn_url, element_url $HTML_txt = '<a href="./phpwebgallery/picture.php?/'.$picture['id'].'" title="'.$picture['name'].'">'.'<img src="'.$picture['tn_url'].'" alt="'.$picture['name'].'"></a>'; echo $HTML_txt; } } ?>
J'ai bien compris que toute la partie utilisant la session CURL doit donner lieu à un include d'un nouveau fichier que j'aurai mis dans le dossier d'inclusion de mon site. Ce fichier devant générer un flux à partie de ws.php. Mais il doit me manquer un élément primordial pour y parvenir...
Hors ligne
Eric a écrit:
Bon, j'avoue que je patauge lamentablement. Je n'arrive pas à faire interpréter le flux généré par ws.php via file_get_contents. J'avais déjà eu du mal, à l'époque, pour mettre en place le WS sur ma page principale en utilisant CURL et cela ne s'arrange pas maintenant.
Voici le code intégré actuellement dans ma page et qui ne fonctionne plus :Code:
<?php // initialisation de la session $session = curl_init(); // configuration des options curl_setopt($session, CURLOPT_URL,"http://xxxx.free.fr/xxxwebgallery/ws.php? ... ?>J'ai bien compris que toute la partie utilisant la session CURL doit donner lieu à un include d'un nouveau fichier que j'aurai mis dans le dossier d'inclusion de mon site. Ce fichier devant générer un flux à partie de ws.php. Mais il doit me manquer un élément primordial pour y parvenir...
Bonjour Eric.
Ce ne serait pas plutôt en adresse relative qui faudrait appeler la fonction ?
du genre :
curl_setopt($session, CURLOPT_URL,"./xxxwebgallery/ws.php?
A+.
Après test: urrl ajoute automatiquement: http:// devant l'url :-(
l'Url devient : http://./phpwebgallery/ws.php
et bien sur n'est pas valide.
Désolé mais la fonction curl ne devrait pas etre utilisable en intra net.
Dernière modification par cljosse (2010-01-31 11:39:00)
Hors ligne
cljosse a écrit:
Bonjour Eric.
Ce ne serait pas plutôt en adresse relative qui faudrait appeler la fonction ?
du genre :
curl_setopt($session, CURLOPT_URL,"./phpwebgallery/ws.php?
A+.
Après test: urrl ajoute automatiquement: http:// devant l'url :-(
l'Url devient : http://./phpwebgallery/ws.php
et bien sur n'est pas valide.
Désolé mais la fonction curl ne devrait pas etre utilisable en intra net.
C'est bien là tout le problème qu'il me faut résoudre en m'abstenant d'utiliser CURL au profit d'une autre méthode basée sur file_get_contents.
Toute la difficulté pour moi étant de faire en sorte que file_get_contents puisse lire le flux généré par phpwebgallery/ws.php?method=pwg.categories.getImages&format=php&recursive=true"."&order=random&f_with_thumbnail=true&per_page=5&page=0&partner=[Clé partenariat]"
Hors ligne
Le passage des arguments vers ws.php se fait par $_GET
$_GET['method']='pwg.categories.getImages';
$_GET['format']='php';
$_GET['recursive']='true';
$_GET['order']='random';
$_GET['f_with_thumbnail']='true';
$_GET['per_page']='5';
$_GET['page']='0';
$_GET['partner']='[Clé partenariat]';
include "./Galerie/ws.php" ;
print_r($thumbc);
Que penses tu du résultat?.
Hors ligne
$_GET['partner']='[Clé partenariat]';
Ignoré.
Le token a été retiré en 2.0 (était valable en 1.7)
Hors ligne
Bonjour.
Voici le bout de programme testé:
<?php
$_GET['method']='pwg.categories.getImages';
$_GET['format']='php';
$_GET['recursive']='true';
$_GET['order']='random';
$_GET['f_with_thumbnail']='true';
$_GET['per_page']='5';
$_GET['page']='1';
ob_start();
include PHPWG_ROOT_PATH . "ws.php" ;
$result .= ob_get_contents();
ob_end_clean();
$thumbc1 = unserialize( $result);
if ($thumbc1["stat"]=='ok') {
for ($i=0;$i<$thumbc1["result"]["images"]["count"];$i++) {
$picture = $thumbc1["result"]["images"]["_content"][$i];
// dans picture nous avons : id, width, height, hit, file, name, comment, tn_url, element_url
$HTML_txt = '<a href="./Galerie/picture.php?/'.$picture['id'].'" title="'.$picture['name'].'">'.'<img src="'.$picture['tn_url'].'" alt="'.$picture['name'].'"></a>';
echo $HTML_txt;
}
}
?>
Ce programme doit être executé sous le répertoire de ta galerie et la session ouverte bien sur, sinon le chemin pour les photos n'est pas correcte.
Bon courage .
voir http://cl.josse.free.fr/Galerie/test_ws.php
A+
Hors ligne
Autant faire un file_get_contents
Hors ligne
VDigital a écrit:
Autant faire un file_get_contents
Bonjour
Je n'y arrive pas avec file_get_contents.
file_get_contents retourne le texte du fichier, mais ne l'exécute pas.
Peut être une histoire de paramètres et d'options ?
A+
Note: l'exemple précédent avec include.. marche bien sur avec les images distantes si leur path est complet et non en relatif.
Dernière modification par cljosse (2010-01-27 13:06:15)
Hors ligne
Merci pour ces explications qui vont beaucoup m'aider... Ce soir ! (Je ne devrais même pas être en train de poster ici en ce moment - Si mon boss me choppe...)
Hors ligne