php使用curl上传文件
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <?php
/* http://devtest.com/upload.php: print_r($_POST); print_r($_FILES); */
$ch = curl_init();
$data = array('name' => 'Foo', 'file' => '@/home/vagrant/test.png');
curl_setopt($ch, CURLOPT_URL, 'http://devtest.com/load_file.php'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_exec($ch); ?>
|
接收代码:
1 2 3
| <?php print_r($_POST); print_r($_FILES);
|
运行结果:
1 2 3 4 5 6 7 8 9
| php -f demo.php Array ( [name] => Foo [file] => @/home/vagrant/test.png ) Array ( )
|
这时我们发现 通过 curl 发送的文件 在另一边 $_FILES 接受不到
解决方法1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <?php
/* http://devtest.com/upload.php: print_r($_POST); print_r($_FILES); */
$ch = curl_init();
$data = array('name' => 'Foo', 'file' => '@/home/vagrant/test.png');
curl_setopt($ch, CURLOPT_URL, 'http://devtest.com/load_file.php'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false); curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_exec($ch); ?>
|
解决方法2:
5.6版本下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <?php
/* http://devtest.com/upload.php: print_r($_POST); print_r($_FILES); */
$ch = curl_init();
$data = array('name' => 'Foo', 'file' => new \CURLFile(realpath('/home/vagrant/test.png')));
curl_setopt($ch, CURLOPT_URL, 'http://devtest.com/load_file.php'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false); curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_exec($ch); ?>
|
最后附上完整代码
使用时建议配上域名单独使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| <?php if ($_SERVER['REQUEST_METHOD'] == 'POST'){ // var_dump(file_get_contents('php://input'));die; var_dump($_FILES); exit(1); }elseif ($_SERVER['REQUEST_METHOD'] == 'GET') { $str = <<<EOT <center><h1>curl 文件上传测试demo</h1></center> EOT; echo $str; exit(1); }
function ceshi() { $ch = curl_init();
$data = array('name' => 'Foo', 'file' => new \CURLFile('/Users/higanbana/Desktop/GM8A78.png'));
curl_setopt($ch, CURLOPT_URL, 'http://devtest.com/fileTest.php'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false); curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
return curl_exec($ch); }
var_dump(ceshi()); // version php 7.3.11
|