MyBB.support, le portail francophone de MyBB

Version complète : Problème d'inclusion
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.

VERSION_MyBB : 1.8.7
Bonjour,

Etant en train de développer un mini-site autour d'un forum MyBB en version 1.8.7, je me confronte à un problème entre le passage en local et le passage en ligne.

Je fais appel dans mon footer à l'inclusion d'un fichier me permettant d'afficher un modal bootstrap contenant diverses informations à propos d'un contenu journalier (en local cela fonctionne très bien) et m'affiche correctement ceci :

[Image: 1462889390-almanax-local.png]

Une fois tout envoyé sur mon FTP pour divers essais, j'obtiens ceci si je suis sur la partie site :
[Image: 1462889487-almanax-ligne.png]
et ceci lorsque je suis sur le forum :

[Image: 1462889854-error.png]


En cherchant un peu, je remarque qu'une fois en ligne le forum ne semble pas accepter l'utilisation de $settings['homeurl'] dans file_get_contents() alors qu'il le fait très bien en local.

Le code qui poserait problème est le suivant :

Code PHP :
<?php
$mois 
date("m"); $jour date("d");
$json_almanax file_get_contents($settings['homeurl']."json/almanax/".$mois.".json");
$almanax json_decode($json_almanax);

echo 
'

<div class="media">
  <div class="media-left media-middle">
      <img class="media-object item_almanax" src="'
.$settings['homeurl'].'images/items/'.$almanax->{$jour."/".$mois}->item.'.png" width="52px" height="52px">
  </div>
  <div class="media-body">
    <p>'
.$almanax->{$jour."/".$mois}->effet.'</p>
    <p><strong>'
.$almanax->{$jour."/".$mois}->description.'</strong></p>
  </div>
</div>'
;
?>
A préciser : en local j'utilise une version 5.6 de PHP, en ligne 5.4. Cela peut avoir un lien ? Je n'ai pas vu de remarques particulière entre ces deux versions concernant mon problème.
Merci d'avance de votre réponse.
Avant tout, tu es sur d'avoir bien transféré ton forum suivant ce tutoriel http://mybb.support/thread-3370.html ?
En ayant bien modifié la valeur de ce fameux $settings['homeurl'] du coup
Si les répertoires utilisés ne sont pas les mêmes qu'en local, bien sur cela ne fonctionnera pas.

Le fichier "http://beta-entraide.ordre2vlad.fr/json/almanax/05.json" existe et est visible en ligne.

De plus il doit y avoir un fichier ".htaccess" qui redirige certains appels URL vers "forum", car j'ai vu des redirections, ce qui apporte une autre confusion...

Je crois que tous les soucis sont en rapport avec la hiérarchie des répertoires et le fait qu'il y a redirection des adresses URL...
(10-05-2016, 16:40)Nitrome a écrit : [ -> ]Avant tout, tu es sur d'avoir bien transféré ton forum suivant ce tutoriel http://mybb.support/thread-3370.html ?
En ayant bien modifié la valeur de ce fameux $settings['homeurl'] du coup

Hello, ouaip de ce côté là tout est bon

@exdiogene : je vais regarder ça Smile
(10-05-2016, 17:18)exdiogene a écrit : [ -> ]Si les répertoires utilisés ne sont pas les mêmes qu'en local, bien sur cela ne fonctionnera pas.

Ce sont bien les mêmes, je n'ai rien modifié à ce niveau là.

(10-05-2016, 17:18)exdiogene a écrit : [ -> ]De plus il doit y avoir un fichier ".htaccess" qui redirige certains appels URL vers "forum", car j'ai vu des redirections, ce qui apporte une autre confusion...

Il y a le fichier .htaccess du forum pour la réécriture d'URL de celui-ci, fourni avec MyBB de base, ainsi qu'un autre lié à la partie site, mais qui ne redirige pas vers le forum, voici son contenu :

Code :
RewriteEngine on

RewriteRule ^([a-z]+)-([a-z]+)$ $1-$2.php
RewriteRule ^([a-z]+)_([a-z]+)$ $1_$2.php
RewriteRule ^([a-z]+)$ $1.php

RewriteRule ^bienvenue/$  bienvenue.php  [L]

RewriteRule ^articles/$  articles.php  [L]
RewriteRule ^articles/([0-9]+)$  articles.php?id=$1  [L]
RewriteRule ^articles/([0-9]+)-(.*)$  articles.php?id=$1&t=$2  [L]
RewriteRule ^articles/page/([0-9]+)$  articles.php?p=$1  [L]
RewriteRule ^articles/creer articles.php?action=creer  [L]
RewriteRule ^articles/valider articles.php?action=valider  [L]
RewriteRule ^articles/mes_articles articles.php?action=voir [L]

RewriteRule ^news/$  news.php  [L]
RewriteRule ^news/([0-9]+)$ news.php?id=$1  [L]
RewriteRule ^news/([0-9]+)-(.*)$  news.php?id=$1&t=$2  [L]
RewriteRule ^news/page/([0-9]+)$ news.php?p=$1  [L]

RewriteRule ^annonces/$  annonces.php  [L]
RewriteRule ^annonces/([0-9]+)$ annonces.php?id=$1  [L]
RewriteRule ^annonces/([0-9]+)-(.*)$  annonces.php?id=$1&t=$2  [L]
RewriteRule ^annonces/page/([0-9]+)$ annonces.php?p=$1  [L]
RewriteRule ^annonces/creer annonces.php?a=creer  [L]
RewriteRule ^annonces/mes_annonces annonces.php?a=voir  [L]
RewriteRule ^annonces/informations annonces.php?a=infos  [L]

RewriteRule ^dimensions/$  dimensions.php  [L]
RewriteRule ^dimensions/([A-z]+)$ dimensions.php?dim=$1  [L]

RewriteRule ^vulkania/$  vulkania.php  [L]
RewriteRule ^vulkania/gestion vulkania.php?action=gestion  [L]
RewriteRule ^vulkania/ouverture/([0-9]+)$ vulkania.php?action=ouverture&id=$1 [L]
RewriteRule ^vulkania/ouverture/([0-9]+)-(.*)$ vulkania.php?action=ouverture&id=$1&n=$2 [L]

RewriteRule ^kralamoure/$  kralamoure.php  [L]
RewriteRule ^kralamoure/gestion kralamoure.php?action=gestion  [L]
RewriteRule ^kralamoure/ouverture/([0-9]+)$ kralamoure.php?action=ouverture&id=$1 [L]
RewriteRule ^kralamoure/ouverture/([0-9]+)-(.*)$ kralamoure.php?action=ouverture&id=$1&n=$2$n=$2 [L]

RewriteRule ^erreur404  erreur404.php  [L]
ErrorDocument 404 http://beta-entraide.ordre2vlad.fr/erreur404
Avec "http://ordre2vlad.fr/beta-entraide.ordre2vlad.fr/inc/tpl/almanax.php" il y a redirection vers "http://forum.ordre2vlad.fr/beta-entraide.ordre2vlad.fr/inc/tpl/almanax.php".
J'ai fermé le domaine principal http://ordre2vlad.fr car je ne l'utilisais plus, et j'ai donc redirigé les visiteurs vers le forum principal de cet hébergement (sur le sous-domaine http://forum.ordre2vlad.fr/).

Je ne vois pas trop en quoi ça peut influencer sur un autre sous-domaine :o
Ce qui est étrange, au final :
C'est que $settings['homeurl'] est bien utilisé dans le HTML du modal et ne pose aucun problème, mais que dans le PHP ça déconne ;/


Code :
<div class="modal fade" id="alma" tabindex="-1" role="dialog">
 <div class="modal-dialog" role="document">
   <div class="modal-content">
     <div class="modal-header">
       <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
       <h4 class="modal-title"><img src="<?php echo $settings['homeurl']; ?>images/dolmanax.png" width="32px" height="32px">Calendrier de l'Almanax - <strong><?php echo date('d/m/Y'); ?></strong></h4>
      </div>
     <div class="modal-body">
<?php
$mois = date("m"); $jour = date("d");
$json_almanax = file_get_contents($settings['homeurl']."json/almanax/".$mois.".json");
$almanax = json_decode($json_almanax);

echo '

<div class="media">
 <div class="media-left media-middle">
     <img class="media-object item_almanax" src="'.$settings['homeurl'].'images/items/'.$almanax->{$jour."/".$mois}->item.'.png" width="52px" height="52px">
 </div>
 <div class="media-body">
   <p>'.$almanax->{$jour."/".$mois}->effet.'</p>
   <p><strong>'.$almanax->{$jour."/".$mois}->description.'</strong></p>
 </div>
</div>';
?>
<i class="float_right"style="font-size:10px;">Dernière mise à jour: 09/05/2016.</i>
     </div>
     <div class="modal-footer" style="padding-top:10px;">
       <button type="button" class="btn btn-danger" data-dismiss="modal">Fermer</button>
     </div>
   </div>
 </div>
</div>
L'erreur principale est celle-ci :
file_get_contents(http://beta-entraide.ordre2vlad.fr/json/almanax/05.json): failed to open stream: HTTP request failed! HTTP/1.1 412 Precondition Failed

Pour utiliser "file_get_contents" avec une adresse URL il faut activer "allow_url_fopen" dans php.ini, ce qui n'est peut-être pas le cas chez votre nouvel hébergeur.

Il y a aussi cette solution alternative :

// Créer un flux
$opts = array(
 'http'=>array(
   'method'=>"GET",
   'user_agent' => 'mon user agent'
 )
);

$context = stream_context_create($opts);

// Ouvrir le fichier utilisant l'entête HTTP précédente
$file = file_get_contents('http://www.example.com/', false, $context);

Je ne peux vous en dire plus... Wink

P.S. Il est aussi possible de donner la référence du fichier sur le serveur sans passer par HTTP...
Très bien je vous remercie, je vais voir avec mon hébergeur ce qu'il est possible de faire au niveau de cette option, et dans le cas ou ce ne serait pas possible, je changerai de méthode !

Bonne fin de journée Smile
 Utilitaire de traduction fourni par Regentronique