Annonce

Écrire une réponse

Veuillez écrire votre message et l'envoyer

Cliquez dans la zone sombre de l'image pour envoyer votre message.

Retour

Résumé de la discussion (messages les plus récents en premier)

Eric
2010-02-01 21:20:09

topic:16979

VDigital
2010-02-01 20:49:39

Topic, j'ai des interrogations, et des suggestions à faire.

cljosse
2010-02-01 18:18:01

Eric a écrit:

On en parle ici ou serait-il préférable d'ouvrir un topic dans la section "Demandes de fonctionnalité" ?

Je pense qu'il serait préférable d'ouvrir un topic  "Demandes de fonctionnalité", de façon à terminer ce topic et passer à autre chose.

Eric
2010-02-01 17:48:05

cljosse a écrit:

VDigital a écrit:

Eric, nous avons besoin de toi. => Tu restes.
Et M.... à Laurence B.!
;-)

c'est vrai
Sinon on manquerait d'idées :-))

Bon, ben... Devant tant de soutien, je ne peux faire autrement que rester. Et puis de quoi elle se mêle Laurence B. ;-))

Plus sérieusement, je vais résumer la situation (à rectifier si nécessaire). Nous avons donc 3 problèmes à résoudre dans le cas qui nous occupe ici :

1- Bug:1418, pour ne plus avoir d'incompatibilités avec d'autres scripts sur la fonction redirect()
2- Modifier ws.php pour éviter d'avoir des problèmes de redéfinition de PHPWG_ROOT_PATH
3- Modifier include/ws_protocols/php_encoder.php pour générer du "text/html" au lieu du "text/plain"

Pour le point 1, cela va impliquer la modification de tous les plugins faisant appel à redirect(). J'en ai dénombré moins d'une dizaine. Pour les points 2 et 3, il faudra voir si de telles modifications n'auront pas d'effets de bord néfastes.

On en parle ici ou serait-il préférable d'ouvrir un topic dans la section "Demandes de fonctionnalité" ?

cljosse
2010-02-01 14:34:14

VDigital a écrit:

Eric, nous avons besoin de toi. => Tu restes.
Et M.... à Laurence B.!
;-)

c'est vrai
Sinon on manquerait d'idées :-))

VDigital
2010-02-01 14:13:33

Eric, nous avons besoin de toi. => Tu restes.
Et M.... à Laurence B.!
;-)

Eric
2010-02-01 12:49:57

Laurence B. a dit : "Eric, vous êtes le maillon faible. Au revoir !" :-)

Très bonne analyse, M. cljosse !
Je vais m'employer à trouver une solution pérenne à ce problème (modification de ws.php ?) car masquer les erreurs, c'est un peu cacher la m.. au chat.

cljosse
2010-01-31 17:13:27

@éric
Une petite explication:

Quand tu inclus ws2.php tu définis la variable PHPWG_ROOT_PATH
pour inclure "include/common.inc.php" sinon un 'Hacking attempt!' est renvoyé.
Ta variable est bien définie à ce moment. Et quand tu inclus ws.php
le warning apparait.
Deux solutions pour supprimer ce Warning

Soit tu corriges le fichier ws.php (peut-etre une demande de modification à remonter)

Ou tu modifies la gestion des erreurs de ton serveur.
La trois possibilités:
1°) - possibilitée par programme avec init_set(xx), ini_restore(xx),error_reporting(); 

2°) - modifier ton fichier php.ini.
3°) - modifier la variable $conf['show_php_errors'] :

Quand tu écris dans ton fichier include/config_local.inc.php
$conf['show_php_errors'] =  E_ALL & ~E_NOTICE & ~E_DEPRECATED;

Piwigo lors du chargement du programme lit ce fichier de configuration et transmet les informations au serveur

Ce qui est equivaut à modifier la variable error_reporting de  ton fichier php.ini

error_reporting — Fixe le niveau de rapport d'erreurs PHP

Par défaut dans easyphp ou wampServer
error_reporting = E_ALL

chez free error_reporting = 2039 voir phpinfo() ce qui ce décomponse en :
1 E_ERROR 
2 E_WARNING 
4 E_PARSE 
8 ~E_NOTICE 
16 E_CORE_ERROR 
32 E_CORE_WARNING 
64 E_COMPILE_ERROR 
128 E_COMPILE_WARNING 
256 E_USER_ERROR 
512 E_USER_WARNING 
1024 E_USER_NOTICE 
   Le bit 8 (E_NOTICE  ) est bien à zéro c'est bien pour cette raison que le warning n'est visible qu' en local.



Toutes les erreurs sont affichées,
Le fait de mettre le bit E_NOTICE à zéro masque les erreurs de type WARNING.
Erreur émise sur une redéclaration de constante comme dans ton cas.

voir http://www.lephpfacile.com/manuel-php/f … orting.php

J' espère que ces explications t'aideront à y voir plus clairi.
A+

Eric
2010-01-31 13:01:39

Euh... Désolé mais je ne vois pas le rapport avec le config_local.inc.php. L'erreur ne se trouve pas sur la galerie mais sur ma page d'index sur laquelle j'inclue mon ws2.php. Et uniquement en local, pas sur mon site en ligne.

cljosse
2010-01-31 10:26:20

Eric a écrit:

@cljosse (pour info): 
  On a une erreur php   (PHPWG_ROOT_PATH already defined in...).

Bonjour.
Réflexion matinale.

Ajoute dans ton include/config_local.inc.php
$conf['show_php_errors'] =  E_ALL & ~E_NOTICE & ~E_DEPRECATED;

Comme cela les "warning" PHP ne seront plus affichés .

A+

Eric
2010-01-30 20:55:38

Oui... Mais non ^^

Il faudrait au maximum éviter de toucher au code natif de Piwigo car à la moindre mise à jour : Bye, bye, les modifs. Donc, s'il y a d'autres approches, il faut les privilégier. Et puis tu remarqueras que les iframe, c'est vraiment  pas top sans parler du HTML Strict (dans mon cas).

J'ai proposé une solution avec iframe uniquement à cause de la double déclaration de redirect() qui est une fonction que l'on retrouve dans Piwigo et FluxBB. Donc, sur ma page, comme j'affiche aussi les 5 dernières discussions de mon forum par le biais d'un include d'une fonction d'externalisation des données de FluxBB, j'obtenais une erreur "can not redeclare ...".
J'ai résolu en renommant la fonction redirect() de FluxBB mais, à terme, il serait bon de changer le nom de la fonction redirect() de Piwigo (d'où le [Bugtracker] ticket 1418).

Enfin, l'essentiel est que cela fonctionne en ligne sans avoir à bidouiller le core de Piwigo.

cljosse
2010-01-30 18:29:45

Il faut que tu fasse cette modification 
include/ws_protocols/php_encoder.php
        function getContentType()
     en remplaçant                return 'text/plain'  par return 'text/html'
les fichier sont de type html et non plain, sinon pas d'affichage correct sous FF

Tu pourrais simplement faire un
<iframe src="ws2.php" ></iframe>
voir en exemple:
http://cl.josse.free.fr/test_ws.html

Eric
2010-01-30 18:08:51

cljosse a écrit:

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'

J'ai essayé mais j'ai toujours "Constant PHPWG_ROOT_PATH already defined in..." ce qui génère "Notice: unserialize() [function.unserialize]: Error at offset 0 of 3951 bytes in E:\www\monsite\ws2.php on line 55"

Eric
2010-01-30 17:57:29

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...

cljosse
2010-01-30 17:56:59

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+

Pied de page des forums

Propulsé par FluxBB

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