【问题标题】:PHP memory_limit fatal error in array_search functionarray_search 函数中的 PHP memory_limit 致命错误
【发布时间】:2016-12-07 21:17:25
【问题描述】:

我有这个代码:

<?php
header('Content-Type: text/html; charset=utf-8');
error_reporting(E_ERROR | E_WARNING | E_PARSE & ~E_NOTICE);
$uarray = json_decode($_POST['array']);

$uac = $uarray;
$res = $uarray;

function request_callback($response, $info, $request) {
global $uac;
global $res;
$index = array_search($request->{'url'}, $uac);
$uac[$index] = " ";
$rspnc = json_decode($response);
$res[$index] = $rspnc;
}

require("RollingCurl.php");

$rc = new RollingCurl("request_callback");
$rc->options = array(CURLOPT_BINARYTRANSFER => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_SSL_VERIFYPEER => false);
$rc->window_size = 5;
foreach ($uarray as $url) {
$request = new RollingCurlRequest($url);
$rc->add($request);
}
$rc->execute();

for($i = 0; $i <= count($res); $i++)
{
for ($j = 0; $j <= 1; $j++) {
echo $res[$i]->{'name'};
echo "/";
echo $res[$i]->{'quality'};
echo "/";
echo $res[$i]->{'buy_offers'}[$j]->{'o_price'};
echo "/";
echo $res[$i]->{'buy_offers'}[$j]->{'c'};
echo "/";
echo $res[$i]->{'buy_offers'}[$j]->{'my_count'};
echo "/";
echo $res[$i]->{'classid'}. "_"  .$res[$i]->{'instanceid'};
echo "<br>";
}
echo "<p><p><p>";
}
?>

我在这个字符串中遇到内存限制错误:

$index = array_search($request->{'url'}, $uac);

数组 $uarray 包含 10000 个 url。我已经将 php.in 中的 memory_limit 值更改为 -1。 phpinfo() 将 memory_limit 值显示为 -1。所以我认为错误是由于 32 位 PHP 和 Apache 而发生的。我有 16GB 内存的 64 位 Windows。所以代码中的问题。帮助我重写这段代码,尤其是 array_search 函数,以将原始数组切片并合并回来左右。对不起我的语言。

【问题讨论】:

标签: php memory memory-leaks fatal-error


【解决方案1】:

在这种情况下,最好将数据作为正文发送并从php://input 中以短的部分读取。如果每一行都以\n 分隔(例如),您可以逐行阅读。因此,您可以避免将所有数据从流加载到数组$uarray

例如,您使用下一个主体沙化请求:

[
    {"name":"name1","quality":"1"},
    {"name":"name2","quality":"2"}
]

你可以逐行阅读:

$handle = fopen('php://input', 'r');
do {
    $str = fgets($handle);
    $data = json_decode($str);
    if ($data) {
        // do what you need
        echo $data->name . PHP_EOL;
        echo $data->quality . PHP_EOL;
    }
} while ($str);

【讨论】:

  • 抱歉,我不完全明白你的意思。你可以粘贴一些代码吗?
猜你喜欢
  • 2019-04-14
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-16
  • 2020-02-11
相关资源
最近更新 更多