我有这段代码:
<?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个网址。我已经将php.in中的memory_limit值更改为-1。 phpinfo()将memory_limit值显示为-1。所以我认为由于32位PHP和Apache而发生错误。我有16位内存的Windows 64位。所以代码中的问题。帮助我重写此代码,尤其是array_search函数,原始数组将被切片并合并回来。抱歉我的语言。
答案 0 :(得分:0)
在这种情况下,最好将数据作为正文发送,然后通过短小部分从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);