我有php脚本,可以将数据从一个数据库迁移到另一个数据库。在一个脚本中,我互相调用以从原始数据库中获取数据,然后将其发送到另一个数据库。像这样:
migrateData.php <---> getData.php 然后再迁移data.php <---> putData.php
在putData.php中,我使用$ _GET,但是当它的数据太多时,出现错误消息“请求的URL的长度超出了此服务器的容量限制”。 我见过有人说要使用$ _POST,但是我对此不太确定。 我的migrationData.php:
<?php
echo "Migration";
$url = "http://localhost/mig/getData.php";
$client = curl_init($url);
curl_setopt($client,CURLOPT_RETURNTRANSFER,true);
$response = curl_exec($client);
echo "<br>";
echo "<br>";
echo $response;
$url = "http://localhost/mig/putData.php?data=".$response;
$url = str_replace ( ' ', '%20', $url);
$client = curl_init($url);
curl_setopt($client,CURLOPT_RETURNTRANSFER,true);
$response = curl_exec($client);
echo $response;
?>
任何帮助将不胜感激
答案 0 :(得分:1)
是的,当您将获取请求发送到服务器(apache,nginx)时,它可能会限制客户端HTTP请求行的允许大小(例如)和HTTP请求标头字段的大小。
例如,如果您有权访问服务器及其Apache服务器,则可以增加limit request line的Apache限制和request field size的限制。
对于nginx,可以在nginx.conf中增加large_client_header_buffers参数。
使用POST方法会将字段发送到客户端的HTTP请求行之外,从而有效地绕过服务器约束。 实际上,POST请求也受到限制,但是默认大小更大。
建议使用POST或PUT方法,而不要更改服务器配置。
<?php
//Your code to get the response here
// ...
$data = ['data' => $response];
// Prepare new cURL resource
$ch = curl_init('http://localhost/mig/putData.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
// Submit the POST request
$result = curl_exec($ch);
// Close cURL session handle
curl_close($ch);
//Output the result
echo $result;
?>
答案 1 :(得分:0)
Apache的最大$_GET
请求长度为8190字节(https://stackoverflow.com/a/1289611/575047),因此尝试在GET请求中发送数据堆是一个坏主意,因为它可能会被切断。
POST是理想的选择。默认情况下,Apache会将post_max_size设置为8mb。
要进行POST,您只需将我认为的这些行添加到putData curl
curl_setopt($client, CURLOPT_POST, 1);
curl_setopt($client, CURLOPT_POSTFIELDS, $response);