Отправка файла через CURL на php

07.06.2018

Скрипт позволяет отправить файл на сервер, как делает html форма, используя CURL.

Отправка (клиентский код)

 
<?php


  class soMain
  {
    protected function _doCommand($oCommand)
    {
      $oRet = new stdClass();
      $oRet->msg = '';
      $oRet->status = 'error';
      $oRet->result = '';
      $oRet->code = 0;
    
      //$data = '{"cart":{"currency":"RUR","items":[{"feedId":439556...';
      $data = $oCommand->data;
      //$data = http_build_query($data, '', '&');


      $aOptions = array (
        CURLOPT_URL => $oCommand->url,
        CURLOPT_POST => 1,
        CURLOPT_POSTFIELDS => $data,
        CURLOPT_RETURNTRANSFER => 1,
        CURLOPT_TIMEOUT => 45,
        CURLOPT_VERBOSE => 0,
        CURLOPT_SSL_VERIFYHOST => 0,
        CURLOPT_SSL_VERIFYPEER => 0,
//        CURLOPT_COOKIEFILE => $oCommand->sCookieFile,
//        CURLOPT_COOKIEJAR => $oCommand->sCookieFile,
      );

      $ch = curl_init();
      curl_setopt_array($ch, $aOptions);
      $response = curl_exec($ch);
    
      if ($response)
      {
        $oRet->status = 'ok';
        $oRet->result = $response;
        //$oRet->result = json_decode($oRet->result, TRUE); 
      }
      else
      {
        $oRet->status = 'error';
        $oRet->result = 'Curl error: ' . curl_error($ch); 
      }
      $oRet->code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
      curl_close($ch);

      return $oRet;
    }

    function go() 
    {
      $path = __DIR__.'/MY/noimage.jpg';
      
      $oCommand = new stdClass(); 
        $oCommand->url = 'http://oddler.ru/test.php';
        //$oCommand->sCookieFile = $oShell->sCookieFile;

        $oCommand->data = [];
        $oCommand->data['task'] = 'upload';
        $oCommand->data['uploadFile'] = "@$path";
      $oRet = $this->_doCommand($oCommand);
      
      echo '<pre>';
      print_r($oRet);
      echo '</pre>';
    }
  }


  $oMain = new soMain();
  $oMain->go();

Получение и обработка (серверный код)

 
<?php


  class soMain
  {

    function getVar($name, $Def=NULL) 
    {
      return isset($_REQUEST[$name])?$_REQUEST[$name]:$Def;
    }

    function go() 
    {
      $task = $this->getVar('task');
      
      if ($task == 'upload')
      {

        echo '<pre>';
        print_r($_FILES);
        echo '</pre>';
        copy($_FILES['uploadFile']['tmp_name'],__DIR__.'/'.$_FILES['uploadFile']['name']);
      }
      else
      {
?>
<form action="" enctype="multipart/form-data" method="post">
    <input type="file" id="uploadFile" name="uploadFile" /> <br/>
    <input type="hidden" name="task" value="upload" />
    <button>GO</button>
</form>

<?
      }
    }
  }


  $oMain = new soMain();
  $oMain->go();


Категории: PHP
Яндекс.Метрика