HTTP 函数
在线手册:中文  英文

http_put_file

(PECL pecl_http >= 0.10.0)

http_put_filePerform PUT request with file

说明

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

Performs an HTTP PUT request on the supplied url.

请查阅完整的 request 选项组 列表。

参数

url

URL

file

The file to put

options

request 选项组

info

请求/响应信息

返回值

成功时用字符串返回 HTTP 响应,失败时返回 FALSE


HTTP 函数
在线手册:中文  英文

用户评论:

D'n Russler d_n att CatchMedia dott com (2010-08-30 04:13:47)

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");
?>

易百教程