Bonjour à tous,

Je suis sur une projet où je dois coder une site internet en php. Ce site est "lié" à une API.

Le but du site est de créer des fiches de non conformité pour ensuite y avoir accès. Mon problème est lors de l'ajout de photos à une fiche.

Voici mon code:

//récupération du token pour avoir accès à la fonction de l'API
$token_file=fopen("headers.txt","r");
        $i=0;
        while($i<2)
        {
            $token=fgets($token_file);
            $i++;
        }
        fclose($token_file);

//récupération du chemin de la photo (c'est le bon chemin qui récupère la photo j'ai testé
        $pathCurrrent=getcwd ();
        $path= str_replace("public", "src/Controller", $pathCurrrent);
        $dir    = "$path/uploads";
        $allFiles = scandir($dir);
        $files=array_diff($allFiles, array('.','..'));
        print_r($files);
        $photo=$dir.'/'.$files[2];
        echo $photo;

        $curl = curl_init();

        curl_setopt_array($curl, array(
            CURLOPT_URL => "http://monURl/uploadFile?flashAttributes=%7B%7D&fnc_id=7&type=true",
            CURLOPT_ENCODING => "",
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 0,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => "POST",
            CURLOPT_POSTFIELDS => array('file'=> new CURLFILE($photo)),
            CURLOPT_HTTPHEADER => array(
                rtrim($token, "\r\n"),
                'Accept: /',
                "Content-Type: multipart/form-data"

            ),
        ));
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_POST, 1);

        $result = curl_exec($curl);
        var_dump($result);
        $http_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
        var_dump($http_code);
        curl_close($curl);

Cependant cela me renvoie une erreur 406 je ne comprends pas pourquoi. Pourriez-vous m'aider ? Un grand merci !

1 réponse


finalement j'ai fais ça

$token_file=fopen("headers.txt","r");
      $i=0;
      while($i<2)
      {
          $token=fgets($token_file);
          $i++;
      }
      fclose($token_file);

      $pathCurrrent=getcwd ();
      $path= str_replace("public", "src/Controller", $pathCurrrent);
    //  echo $path;
      $dir    = "$path/uploads";
      $allFiles = scandir($dir);
      $files=array_diff($allFiles, array('.','..'));
      print_r($files);
      $photo=$dir.'/'.$files[2];
    //  print_r($files[2]);
      echo $photo;

      $boundary = uniqid();
      echo $boundary;
      $delimiter = '-------------' . $boundary;

   /*   if (function_exists('curl_file_create')) { // php 5.5+
          $cFile = curl_file_create($photo);
      } else { //
          $cFile = '@' . realpath($photo);
      }
      $post = array('extra_info' => '123456','file'=> $cFile);*/

      $curl = curl_init();

      curl_setopt_array($curl, array(
          CURLOPT_URL => "http://varlot.epfprojets-sceaux.com:8080/uploadFile?flashAttributes=%7B%7D&fnc_id=7&type=true",
          CURLOPT_ENCODING => "",
          CURLOPT_MAXREDIRS => 10,
          CURLOPT_TIMEOUT => 0,
          CURLOPT_FOLLOWLOCATION => true,
          CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
          CURLOPT_CUSTOMREQUEST => "POST",
          CURLOPT_POSTFIELDS => array('file'=> @$photo),
          CURLOPT_HTTPHEADER => array(
              rtrim($token, "\r\n"),
             // 'Accept: /',
              "Content-Type: multipart/form-data; boundary=" . $delimiter,

          ),
      ));
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($curl, CURLOPT_POST, 1);

    //  curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
      //$postfiles=array('file'=> new CURLFILE($photo));
     // print_r($postfiles);

      $result = curl_exec($curl);
      var_dump($result);
      $http_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
      var_dump($http_code);
      curl_close($curl)

Et j'ai l'erreur 400 Required request part 'file' is not present. Mais je ne comprends pas car il y le champs 'file'. j'ai essayé de la faire en mettant new CURLFILE aussi mais j'ai eu la même erreur...