File_put_contents

Bonjour,

J’ai le code suivant que j’exécute depuis un scenario:

$url = ‹ http://aa.bb.cc.dd:8080/ ›;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_URL, $url);
$response = curl_exec($ch);
file_put_contents(« myfile.json », $response);
curl_close($ch);

Lorsque je l’exécute manuellement, cela fonctionne et le fichier est bien créé, par contre lorsque qu’il est lancé en mode scheduled (*/10 * * * *), le fichier n’est pas créé.
J’ai essayé d’exécuter un script avec la commande « echo shell_exec(getmyfile.sh); » au lieu du curl depuis le scénario, mais j’ai le même résultat.
Je pense que cela doit être au niveau des droits d’écriture du cron, mais je ne sais pas comment le résoudre.

Merci pour votre aide.

Il doit bien y avoir un fichier myfile.json quelque part. Peut-être pas là où vous le cherchez.
Mettez un chemin absolu en 1er argument.

Il peut aussi y avoir des erreurs de curl.
J’utilise pour un plugin dans une fonction:

  function fetchWebsite($url) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
    
    $content = curl_exec($ch);
    if ($content === false) {
      log::add('script','error', __FUNCTION__ ."URL: $url Failed curl_error: (" .curl_errno($ch) .") " .curl_error($ch));
      curl_close($ch);
      return(null);
    }
    curl_close($ch);
    return($content);
  }

Puis avec le résultat de l’appel de cette fonction

 $url = "http://aa.bb.cc.dd:8080/";
 $response = fetchWebsite($url);
 if($response === null) {
   log::add('script','error',"CURL: $url Empty response");
 }
 else {
   $file = __DIR__ ."/myfile.json";
   $resu = file_put_contents($file,$response);
   if($resu === FALSE) {
     log::add('script','error',"Unable to write $file");
   }
 }

Bonsoir,

Je viens de tester suivant les indications et cela fonctionne correctement.
Merci beaucoup pour ton aide.

Cordialement

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.