Bug #77655 [Opn->Fbk]: Long String in Return Value is Empty
| From: | nikic@php.net | Date: | Fri, 22 Feb 2019 09:56:52 +0000 |
| Subject: | Bug #77655 [Opn->Fbk]: Long String in Return Value is Empty | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-219700@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=77655&edit=1
ID: 77655
Updated by: nikic@php.net
Reported by: marc dot ruef at computec dot ch
Summary: Long String in Return Value is Empty
-Status: Open
+Status: Feedback
Type: Bug
Package: Strings related
Operating System: Linux Kernel 3.10.0-862.14.4.el7
PHP Version: 7.3.2
Block user comment: N
Private report: N
New Comment:
Can you please provide a full reproduction script including the $result array that you're
using? (Can just be some generated dummy data that produces this issue).
Previous Comments:
------------------------------------------------------------------------
[2019-02-22 09:52:11] marc dot ruef at computec dot ch
Description:
------------
I am having a for loop which is iterating through a large array $result. Every array item $row is
used to generate a new line of string $line. This string is concatenated into $str. To preserve
memory, I am using unset($result[$i]) to clear every array item that has been processed in the
original array.
This (more or less exotic piece of code) works unless the string exceeds a length of 999'775
characters. In this case the return value is just empty. This is highly irritating because:
1. The calculation effort (in this example do_something()) is not a problem. By using
echo
count($result).' - '.strlen($str)."\n" I can see that the loop finishes
properly. There is no web server or php error shown.
2. The memory_limit is also not a problem. I am working with more data on other parts of the
application.
It appears that the problem lies in return $str itself. If I am using return substr($str, 0,
980000) then it just works fine.
I can't put those exceeding return value strings into another string variable. But I am able to
do a strlen() to get a proper result (1310307). But I can't use them properly as a string.
Using an echo $str in the function works properly. But return doesn't.
Test script:
---------------
function what_is_going_on($result){
$resultcount = count($result);
for($i=0; $i<$resultcount; ++$i){
$row = $result[$i];
$line = do_something($row);
$str.= $line;
unset($result[$i]);
}
return $str;
}
$output = what_is_going_on($result);
echo $output;
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=77655&edit=1