problème php include chez Free

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : problème php include chez Free

Re: problème php include chez Free

par pled » 06 mars 2010, 20:13

J'ai pensé à un truc, mais je ne sais pas si c'est possible :

Puisque la bannière aléatoire ne fonctionne plus sur wordpress, je l'ai intégré à mon thème zenphoto.
Quand j'affiche la page d'accueil de l'album photo, et que je regarde le code source de la page, je vois :
<div id="randomhead"><a href='/wordpress/zenphoto/index.php?album=Amis/2009/lambon-200c-dimanche&image=dimanche-lambon-2009-06.jpg' title='Morceau d`image...'><img src='/wordpress/zenphoto/cache/Amis/2009/lambon-200c-dimanche/dimanche-lambon-2009-06_w970_h140_cw970_ch140.jpg' width=970 height=140 /></a></div>
L'image a donc été générée dans le cache de zenphoto, et dans un sous-répertoire correspondant au chemin d'où l'image a été extraite.
Et comme c'est aléatoire, le nom de l'image source (img src) change à chaque chargement de la page d'accueil de zenphoto.

Ce qu'il faudrait, c'est que la fonction génère un nom d'image toujours le même, et toujours dans le même répertoire. Le lien href, je peux m'en passer.
Alors, je pourrais alors facilement afficher cette image dans mon header wordpress...
Ça vous parait possible ?


Voilà la fonction zenphoto utilisée :
function printHeadingImage($randomImage) {
$id = getAlbumId();
if (is_null($randomImage) || checkforPassword(silent)) {
$randomImage= new Image(new Album(new Gallery(), ''), 'zen-logo.jpg' );
}
if (!is_null($randomImage)) {
echo '<div id="randomhead">';
$randomAlbum = $randomImage->getAlbum();
$randomAlt1 = $randomAlbum->getTitle();
if ($randomAlbum->getAlbumId() <> $id) {
$randomAlbum = $randomAlbum->getParent();
while (!is_null($randomAlbum) && ($randomAlbum->getAlbumId() <> $id)) {
$randomAlt1 = $randomAlbum->getTitle().":n".$randomAlt1;
$randomAlbum = $randomAlbum->getParent();
}
}
$randomImageURL = getURL($randomImage);
echo "<a href='".$randomImageURL."' title='".gettext('Morceau d`image...')."'><img src='".
$randomImage->getCustomImage(NULL, 970, 140, 970, 140, NULL, NULL, !getOption('Watermark_head_image')).
"' width=970 height=140 alt=".'"'.
htmlspecialchars($randomAlt1, ENT_QUOTES).
":n".htmlspecialchars($randomImage->getTitle(), ENT_QUOTES).
'" /></a>';
echo '</div>';
}
}

Re: problème php include chez Free

par pled » 04 mars 2010, 21:04

Dr@ke,

Je crois en effet qu'il n"y a pas de solution simple. J'ai donc posé la question sur le forum zenphoto, et bon... il y avait une autre manière de faire, appelée "zenphoto as a plugin for wordpress", où l'on intégrait un truc du genre :
<?php
define('ZENFOLDER', 'zp-core');
define('WEBPATH', 'http://127.0.0.1/wordpress/zenphoto');
require_once(WEBPATH . "/" . ZENFOLDER . "/template-functions.php");
?>
Hélas, cela ne marche plus dans les versions récentes de Wordpress, ce dernier ayant changé la manière de charger les pages du thème.

Il me reste donc à faire une croix sur ma jolie bannière random ! ou à changer d'hébergeur, mais Free offre tout de même un truc sympa et gratuit (avec 100Go d'espace disque). Donc je pense en rester là...

J'aimerai bien avoir une explication de Free à propos de ce changement dans leur sécurité (après tout, je fais un include mais tout se passe chez free !), mais là pour avoir des infos de ce genre, il faut se lever de bonne heure je crois ! ;-)

Merci encore pour ton aide !

Re: problème php include chez Free

par Dr@ke » 03 mars 2010, 01:26

Donc sinon les fonctions require(), include() et file_get_contents(), ne fonctionneront pas avec des variables $_GET en local, c'est à dire sans le protocole HTTP.
Car la variable $_GET ne sera pas interprétée ou prise en compte.
Le seul moyen est d'utiliser le protocole HTTP, mais apparemment ton hébergeur ne l'autorise plus.

Ce qui explique que même avec le bon chemin, cela ne fonctionnera pas avec la même méthode que tu utilisais précédemment.

C'est à dire en reprenant le chemin initial: gallery/?p=heading
Car si avant ceci fonctionnait:
include("http://pascal.ledisque.free.fr/gallery/?p=heading");

Alors le chemin sans utiliser le protocole HTTP aurait dû être : ./gallery/?p=heading
ou ../gallery/?p=heading

Donc le soucis principal ici, n'est pas le chemin mais plutôt de trouver un moyen pour éviter d'utiliser le protocole HTTP tout en utilisant la query string ?p=heading .

Ou bien en extrayant le code que tu as besoin des fichiers heading.php ... dans un nouveau fichier include() que tu appelleras de façon traditionnelle et donc sans query string...
Mais n'ayant pas tous les fichiers sous la main, je ne peux t'en dire plus.

Voila, a quelque chose près, c'est en gros ça :wink:

PS:
Sinon désolé, je n'ai pas percuté tout de suite

Re: problème php include chez Free

par pled » 02 mars 2010, 20:45

merci Dr@ke,

Et bien je met :
$homepage = file_get_contents('./zenphoto/?p=heading'); echo $homepage; 
parce que la fonction include qui fonctionne est comme ceci :
<?php include ("http://127.0.0.1/wordpress/zenphoto/?p=heading") ?> 
et que le répertoire courant est /var/www/wordpress.

J'ai vérifié avec file_exists, le fichier heading.php est bien trouvé :
<?php
// a toi de le renseigner
$fichier = './zenphoto/themes/zenpage-default/heading.php';
if (file_exists($fichier)) echo 'Fichier trouvé: ' . $fichier;
else echo 'Fichier introuvable';
?>
Alors j'ai remplacé le "?p=heading" par un simple heading.php en utilisant la fonction include :
<?php include ("./zenphoto/themes/zenpage-default/heading.php") ?>
Et là, j'ai un erreur différente :
Fatal error: Call to undefined function getRandomImages()
=> C'est la fonction de zenphoto appelée dans heading.php.

Mais si j'utilise de la même manière la fonction file_get_contents(), alors j'ai le contenu du fichier heading.php qui s'affiche, une zone pour la bannière, mais vide...

Bon, si je résume ce que je comprend :
- il faut utiliser la fonction include, file_get_content ne marchera pas dans ce cas.
- il faut absolument qu'il y ait ce "?p=heading" sinon problème...
- le path est bon, puisque le fichier est trouvé.

Je vais poster la question sur le forum de zenphoto : contrairement à ce qu'il m'a dit, avec un chemin relatif (et on sait maintenant qu'il est bon), l'appel échoue.

Suite au prochain numéro !

Re: problème php include chez Free

par Dr@ke » 01 mars 2010, 21:14

Tu dis que le chemin à partir de /var/www/wordpress/ c'est ça:

Code : Tout sélectionner

/zenphoto/themes/zenpage-default/heading.php
Alors pourquoi mettre juste ça:

Code : Tout sélectionner

/zenphoto/
?


De plus ton chemin est erroné car dans mes souvenirs :tous les thèmes, plugins... se trouvent dans le dossier /wp-content/ sur Wordpress.

No such file or directory montre que l'erreur est véritablement le chemin.

Il faut t'assurer du chemin véritable de ton fichier avec ton client ftp.
Ensuite, tu peux tester:
<?php
// a toi de le renseigner
$fichier = '/var/www/wordpress/...';
if (file_exists($fichier)) echo 'Fichier trouvé: ' . $fichier;
else echo 'Fichier introuvable';
?>
http://php.net/manual/fr/function.file-exists.php

Re: problème php include chez Free

par pled » 01 mars 2010, 21:02

bon, ça ne marche toujours pas... pourtant, avec l'affichage du path juste avant, j'ai :
<?php echo getcwd(); ?> 
/var/www/wordpress
Donc je suis toujours dans l'index.php à la racine de wordpress, et pas dans le répertoire du thème.
C'est déjà un progrès ! j'ai bien cru que ça allait marcher !

J'ai essayé plein de combinaisons, la plus logique étant celle-ci à priori :
$banniere = file_get_contents('./zenphoto/?p=heading');
 echo $banniere;
ou encore :
$banniere = file_get_contents('./zenphoto/themes/zenpage-default/?p=heading'); echo $banniere;
Mais à chaque fois le même message d'erreur :
Warning: file_get_contents(./zenphoto/?p=heading) [function.file-get-contents]: failed to open stream: No such file or directory in /var/www/wordpress/wp-content/themes/cutline-3-column-split-11/header.php on line 63

J'ai même utilisé la commande chdir pour changer manuellement de répertoire, ça ne marche pas non plus.

Enfin, au lieu de la fonction, j'ai mis un nom de fichier, comme search.php (présent dans le répertoire du thème), et là, j'arrive bien à accéder au fichier.

J'ai l'impression que ce n'est pas un problème de chemin, et qu'il faut vraiment utiliser le protocole http pour que la fonction marche. Et comme je ne vois pas comment utiliser un chemin relatif dans une URL... ça m'a l'air mal parti !

Merci en tout cas pour vos réponses et encouragements, ça fait plaisir.

Re: problème php include chez Free

par Dr@ke » 26 févr. 2010, 20:54

Voilà la config :
Wordpress : /var/www/wordpress/wp-content/themes/cutline-3-column-split-11/header.php
=> c'est dans ce fichier que je place mon include
Zenphoto : /var/www/wordpress/zenphoto/themes/zenpage-default/heading.php
=> c'est ce fichier qui me renvoie une image random

La ligne suivante fonctionne donc :
<?php include("http://127.0.0.1/wordpress/zenphoto/?p=heading"); ?>
J'ai essayé plein de chemins relatifs (ou absolus), aucun ne fonctionne :
<?php include '../../../zenphoto/?p=heading' ?>
<?php include '/wordpress/zenphoto/?p=heading' ?>
Le répertoire courant est le répertoire où se trouve la page ou tu es connecté.
Tu dis que le fichier contenant ton include est le fichier header.php.
Tu dis connaitre son chemin -> bien
Mais si le fichier header.php est lui même inclut dans un autre fichier, alors le répertoire courant sera le répertoire de cet autre fichier...
Pas très clair, j'avoue, mais bon :wink:

Partons du principe où le répertoire courant est bien celui qui contient le fichier header.php.
Alors son chemin devrait être:
/var/www/wordpress/wp-content/themes/cutline-3-column-split-11/header.php
Le chemin de ton script bannière devrait être:
/var/www/wordpress/zenphoto/themes/zenpage-default/heading.php

Bon, quel est le chemin similaire à ces deux fichiers?
eh bien: /var/www/wordpress/
Il faudra donc descendre jusqu'à ce chemin.

Maintenant quel chemin reste-il a faire ensuite?
Eh bien: /zenphoto/themes/zenpage-default/

Re: problème php include chez Free

par Calimero » 26 févr. 2010, 19:32

Question de fainéant, mais il doit y avoir moyen (en local) d'afficher le répertoire courant, non ? (un genre echo pwd...).
<?php echo getcwd(); ?>
Courage, tu es normalement sur la bonne piste et ça devrait finir par marcher :)

++

Re: problème php include chez Free

par pled » 25 févr. 2010, 21:25

Merci Stealth35,

Je vais essayer ça... en local, si j'utilise l'URL HTTP, ça fonctionne, et quand je passe en chemin relatif ou absolu, je prend toujours le même message d'erreur. Il faut que je creuse ça...

J'ai fait un rapide essai chez Free : si j'utilise le lien THHP, je reçois exactement le même message que pour l'include... et pour le chemin relatif, il faut que je trouve le bon mécanisme en local auparavant...

Question de fainéant, mais il doit y avoir moyen (en local) d'afficher le répertoire courant, non ? (un genre echo pwd...).
Ou encore comment puis-je activer un mode "debug" sur mon serveur php local ? (question de candide cette fois)

Merci en tout cas de proposer des solutions.

Re: problème php include chez Free

par stealth35 » 23 févr. 2010, 23:48

echo file_get_content('path/to/file')

Re: problème php include chez Free

par pled » 23 févr. 2010, 21:01

Merci Calimero,

Mais ta réponse me parait bien compliquée... déjà que je suis un peu largué...

Par contre, sur le forum de zenphoto, le développeur m'a répondu que l'include nécessitait un chemin de fichier, pas de WEB URL, et qu'il suffisait que je trouve le bon chemin...

Alors je fais le test sur mon pc en local, où j'ai à peu près la même config, mais impossible de trouver ce fameux "relative path".

Voilà la config :
Wordpress : /var/www/wordpress/wp-content/themes/cutline-3-column-split-11/header.php
=> c'est dans ce fichier que je place mon include
Zenphoto : /var/www/wordpress/zenphoto/themes/zenpage-default/heading.php
=> c'est ce fichier qui me renvoie une image random

La ligne suivante fonctionne donc :
<?php include("http://127.0.0.1/wordpress/zenphoto/?p=heading"); ?>

J'ai essayé plein de chemins relatifs (ou absolus), aucun ne fonctionne :
<?php include '../../../zenphoto/?p=heading' ?>
<?php include '/wordpress/zenphoto/?p=heading' ?>

L'erreur est toujours la même :

Warning: include(/wordpress/zenphoto/?p=heading) [function.include]: failed to open stream: No such file or directory in /var/www/wordpress/wp-content/themes/cutline-3-column-split-11/header.php on line 43
Warning: include() [function.include]: Failed opening '/wordpress/zenphoto/?p=heading' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/wordpress/wp-content/themes/cutline-3-column-split-11/header.php on line 43

Je n'y comprend rien !

Re: problème php include chez Free

par Calimero » 18 févr. 2010, 23:43

Ton include semble avoir pour but de simplement récupérer le code html de la page, il y a peut-être des alternatives avec des clients http (soit scriptables, soit en ligne de commande).

Trois pistes à explorer, dans l'ordre : curl, wget et lynx (clients web en ligne de commande).

Il est possible qu'aucune des trois ne fonctionne chez free.

problème php include chez Free

par pled » 18 févr. 2010, 20:25

Bonjour,

Free semble récemment avoir augmenté la sécurité, et mon appel "php include" ne marche plus. J'ai un beau message d'erreur, qui a au moins le mérite d'être clair :
"Accès interdit - La configuration du contrôle d'accès interdit d'être acceptée à cette heure-ci. Veuillez contacter votre prestataire de
service si vous pensez que ceci n'a pas lieu d'être."

J'ai un blog (/wordpress) et un album photo (/gallery) et pour afficher une bannière aléatoire dans wordpress, tirée de zenphoto, je fais l'appel suivant :

<div id="header_img">
<?php $banniere = include("http://pascal.ledisque.free.fr/gallery/?p=heading");
if ($banniere <> 1)
echo"<img src=\"http://pascal.ledisque.free.fr/gallery/banniere.jpg\">";
?>

J'avais déjà posté sur ce forum (il y a un an) pour inclure le test, car parfois la fonction échouait. Et cela fonctionnait parfaitement... jusqu'à il y a 3 semaines. J'ai donc du pour l'instant supprimer carrément l'appel à la fonction php include, et afficher une image fixe.

On me dit d'utiliser un chemin relatif, mais ça ne marche pas. Ni en local sur mon pc d'ailleurs : j'en conclue que je dois absolument utiliser le protocole http pour que l'appel à la fonction zenphoto fonctionne. Ça parait logique, non ? (si quelqu'un peut le confirmer...)

Et je ne vois pas comment utiliser un chemin relatif avec le protocole http.

Alors voilà, je suis coincé ? quelqu'un voit-il une solution de contournement ?

Merci.