Annonce

  •  » Utilisation
  •  » [Résolu] Web services en intra site chez Free

#31 2010-01-29 18:11:27

cljosse
Former Piwigo Team
2006-11-12
1167

Re: [Résolu] Web services en intra site chez Free

Vérifie le chemin des pictures
Dans la base on a ./gallerie/XXX/yyyy
Lorsque l'on regarde le retour de picture:
  $picture = $thumbc1["result"]["images"]["_content"][$i];

on a
$picture['tn_url']= http://xxx.free.fr/gallerie/XXX/yyy

au lieu de

http://xxx.free.fr//pwggalerie/gallerie/XXX/yyy

D'ou :

   $picture['tn_url']=str_replace( $adr_rel,$adr_absolue,$picture['tn_url']);

Hors ligne

#32 2010-01-29 18:13:32

Eric
Former Piwigo Team
VALENCE (FR)
2005-03-25
4579

Re: [Résolu] Web services en intra site chez Free

Claude, je viens de me rendre compte d'un truc : Ta galerie est-elle entièrement ou majoritairement publique ?

Car la mienne est principalement privée. Seules quelques images sont accessibles en public. C'est peut-être pour cela que le script remonte des liens vers des images mais pas les miniatures qui sont inaccessibles.

Hors ligne

#33 2010-01-29 18:17:33

cljosse
Former Piwigo Team
2006-11-12
1167

Re: [Résolu] Web services en intra site chez Free

majoritairement publique

Hors ligne

#34 2010-01-29 18:22:43

cljosse
Former Piwigo Team
2006-11-12
1167

Re: [Résolu] Web services en intra site chez Free

Ce sont les liens qui ne sont pas bon
"http://lucifer.devil.free.fr/galleries/xx_U/xxxxxonga/thumbnail/TN-xxxxxonga-Bike.jpg"
au lieu de
"http://xxx.free.fr/phpwebgallery/galleries/xx_U/xxxxxonga/thumbnail/TN-xxxxxonga-Bike.jpg"

Dernière modification par cljosse (2010-01-31 11:41:06)

Hors ligne

#35 2010-01-29 18:34:51

Eric
Former Piwigo Team
VALENCE (FR)
2005-03-25
4579

Re: [Résolu] Web services en intra site chez Free

Yes !!

Cette fois, c'est la bonne ! Effectivement, c'était bien la correction de l'url des TN qui tapait dans les choux. J'ai inclus le fichier où il fallait dans mon index.php et tout est OK.

Milles mercis, Claude !! C'était vraiment trop hardu (tordu ?) pour moi sur ce coup. Faut dire que j'étais un peu long à la comprenette... Je pense, comme Gotcha, qu'une synthèse de cette affaire est nécessaire avec les explications qui vont bien pour que les autres utilisateurs des WS chez Free_vers_Free puisse utiliser cette méthode et l'adapter à leurs besoins.

@Gotcha : Je propose de faire un résumé ici qui pourra servir de base à une entrée dans le wiki. Qu'en penses-tu ?

Hors ligne

#36 2010-01-29 18:40:25

cljosse
Former Piwigo Team
2006-11-12
1167

Re: [Résolu] Web services en intra site chez Free

Super

Bon week end

Hors ligne

#37 2010-01-29 18:56:02

oliv
Invité

Re: [Résolu] Web services en intra site chez Free

Merci cljosse,
tout fonctionne nickel en modifiant le fichier php_encoder.php

Nickel

++

cljosse a écrit:

Je ne comprends pas mais en ajoutant ce print_r($conf) sous FireFox j'affiche les images et non le texte.

En fait en cherchant un peu et en modifiant

include/ws_protocols/php_encoder.php

        function getContentType()
     en remplaçant                return 'text/plain'  par return 'text/html' , il n'a plus ce problème sous FF


et je n'ai plus besoin de ce print_r($conf)

A+

#38 2010-01-29 21:57:52

Eric
Former Piwigo Team
VALENCE (FR)
2005-03-25
4579

Re: [Résolu] Web services en intra site chez Free

Finalement, il me reste encore un problème :(
Pas complètement lié à ce que qui a été fait jusqu'ici mais c'est une conséquence finale :

J'inclue mon fichier ws2.php dans ma page d'index (index.php). Les images s'affichent bien, y a rien a dire. Mais j'avais complètement oublié le fait que je fais la même chose (inclusion de fichier) pour les discussions récentes de mon forum (affichage du titre avec lien des 5 dernières discussions de mon forum FluxBB).

Il semble que FluxBB déclare une fonction de redirection avec le même nom, redirect(), que Piwigo. Du coup, le début de ma page d'accueil s'affiche bien jusqu'à la preview de la galerie et après... Plus rien. Avec Firebug, j'ai trouvé ceci qui conforte mon analyse juste après l'affichage des images :

Fatal error: Cannot redeclare redirect() (previously declared in E:\www\monsite\phpwebgallery\include\functions.inc.php:745) in E:\www\monsite\forum\include\functions.php  on line 944

C'est ballot tout de même ! Juste où je me réjouissais de récupérer mon WS sur ma page d'accueil. Je n'ai pas trouvé le moyen de contourner cela. A part reprendre tout le code du core de FluxBB pour renommer tous les appels et la déclaration de la fonction redirect().

Une autre solution moins "sauvage" ?

Hors ligne

#39 2010-01-29 23:37:28

mathiasm
Former Piwigo Team
2006-02-06
2692

Re: [Résolu] Web services en intra site chez Free

chercher/remplacer dans tout le code redirect par pwg_redirect :-)

Et un bug à ouvrir... mais tu as l'habitude !

Hors ligne

#40 2010-01-29 23:50:06

VDigital
Former Piwigo Team
Montpellier (FR)
2005-05-04
15127

Re: [Résolu] Web services en intra site chez Free

Attention aux plugins qui font du redirect()...


Vincent -« Plus vidéaste averti que photographe amateur... »
La galerie - Le blog   

Piwigo est une application libre de gestion de photos en ligne.

Hors ligne

#41 2010-01-30 15:18:07

Eric
Former Piwigo Team
VALENCE (FR)
2005-03-25
4579

Re: [Résolu] Web services en intra site chez Free

mathiasm a écrit:

chercher/remplacer dans tout le code redirect par pwg_redirect :-)

Et un bug à ouvrir... mais tu as l'habitude !

Bah, dans l'immédiat, c'est plutôt du côté de FluxBB que j'ai remplacé tous les redirect() pour faire en sorte que tout refonctionne sur mon site. Si je l'avais fait sur le Core de Piwigo, compte-tenu du fait que Piwigo est "un peu plus vivant" en terme d'évolutions et de màj que FluxBB, j'aurais été obligé de refaire les modifs après coup.

J'ai tout de même ouvert le [Bugtracker] ticket 1418 mais :

VDigital a écrit:

Attention aux plugins qui font du redirect()...

cela va effectivement poser quelques problèmes pour certains plugins. Si on valide le renommage de redirect(), on fera une annonce aux développeurs de plugins pour qu'ils rectifient.

Hors ligne

#42 2010-01-30 15:55:49

Eric
Former Piwigo Team
VALENCE (FR)
2005-03-25
4579

Re: [Résolu] Web services en intra site chez Free

Sinon, j'ai trouvé une autre méthode qui semble fonctionner sans avoir à toucher au nom de redirect() mais c'est assez tordu et ne me convient pas personnellement car impose d'utiliser une iframe et, donc, d'avoir un DOCTYPE en "HTML 4.01 Frameset" ou "XHTML 1.0 Frameset" pour être raccord avec W3C (mon site est en HTML 4.01 Strict).

Je donne l'astuce ici pour ceux que cela intéresserait :

Prérequis :
- Le fichier ws2.php créé selon les indications données dans les posts précédents par cljosse et "customisé" selon les besoins de chacuns (je ferai une synthèse là-dessus dès que)

Marche à suivre :
1- Créer un fichier à la racine du site que l'on nommera, par exemple, preview.php
2- Dans preview.php, on aura :

Code:

<?php
// Génération de l'entête HTML
echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<html>

<head>
  <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">

  <title>Preview</title>
</head>

<body>';

// Inclusion du fichier ws2.php qui génère le flux WS
include 'ws2.php';

// Génération de la fin du code HTML
echo '</body>
</html>';

3- Ouvrir le fichier index.php représentant la page d'accueil du site web et sur laquelle doit apparaitre le résultat de ws2.php
4- A l'endroit que l'on souhaite, insérer une iframe ainsi (exemple généraliste) :

Code:

<iframe src="preview.php"></iframe>

Et le tour est joué ! Ainsi, si on a d'autres inclusions dans index.php qui donnent lieu à des appels à fonctions déjà déclarées via Piwigo, ce n'est pas le fichier index.php qui les appelle mais preview.php.

Mais, je me répète, je ne trouve pas çà beau, j'aime pas les iframe et les frame en général et Nicolas a déteint sur moi : Je ne jure plus que par le HTML Strict ;-)

Hors ligne

#43 2010-01-30 17:20:45

Eric
Former Piwigo Team
VALENCE (FR)
2005-03-25
4579

Re: [Résolu] Web services en intra site chez Free

@cljosse (pour info): Tu as pu le remarquer, les WS sur URL relatives ne fonctionnent pas en local (Wampserver ou Easyphp). Je n'ai encore aucune idée du "pourquoi" mais j'ai trouvé le "comment faire pour que çà fonctionne" :

Dans le fichier ws.php (celui livré avec Piwigo), il faut remplacer en ligne 24

Code:

define ('PHPWG_ROOT_PATH', './');

par

Code:

if (!defined('PHPWG_ROOT_PATH')) define('PHPWG_ROOT_PATH', './[Répertoire d'installation de Piwigo]/');

Ceci uniquement en local ! Dès qu'on passe sur un serveur en ligne, on a une erreur php sur cette ligne (PHPWG_ROOT_PATH already defined in...).

Hors ligne

#44 2010-01-30 17:56:59

cljosse
Former Piwigo Team
2006-11-12
1167

Re: [Résolu] Web services en intra site chez Free

Bojour

Il faut plutot écrire dans le ficgier Ws.php
if (!defined('PHPWG_ROOT_PATH'))  define ('PHPWG_ROOT_PATH', './');

De façon lorque l'on fait un include de ws.php le programme(ws2.php) il garde son répertoitre de référence déclaré dans ws2.php

1°)  cas Dans le fichier ws2.php situé à la racine de ton site:
Tu écris:

define ('SITE_ROOT_PATH', './');
define ('PHPWG_ROOT_PATH', 'SITE_ROOT_PATH'.'piwigo/');
include 'PHPWG_ROOT_PATH.'ws.php'

2°) cas le fichier est situé sous le répertoire:"include_php"

define ('SITE_ROOT_PATH', '../');                                             
define ('PHPWG_ROOT_PATH', 'SITE_ROOT_PATH'.'piwigo/');
include 'PHPWG_ROOT_PATH.'ws.php'


A+

Hors ligne

#45 2010-01-30 17:57:29

Eric
Former Piwigo Team
VALENCE (FR)
2005-03-25
4579

Re: [Résolu] Web services en intra site chez Free

Comme promis, voici la synthèse de tout ce qui a été dit et fait ici pour faire fonctionner les Web Services (WS) en "intra-site" sans utiliser d'URL absolues. Cette méthode est absolument nécessaire lorsqu'on a une galerie hébergée chez Free mais aussi recommandée dans les autres cas (hébergeur dédié, serveur perso dédié, etc...).

Pourquoi ? Parce que utiliser des liaisons absolues (http://...) pour faire des liens en interne sur un même site est équivalent à prendre sa voiture pour aller chercher son courrier alors que la boite aux lettres est sur le perron de la maison (une autre métaphore : Passer par Moscou pour faire un trajet maison-maison)! D'où charge du serveur = baisse de performances.

Exemple de contexte d'utilisation des WS - Ce que l'on veut obtenir:
Soit un site web composé de pages "classiques" en html (par exemple) et d'une galerie Piwigo. On accède à la galerie via des liens présents sur la(les) page(s) html. On veut présenter un aperçu du contenu de la galerie sur l'une des pages html.

Structure physique de l'exemple :
[Racine du site]
          |-> Fichier html à la racine du site (index.php ou index.htm) ou toute autre page html composant le site et sur laquelle on veut afficher l'aperçu.
          |
          |-[Répertoire d'installation de Piwigo]
                                  |-[galleries]

1- Créer un fichier à la racine du site (en fait, on peut le mettre où on veut; il faut juste penser à adapter les chemins) qui comportera le code pour récupérer les informations nécessaires à l'affichage de l'aperçu. Appelons le "ws2.php"

2- Dans le fichier ws2.php, on écrira (toutes les explications sur le code sont en commentaires):

Code:

<?php
/**
 * Utilisation des Web Services (WS) de Piwigo sans passer par des URL absolues
 * Très utile pour mettre des WS sur un site Free depuis ce même site ou vers
 * un autre site Free.
 * 
 * Par cljosse - Un grand merci pour cette solution / By cljosse - Thx for this great work !
 **/ 

/* Définition de la racine du site */
  $files=$_SERVER['PHP_SELF'];
  $file= explode("/",$files);
  $file=$file[count($file)-1];
  $racine =  $_SERVER['SERVER_NAME'] . str_replace( $file ,"",$_SERVER['PHP_SELF']);

/* Il faut corriger les adresses des photos dans la base de données pour éviter les croix html */
/* Dans la base de données l'adresse des photos sont en relatif, sauf pour les sites distants. */
/* Remplacez [Dossier d'install Piwigo] par ce qui correspond à votre cas */
  $adr_rel="http://". $racine."galleries";
  $adr_absolue="http://". $racine."[Dossier d'install Piwigo]/galleries";

/* Génération des attribus pour le WS (ici 5 images au hasard) */
  $_GET['method']='pwg.categories.getImages';
  $_GET['format']='php';
  $_GET['recursive']='true';
  $_GET['order']='random';
  $_GET['f_with_thumbnail']='false';
  $_GET['per_page']='5';
  $_GET['page']='1';
  
/* Les WS fonctionnes dans le contexte de Piwigo */
/* Il faut donc définir les chemins pour accéder à ce contexte */
/* Remplacez [Dossier d'install Piwigo] par ce qui correspond à votre cas */
  if (!defined('PHPWG_ROOT_PATH')) define('PHPWG_ROOT_PATH', './[Dossier d'install Piwigo]/');
    include (PHPWG_ROOT_PATH.'include/common.inc.php');
    global $conf;

//========================= Code pour debuggage ==================================
//========= Permet d'afficher toutes les variables traitées dans ce script =======
//    echo '<div style="visibility:hidden; height:0 "><pre>';
//        print_r($conf);
//     echo '</pre></div>';
//================================================================================

/* Récupération du flux généré par WS en fonction des attribues passés par $_GET */
  ob_start();
    include (PHPWG_ROOT_PATH . "ws.php");
    $result .= ob_get_contents();
  ob_end_clean();

/* Le flux est un tableau (array) sérialisé - Il faut le remettre en forme */
/* Il est possible d'afficher le flux brut pour voir ce que cela via le code de débuggage */
  $thumbc1 = unserialize( $result);
/* Début du traitement du flux */
  if ($thumbc1["stat"]=='ok')
  {
    /* Pour chaque image remontée par la fonction WS */
    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 */

      /* Et c'est ici qu'intervient la correction des url pour les miniatures */
      $picture['tn_url']=str_replace( $adr_rel,$adr_absolue,$picture['tn_url']);

      /* On récupère les bonnes infos pour les placer au bon endroit */
     /* Remplacez [Dossier d'install Piwigo] par ce qui correspond à votre cas */
      $HTML_txt = '<a href="./[Dossier d'install Piwigo]/picture.php?/'.$picture['id'].'" title="'.$picture['name'].'">'.
  '<img src="'.$picture['tn_url'].'" alt="'.$picture['name'].'"></a>';
      
      /* On affiche le résultat */
      echo $HTML_txt;
    }
  }
?>

3- Dans le fichier devant afficher l'aperçu, insérer à l'endroit voulu :

Code:

<?php
include 'ws2.php';
?>

4- Vérifier le résultat. Au besoin, en cas de problème, on peut utiliser le "code pour débuggage" présent dans le fichier ws2.php pour tracer les différentes variables et les visualiser dans FireFox en utilisant l'extension Firebug.

Fin...

Hors ligne

  •  » Utilisation
  •  » [Résolu] Web services en intra site chez Free

Pied de page des forums

Propulsé par FluxBB

github twitter newsletter Faire un don Piwigo.org © 2002-2024 · Contact