我在PHP中使用exec命令来执行C ++代码,其中record_generate.cpp是基于硬编码参数生成输出(100到数百万条记录)的代码。
exec('./record_generater 2>&1', $output);
print_r($output);
当输出线的数量限制为几千时,它会产生输出,但当它达到100,000到百万时,它似乎会崩溃。我怎么能避免这样的pblms?
答案 0 :(得分:1)
你应该做的第一个事情是看看从shell运行C ++程序是否会导致类似的问题。
如果是这样,那么C ++代码本身就存在问题,与PHP exec
无关。
如果它独立运行,那么它可能与将数百万条记录存储到$output
变量有关。
虽然PHP中的字符串可能非常大(内存为2G),但是memory_limit_ in the
php.ini`文件指定的脚本可用的总空间有限。
即使在128M(5.2之前的8M),这可能还不足以容纳数百万行。
您可以尝试将该变量增加到更大的值并查看它是否有帮助。
但是,您可能仍然会更好地找到一种不同的方式来将C ++可执行文件中的信息转换为PHP代码,例如将其写入文件/数据库并在PHP中处理它一次一点,而不是试图将这一批存储在内存中。
在任何情况下,考虑到无论如何不必查看数百万行并不是一个好的用户体验,因此从这些数据中检查您真正需要的内容可能是值得的。例如,可以在输出之前以某种方式对其进行聚合或分区。
我们在这方面给出的任何建议都需要比我们目前更多的信息。