php采用curl实现POST数据与文件上传与接收

时间:2022-10-16 21:18:24

php的curl是一个强大的网络库,可以用于GET与POST数据的传输


相对来说,GET格式简单,但是安全性略差,且携带数据有限,下面主要介绍POST数据的传输。


普通data:

<?

$url = 'http://10.0.1.123/imessage/login.php';

$ch=curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");

$json_string = json_encode($data);
curl_setopt($ch, CURLOPT_POSTFIELDS, array('data'=>$json_string));
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>


接受普通数据:


$json_data = json_decode($_POST['data']);

数据格式

php采用curl实现POST数据与文件上传与接收



传输文件:


<html>
<body>

<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" /> 
<br />
<input type="submit" name="submit" value="Submit" />
</form>

</body>
</html>


or

<?

$post = array(
"excel"=>"@example.xls",//这里是要上传的文件,key与后台处理文件对应
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://localhost/phpexcel/upsvr.php");

curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);

curl_setopt($ch, CURLOPT_POSTFIELDS,$post);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_VERBOSE, 0);

$a=curl_exec($ch);
echo $a;
curl_close($ch);

?>



接收文件:

<?

//$_FILES["excel"]["tmp_name"] is the tmp file name

//$_FILES['excel'][name] is the remote file name
//if ((($_FILES["excel"]["type"] == "application/octet-stream"))&& ($_FILES["excel"]["size"] < 20000))
{
    echo $_FILES["excel"]["type"]."<br />";
    if ($_FILES["excel"]["error"] > 0)
    {
        echo "Return Code: " . $_FILES["excel"]["error"] . "<br />";
    }
    else
    {
        echo "Upload: " . $_FILES["excel"]["name"] . "<br />";
        echo "Type: " . $_FILES["excel"]["type"] . "<br />";
        echo "Size: " . ($_FILES["excel"]["size"] / 1024) . " Kb<br />";
        echo "Temp file: " . $_FILES["excel"]["tmp_name"] . "<br />";

        if (file_exists("upload/" . $_FILES["excel"]["name"]))
        {
            echo $_FILES["excel"]["name"] . " already exists. ";
        }
        else
        {
            move_uploaded_file($_FILES["excel"]["tmp_name"],
                    "upload/" . $_FILES["excel"]["name"]);
            echo "Stored in: " . "upload/" . $_FILES["excel"]["name"]."<br />";
        }
    }
}
//else
{
    echo "Invalid file";
}
?>




通过使用 PHP 的全局数组 $_FILES,你可以从客户计算机向远程服务器上传文件。

第一个参数是表单的 input name,第二个下标可以是 "name", "type", "size", "tmp_name" 或 "error"。就像这样:

  • $_FILES["file"]["name"] - 被上传文件的名称
  • $_FILES["file"]["type"] - 被上传文件的类型
  • $_FILES["file"]["size"] - 被上传文件的大小,以字节计
  • $_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称
  • $_FILES["file"]["error"] - 由文件上传导致的错误代码
  • 以下为不同代码代表的意思:
    0; 文件上传成功。
    1; 超过了文件大小php.ini中即系统设定的大小。
    2; 超过了文件大小MAX_FILE_SIZE 选项指定的值。
    3; 文件只有部分被上传。
    4; 没有文件被上传。
    5; 上传文件大小为0
这是一种非常简单文件上传方式。基于安全方面的考虑,应当增加有关什么用户有权上传文件的限制。


需要注意的是:move_uploader_file可能失败,这是因为存放的文件夹权限不够,改为wx(读r 4,写2,执行1),chmod 333 test 即可,需要读取的话,则要777。


传输文件的数据格式如下:

php采用curl实现POST数据与文件上传与接收