简体   繁体   English

如何使用 php curl 将大型 json 数据发送到 api?

[英]How to send large json data to api using php curl?

Post Large amount of data from server A to B .将大量数据从服务器 A 发布到 B

I am using Laravel apis.我正在使用 Laravel api。 I need to post large amount of data (>8mb) using PHP Curl from server a to Laravel API.我需要使用 PHP Curl 从服务器 a 向 Laravel API 发布大量数据(> 8mb)。 If data size is less than 5mb, it is working fine but when data amount is large, is shows empty post data on Laravel side.如果数据大小小于 5mb,它可以正常工作,但是当数据量很大时,在 Laravel 端显示空帖子数据。

Please check my code.请检查我的代码。

PHP CURL (Server A): PHP CURL(服务器 A):

$payload=array();
$payload['a']='123';
$payload['name']='i';
$payload['i']=$base64;
$payload['b']='abc';

$request_headers = array(
                "Content-Type:application/json",
                'Content-length:' . strlen($payload)
            );

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
      curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
      curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
      curl_setopt($ch, CURLOPT_BUFFERSIZE, 104857640);
      curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 300);
      curl_setopt($ch, CURLOPT_TIMEOUT, 300);
      curl_setopt($ch, CURLOPT_HTTPHEADER, $request_headers);
      curl_setopt($ch, CURLOPT_POSTREDIR, 3);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      
      $res=curl_exec($ch);

$base64 is php variable, it contains string of 7mb(dynamic value). $base64是 php 变量,它包含 7mb 的字符串(动态值)。

Laravel Controller (POST method api): Laravel 控制器(POST 方法 api):

$a=$req->a;
$b=$req->b;
$name=$req->name;
$i=$req->i;

        if($a=='' || $b=='')
        {
           
            $arr["req"]=  $request->all();
            $data = $request->getContent();
            $arr["data"] = $data;
            $arr["headers"]=$request->headers->all();
            return response()->json($arr); 
        }

$request->all() $request->all()

Returns empty返回空

$request->getContent(); $request->getContent();

Returns base64 sting only 1.1mb.返回 base64 仅 1.1mb。

I tried also 'expect:' into curl header, but no luck.我也尝试将“期望:”放入 curl 标题,但没有运气。

PHP limitation also increased: PHP 限制也增加了:

   php_value max_execution_time 300
   php_value max_input_time 600
   php_value memory_limit 400M
   php_value post_max_size 400M
   php_value upload_max_filesize 400M

Looks like a php limitation.看起来像一个php限制。

Run

ini_get('post_max_size');

If it's less that the needed, then run如果它比需要的少,那么运行

ini_set('post_max_size', '32');

Same for files.文件也一样。

ini_get('upload_max_filesize ');

Then然后

ini_set('upload_max_filesize ', '30M');

Some servers don't allow ini_set(), in that case you will have to modify though php.ini or the hosting settings.有些服务器不允许 ini_set(),在这种情况下,您将不得不通过 php.ini 或主机设置进行修改。

***** Note that post size needs to be always greater than upload size. ***** 请注意,帖子大小必须始终大于上传大小。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM