include fichier php

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,

Pour mettre à jour les stocks de mes produits dans ubercart j'ai créé un fichier php qui récupère un fichier csv uploadé dans un répertoire effectue l'update de la base et efface le fichier après.

Etant donné que les stocks seront mis à jour toutes les 15mn, je ne peux pas planifié l'appel du fichier car mon hébergement me limite à 1 tâche par heure.

Donc voilà ce que j'ai fait :
- j'ai créé une variable dans la base qui m'indique la date de la dernière mise à jour
- je la récupère et je test si la date actuelle est supérieure à la prochaine mise à jour. Si oui je fait un include de mon fichier.

Voilà ce que j'ai mis dans mon page.tpl.php

<?php
    $last_update
=variable_get('oz_update_stock', 0);
   
$next_update=$last_update+900;
   
$now=mktime();
          
    if(
$next_update<=$now){
        global
$base_url;
      include (
$base_url."/sites/all/themes/basic/import/import-polaris.php");
    }
   
?>

Je rencontre 2 problèmes :
- la variable 'oz_update_stock' n'est pas récupérée, elle prend toujours la valeur par défaut, bien quelle soit renseignée dans la base.

  • l'include est interdit, j'obtiens un message d'erreur suivant :
    warning: require() [function.require]: URL file-access is disabled in the server configuration in ...\sites\all\themes\basic\page.tpl.php on line 184.
    warning: require(http://oxford-boutique.localhost/sites/all/themes/basic/import/import-po...) [function.require]: failed to open stream: no suitable wrapper could be found in ...\sites\all\themes\basic\page.tpl.php on line 184.

Comment puis-je faire proprement pour mettre tout ça dans un module?

Dois-je faire un hook_nodeapi() avec un case 'view' où je mettrais ceci

Je ne sais pas trop comment m'y prendre.

MErci

Forum : 
Version de Drupal : 
Tags : 

Quelques remarques :

  • mieux vaut utiliser hook_cron() dans un module personnalisé plutôt que de mettre de la logique au niveau du template. hook_cron() est fait pour ce genre de tâches
  • n'utilise pas une URL complète pour inclure un fichier (on voit dans le message d'erreur que c'est désactivé), un chemin relatif fonctionnera bien mieux (par exemple "include('../import/import-polaris.php')")

je n'ai pas utilisé le cron car je suis limitée à 1 cron par heure et j'ai besoin d'une mise à jour tous les 1/4h.

Finalement j'ai fait un module comme ceci

<?php
function maj_stock_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
  switch ($op) {
    case 'view':
       if($node->type=='product'){
        $last_update=variable_get('oz_update_stock', 0);
            $next_update=$last_update+60;
          $now=mktime();
           
            if($next_update<=$now){
             if(module_load_include('php', 'maj_stock', "import-polaris")===FALSE){
                   //erreur include fichier log
                   $logfile = $_SERVER['DOCUMENT_ROOT']."/sites/default/files/log_import_stock.txt";
                  $f_log = fopen("$logfile","a");
                    $date= date("d/m/Y, H:i");
                   $texte_log=$date." - Erreur include import polaris \n";
                  fwrite($f_log, $texte_log);
                }          
           }
      }
      break;
  }
}