使用CURL将zip文件上传到远程服务器?

时间:2014-09-15 14:26:08

标签: php

我知道我们可以使用PHP curl将.txt或images(.jpg,.png)等文件上传到远程服务器上。

我也知道可以使用PHP中的FTP功能将其他类型的文件上传到远程服务器上。

但我想知道是否可以使用PHP CURL将zip文件夹/文件上传到远程服务器,就像我们上传图像文件而不使用FTP一样?

下面的代码会将图像上传到远程服务器上。如何使用相同类型的方法将zip文件夹上传到远程服务器然后解压缩?

<form enctype="multipart/form-data" encoding='multipart/form-data' method='post' action="form.php">
  <input name="uploadedfile" type="file" value="choose">
  <input type="submit" value="Upload">
</form>
<?
if ( isset($_FILES['uploadedfile']) ) {
 $filename  = $_FILES['uploadedfile']['tmp_name'];
 $handle    = fopen($filename, "r");
 $data      = fread($handle, filesize($filename));
 $POST_DATA = array(
   'file' => base64_encode($data)
 );
 $curl = curl_init();
 curl_setopt($curl, CURLOPT_URL, 'http://extserver.com/handle.php');
 curl_setopt($curl, CURLOPT_TIMEOUT, 30);
 curl_setopt($curl, CURLOPT_POST, 1);
 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($curl, CURLOPT_POSTFIELDS, $POST_DATA);
 $response = curl_exec($curl);
 curl_close ($curl);
 echo "<h2>File Uploaded</h2>";
}
?>


$encoded_file = $_POST['file'];
$decoded_file = base64_decode($encoded_file);
/* Now you can copy the uploaded file to your server. */
file_put_contents('subins', $decoded_file);

有人可以就此提出建议吗?

由于

1 个答案:

答案 0 :(得分:0)

Curl只需要在其之前使用“@”上传文件的完整路径。

if (isset($_FILES['uploadedfile']) ) {
    $filePath  = $_FILES['uploadedfile']['tmp_name'];

    $POST_DATA = array(
        'file' => '@'.  realpath($filePath)
    );

    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, 'http://extserver.com/handle.php');
    curl_setopt($curl, CURLOPT_TIMEOUT, 30);
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $POST_DATA);
    $response = curl_exec($curl);
    curl_close ($curl

     if($errno = curl_errno($curl)) {
        $error_message = curl_strerror($errno);
        echo "cURL error ({$errno}):\n {$error_message}";
    } else {
        echo "<h2>File Uploaded</h2>";
    }
}

额外:

首选使用<?php代替<?

如果您想检查curl是否有任何错误,请使用此

if($errno = curl_errno($curl)) {
    $error_message = curl_strerror($errno);
    echo "cURL error ({$errno}):\n {$error_message}";
}