PHP实现通过CURL上传文件功能示例
PHP使用CURL上传文件只需发送一个POST请求就可以了,在请求中设置某个字段为需要上传的文件全路径,并且以"@"开头,然后使用CURL把该变量以POST方式发送到服务器,在服务端即可以从超级全局变量$_FILES中取到相应的上传文件信息。
下面我们以一个例子来展示这个过程。
假设本地有一个文本文件log.txt,其路径为"/www/test/log.txt",内容如下:
this is a file for test hello PythonTab!
为了把这个文件上传给服务端的脚本http://yourwebname.com/upload.php,我们在本地写了一个名为curl_file.php的脚本,内容如下:
<?php $url = "http://yourwebname.com/upload.php"; $post_data = array( "foo" => "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中写了以下代码:
<?php echo var_export($_FILES,true); echo file_get_contents($_FILES['upload']['tmp_name']); copy($_FILES['upload']['tmp_name'], "./log_copy.txt"); ?>
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相关内容感兴趣的读者可查看本站专题:《php curl用法总结》、《PHP网络编程技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《PHP数据结构与算法教程》、《php程序设计算法总结》及《PHP运算与运算符用法总结》
希望本文所述对大家PHP程序设计有所帮助。
您可能感兴趣的文章:
- PHP使用curl请求实现post方式上传图片文件功能示例
- 在PHP中通过POST方法实现文件上传功能
- PHP通过CURL实现定时任务的图片抓取功能示例
- php利用iframe实现无刷新文件上传功能的代码
- 在 php 中通过 CURL 上传文件
- php实现文件上传功能的详细代码实例
- html5+php实现文件拖动上传功能
- php采用curl实现POST数据与文件上传与接收
- PHP实现ftp上传文件示例
- PHP实现ftp上传文件示例
- php+ajax实现图片文件上传功能实例
- 文件上传的实现 (马马 2001年09月28日 17:14) PHP同样支持上传文件的功能,但并不是所有支持PHP的网站都支持此功能,特别是免费的网站。 实现上传,首先要在HTML上加入上传文件的“<FORM>”表格。 <form me
- php+ajax实现图片文件上传功能实例
- 结合Resumable.js实现在Server端PHP支持的大文件上传、断点续传功能 推荐
- 在php中通过curl上传文件
- PHP中使用Session配合Javascript实现文件上传进度条功能
- php 实现文件上传功能
- windows基于阿帕奇+PHP服务器,实现vc++文件上传功能
- php实现多文件上传功能
- html5+php实现文件拖动上传功能