centos PHP脚本CURL字符串不返回长字符串(612300个字符)的结果,如果字符串低于500k个字符

y3bcpkx1  于 2023-10-18  发布在  PHP
关注(0)|答案(2)|浏览(141)

我希望有人能帮我调试这个问题,我有一个PHP脚本,它可以很好地收集单个加密数据字符串,直到返回的字符串超过500,000个字符。
我的脚本当前输出612,300个字符,此时CURL返回一个空结果。
但是,如果我将字符串减少到500,000个字符以下,CURL可以在结果中显示数据。
有谁知道这是为什么,以及我如何允许无限的返回字符串长度?
这个问题与mod_security无关,因为它没有触发任何问题,它似乎只与字符串长度有关。
谢谢

uxhixvfz

uxhixvfz1#

我自己在经过大量搜索后解决了这个问题,问题是设置CURLOPT_BUFFERSIZE,默认情况下将其限制为512 k。
将其增加到字符串中的字节/字符数可以解决这个问题,扩展超时设置也可以解决这个问题,请参见下文:

curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_BUFFERSIZE, 1000000);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT , 30); 
curl_setopt($ch, CURLOPT_TIMEOUT, 300);
dfuffjeb

dfuffjeb2#

看起来你遇到了一个问题,PHP中的cURL无法处理特定大小的响应。这可能有几个因素,包括内存限制、超时设置或其他服务器端约束。
以下是调试和可能解决问题的一些步骤:

1.增加PHP内存限制

如果脚本内存不足,可以通过在脚本顶部添加以下行来增加内存限制:

ini_set('memory_limit', '512M'); // or even higher if necessary

2.增加cURL前缀:

您可能还希望增加cURL超时设置,因为获取大量数据可能需要更长的时间。可以使用以下命令调整超时:

curl_setopt($curl, CURLOPT_TIMEOUT, 300); // 5 minutes

3.检查错误

确保在执行请求后检查cURL错误。这可能会为您提供有关出错原因的更多信息:

$err = curl_error($curl);
if ($err) {
  echo "cURL Error: " . $err;
}

4.增加POST大小(如果适用)

如果您通过POST发送大量数据,您可能需要在PHP配置(php.ini)中增加POST大小限制:

post_max_size = 64M

5.检查服务器配置

如果上述步骤都不起作用,可能值得与您的托管服务提供商进行检查或检查服务器配置。Apache、Nginx或其他Web服务器可能有需要调整的限制。

6.直接删除cURL

您可以使用命令行cURL直接测试端点(在PHP外部)。这可以帮助您缩小问题是与PHP还是其他东西有关的范围:

curl -X GET "your_url_here"

7.考虑对响应进行分块

如果一次性处理这么大的响应是不可行的,您可以考虑更改服务器发送响应的方式。您可以将其拆分为多个块,然后在客户端上逐块处理。
如果您对服务器配置文件进行了任何更改,请记住重新启动Web服务器(Apache,Nginx等)。

相关问题