PHP 5.4.36 Released

http_put_file

(PECL pecl_http >= 0.10.0)

http_put_filePerform PUT request with file

Descrizione

string http_put_file ( string $url , string $file [, array $options [, array &$info ]] )

Performs an HTTP PUT request on the supplied url.

Vedere l'intera lista di opzioni della request.

Elenco dei parametri

url

URL

file

The file to put

options

opzioni della request

info

informazioni su Request/response

Valori restituiti

Restituisce la response HTTP come una stringa in caso dii successo, oppure FALSE.

add a note add a note

User Contributed Notes 1 note

up
0
D'n Russler d_n att CatchMedia dott com
4 years ago
After much frustration and very little documentation that I could find, I thought I'd offer this example of implementation of http_put_file with custom HTTP headers, and the corresponding ReceiveFile.php.

I do an http put with a customized header containing parameters for file processing.

<?php
      $header
= array(
                 
'file_size'   => $file_size
               
, 'file_name'   => $file_name
               
, 'md5sum'      => $md5sum
             
);

     
$URI = 'http://MyDomain.com/ReceiveFile.php';

      if ((
$f = @fopen($URI,'r'))) {
       
fclose($f);
        if (
$result = @http_put_file($URI, $file_path, array(
                   
headers => array(
                          
'X_CUSTOM_PUT_JSON'  => json_encode($header)
                          ,
'X_FRUIT'     => 'bananna'
                       
)
                  ,
useragent => 'Magic UnitTests'
                
)
                ,
$info))) {
          echo
str_replace("\n",'<BR>',$result);
        }
        else
           echo
'http failure';
     }
     else
        echo
"Can't find URI: [$URI]";
?>

ReceiveFile.php has:
<?php
      $CUSTOM_HEADER
= 'HTTP_X_CUSTOM_PUT_JSON';
     
$CHUNK = 8192;

      try {
        if (!(
$putData = fopen("php://input", "r")))
          throw new
Exception ("Can't get PUT data.");

        if (!(
array_key_exists($CUSTOM_HEADER, $_SERVER)))
          throw new
Exception ("Custom header missing.")

       
$json = json_decode($_SERVER[$CUSTOM_HEADER], true);
       
$this->logParams(__FUNCTION__, $json);
        foreach (
$json as $fld => $val)
          $
$fld = $val;

   
// now the params can be used like any other variable
    // see below after input has finished

       
$tot_write = 0;

     
// Create a temp file
       
if (!($tmpFileName = tempnam("/tmp", "PUT_FILE_")))
          throw new
Exception ("Can't create tmp file.");

     
// Open the file for writing
       
if (!($fp = fopen($tmpFileName, "w")))
          throw new
Exception ("Can't write to tmp file");

     
// Read the data a chunk at a time and write to the file
       
while ($data = fread($putData, $CHUNK)) {
         
$chunk_read = strlen($data);
          if ((
$block_write = fwrite($fp, $data)) != $chunk_read)
            throw new
Exception ("Can't write more to tmp file");

         
$tot_write += $block_write;
        }

        if ( !
fclose($fp) )
          throw new
Exception ("Can't close tmp file");

        unset(
$putData);

 
// Check file length and MD5
       
if ($tot_write != $file_size)
          throw new
Exception ("Wrong file size");

       
$md5_arr = explode(' ',exec("md5sum $tmpFileName"));
       
$md5 = $md5sum_arr[0];
        if (
$md5 != $md5sum)
          throw new
Exception ("Wrong md5");
?>
To Top