主页 > PHP教程 > 正文

PHP怎么经过CURL上传文件

PHP运用CURL上传文件只需发送一个POST恳求就能够了,在恳求中设置某个字段为需求上传的文件全途径,而且以“@”最初,然后运用CURL把该变量以POST办法发送到服务器,在服务端即能够从超级全局变量$_FILES中取到相应的上传文件信息。


下面咱们以一个例子来展现这个进程。


假定本地有一个文本文件log.txt,其途径为“/www/test/log.txt”,内容如下:

this is a file for test
hello PythonTab!

为了把这个文件上传给服务端的脚本http://www.vztug.com/upload.php,咱们在本地写了一个名为curl_file.php的脚本,内容如下:

 "bar",
//要上传的本地文件地址
"upload" = > "@/www/test/log.txt"
);
$ch = curl_init();
curl_setopt($ch , CURLOPT_URL , $url);
curl_setopt($ch , CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch , CURLOPT_POST, 1);
curl_setopt($ch , CURLOPT_POSTFIELDS, $post_data);
$output = curl_exec($ch);
curl_close($ch);
echo $output;
 ?>

curl_file.php的逻辑很简单,设置POST变量$post_data,其间upload指向需求发送的文件。这儿要留意,咱们之前运用POST都是发送一个字符串,然后在服务器端运用file_get_contents(“php//input”)来获取该字符串,和这儿的用法不相同,其实POST也能够像GET相同,发送键值对。在服务端有一个超级全局变量$_POST能够像$_GET相同,获取相应的POST数据的值。需求留意的是,上传文件的变量不是存在着$_POST中,而是在$_FILES中。


为了展现服务端收到上述代码的文件上传恳求的逻辑,咱们在upload.php中写了以下代码:


upload.php首要运用var_export将$_FILES变量输出到规范输出,然后运用file_get_contents读取$_FILES[‘upload’][‘tmp_name’]所指文件的内容,并输出到规范输出,然后把$_FILES[‘upload’][‘tmp_name’]所指文件克己到当时目录的log_copy.txt文件中。该脚本的规范输出如下:

array(
 'upload' =>
     array(
     'name' => 'log.txt',
     'type' => 'application/octet-stream',
     'tmp_name' => '/tmp/phpLUB59F',
     'error' => 0,
     'size' => 36,
     )
 )
 this is a file for test
 hello PythonTab!

能够看到$_FILES变量中有一个upload数组,对应到上传文件描绘信息,其间name和type别离表明称号和类型。tmp_name比较要害,服务端在接纳到上传文件之后,会把文件写在一个临时文件中,这个临时文件的姓名便是tmp_name的值,这也是为什么咱们读取该文件能够获取一log.txt的文件内容。一般在服务端接纳到上传文件后都需求当即读取该文件或许把文件复制到别外一个文件中,由于tmp_name所指的临时文件在服务端脚本履行结束后会被删除去,upload.php脚本的最终一行便是把临时文件复制到咱们的方针文件中。


上一篇:在 PHP 7 中不要做的 10 件事
下一篇:PHP中new static()与new self()的差异异同剖析

PythonTab微信大众号:

Python技能交流合作群 ( 请勿加多个群 ):

群1: 87464755

群2: 333646237

群3: 318130924

群4: 385100854