以下是该方案。有一种从DB表中获取156000行的方法。
我需要将此数据发送到另一个php
文件,该文件使用phpexcel
将其转换为Excel文件。
以下是curl
发布请求的代码。
if($_SERVER['SERVER_NAME'] === 'localhost'){
$domain = $_SERVER['REMOTE_ADDR'].':'.$_SERVER['SERVER_PORT'];
}else{
$domain = $_SERVER['SERVER_NAME'].':'.$_SERVER['SERVER_PORT'];
}
$prefix = $_SERVER['HTTPS'] ? 'https://' : 'http://';
$relative = '/rest/ExportExcelCsv.php';
error_log($prefix.$domain.$relative);
// converting array of returned rows into json
$postData = json_encode($utilDataArray['tableData']);
$defaults = array(
CURLOPT_URL => $prefix.$domain.$relative,
CURLOPT_HEADER => 0,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_TIMEOUT => 500,
CURLOPT_PROXY => "<proxy_url>",
CURLOPT_PROXYPORT => 80,
CURLOPT_POST => 1,
CURLOPT_POSTFIELDS => array('data' => $postData)
);
$ch = curl_init();
curl_setopt_array($ch, ($defaults));
// curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json'));
// curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
$result = curl_exec($ch);
if( !$result )
{
trigger_error(curl_error($ch));
}
var_dump($result);
curl_close($ch);
在一个声明中,CURLOPT_POSTFIELDS => array('data' => $postData)
,我在一个包含关键数据的数组中传递postData,因为ExportExcelCsv.php以json_decode($_POST['data'], true)
的格式获取后期数据。
第一个问题是“POST Content-Length”的大小。所以,我在两个php文件中都使用语句ini_set('post_max_size', '100M');
ini_set('upload_max_filesize', '100M');
来增加它。它仍然没有用。帖子内容的大小几乎是42MB。
如何在curl post请求中发送如此大的json数据?如何有效地处理它?无论如何以块的形式发送数据?如果是,那么如何在生成excel文件时处理该数据呢?
答案 0 :(得分:0)
首先,post_max_size
和upload_max_filesize
需要位于.htaccess,vhost或php.ini中,而不是ini_set
。必须在脚本开始之前设置这些以及一些其他ini值。
您还可以通过首先将json数据转储到文本文件并通过curl发送文件而不是直接发送数据来简化过程。关于如何通过curl发送文件的书面答案可以在这里找到:https://stackoverflow.com/a/15200804/4027341