topic:16979
Topic, j'ai des interrogations, et des suggestions à faire.
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.
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é" ?
VDigital a écrit:
Eric, nous avons besoin de toi. => Tu restes.
Et M.... à Laurence B.!
;-)
c'est vrai
Sinon on manquerait d'idées :-))
Eric, nous avons besoin de toi. => Tu restes.
Et M.... à Laurence B.!
;-)
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.
@é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+
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.
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+
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.
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
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"
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):
<?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 :
<?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...
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+