gpt4 book ai didi

PHP 返回长字符串不能用作字符串

转载 作者:行者123 更新时间:2023-12-05 05:12:18 27 4
gpt4 key购买 nike

我有一个 for 循环,它遍历一个大数组 $result。每个数组项 $row 用于生成新的一行字符串 $line。此字符串连接成 $str。为了保留内存,我使用 unset($result[$i]) 清除原始数组中已处理的每个数组项。这看起来像这样:

$resultcount = count($result);
for($i=0; $i<$resultcount; ++$i){
$row = $result[$i];

$line = do_something($row);
$str.= '<tr><td>'.$line.'</td></tr>';
unset($result[$i]);
}

return $str;

这个(或多或少奇异的代码)工作除非字符串超过大约的长度。 1'000'000 个字符。在这种情况下,返回值只是空的。这非常令人恼火,因为:

  1. 计算量(在本例中 do_something())不是问题。通过使用 echo count($result)。' - '.strlen($str)."\n" 我可以看到循环正确完成。没有显示网络服务器或 PHP 错误。
  2. memory_limit 也不是问题。我正在处理有关应用程序其他部分的更多数据。

看来问题出在 return $str 本身。如果我使用 return substr($str, 0, 980000) 那么它就可以正常工作。进一步的调试表明,字符串在达到 999'775 字节的长度后立即被污染。

我无法将更长的返回值字符串放入另一个字符串变量中。但我能够执行 strlen() 以获得正确的结果 (1310307)。所以返回值字符串的总长度为 1'310'307 字节。但是我不能将它们正确地用作字符串。

此限制从何而来,我该如何规避它?

最佳答案

您似乎以自相矛盾的方式描述了返回值:

In this case the return value is just empty.

但是

But I am able to do a strlen() to get a proper result (1310307). So the return value string has a total length of 1'310'307 bytes.

不能同时为空和长度吗?

我已经测试过返回一个那么长的字符串,它对我来说工作正常。返回越来越大的字符串会超出内存限制,这会触发显式的 fatal error 。

在技术方面,字符串可以大于百万个字符:

Note: As of PHP 7.0.0, there are no particular restrictions regarding the length of a string on 64-bit builds. On 32-bit builds and in earlier versions, a string can be as large as up to 2GB (2147483647 bytes maximum) http://php.net/manual/en/language.types.string.php

我怀疑失败的操作与您如何使用结果而不是从函数返回有关。

关于PHP 返回长字符串不能用作字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54733857/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com