我正在开发一个项目,我从API中提取数据(JSON).我遇到的问题是内存正在慢慢增长,直到我遇到可怕的致命错误:
致命错误:允许的内存大小*字节耗尽(试图分配*字节)在C:...在线*
我不认为应该有任何记忆增长.我尝试在循环结束时取消所有内容,但没有区别.所以我的问题是:我做错了吗?这是正常的吗?我该怎么做才能解决这个问题?
<?php
$start = microtime(true);
$time = microtime(true) - $start;
echo "Start: ". memory_get_peak_usage(true) . " | " . memory_get_usage() . "<br/>";
include ('start.php');
include ('connect.php');
set_time_limit(0);
$api_key = 'API-KEY';
$tier = 'Platinum';
$threads = 10; //number of urls called simultaneously
function multiRequest($urls, $start) {
$time = microtime(true) - $start;
echo " start function: ". memory_get_peak_usage(true) . " | " . memory_get_usage() . "<br>";
$nbrURLS = count($urls); // number of urls in array $urls
$ch = array(); // array …Run Code Online (Sandbox Code Playgroud) 我正在使用 multi Curl,想知道如何处理错误。我想检查发生了哪个错误,如果是这样的错误,超出了速率限制,我想在延迟一段时间后再次抓取该链接(sleep())。我的问题:“是否有一个内置函数可以为我执行此操作,或者我是否需要收集数组中的所有 URL,然后再次运行它们?”
这就是我现在所拥有的:
<?php
$urls = array( "https://API-URL.com",
"https://API-URL.com",
"https://API-URL.com",
"https://API-URL.com",
...);
//create the multiple cURL handle
$mh = curl_multi_init();
//Number of elements in $urls
$nbr = count($urls);
// set URL and options
for($x = 0; $x < $nbr; $x++){
// create both cURL resources
$ch[$x] = curl_init();
// set URL and other appropriate options
curl_setopt($ch[$x], CURLOPT_URL, $urls[$x]);
curl_setopt($ch[$x], CURLOPT_RETURNTRANSFER, true );
curl_setopt($ch[$x], CURLOPT_SSL_VERIFYPEER, false);
//add the two handles
curl_multi_add_handle($mh,$ch[$x]);
}
//execute the handles
do {
curl_multi_exec($mh, $running); …Run Code Online (Sandbox Code Playgroud) 我正在努力寻找独特的组合.序列并不重要,因此1 - 3和3 - 1是相同的.我坚持:
SELECT column1, column2, count(*)
FROM testTable
GROUP BY column1, column2
Run Code Online (Sandbox Code Playgroud)
例:
id column1 column2
1 1 3
2 3 2
3 3 1
4 1 2
5 2 1
6 2 3
7 1 2
8 3 2
9 1 3
10 3 2
Run Code Online (Sandbox Code Playgroud)
最终结果:
column1 column2 count
1 2 3
1 3 3
2 3 4
Run Code Online (Sandbox Code Playgroud) 也许我错过了一些东西......但是在这段代码中DOM对象是空的:
$input = file_get_contents('http://www.google.com/');
$doc = new DOMDocument();
@$doc->loadHTML($input); //supress errors on invalid html!
var_dump($doc);
die();
Run Code Online (Sandbox Code Playgroud)
我真的不知道该代码有什么问题.我已经验证$ input实际上填充了网页的html内容.
输出是:object(DOMDocument)#3(0){}
我不明白为什么......
这是我的问题我正在尝试为我的应用程序创建一个随机条形码,我想检查该代码是否已经在列中而不是生成一个新数字,如果它的唯一返回它再次检查它再次检查它.我正在为此目的使用递归函数.我已经在我的数据库中添加了1,2,3,4号,因此每次运行时都必须显示5,6,7,8,9或10.
这是我的功能:
function generate_barcode(){
$barcode = rand(1,10);
$bquery = mysql_num_rows(mysql_query("SELECT * FROM stock_item WHERE barcode='$barcode'"));
if($bquery==1){
generate_barcode();
}else{
return $barcode;
}
}
Run Code Online (Sandbox Code Playgroud)
我只是像这样测试它
$a = generate_barcode();
if(isset($a))
{
echo $a;
}
else
{
echo 'Not Set';
}
Run Code Online (Sandbox Code Playgroud)
所以问题是它有时会向我显示"未设置",但我希望它始终生成一个唯一的数字.我没有插入数据所以不是所有数字都保留的问题.
有人只是引导我,让我知道代码有什么问题.我可以使用其他方法来做到这一点,但我需要知道提供的代码有什么问题.谢谢
我已经编写了一个使用CURL来抓取网站的函数,但是在调用时它什么都没有返回,并且无法理解为什么.输出为空
<?php
function scrape($url)
{
$headers = Array(
"Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5",
"Cache-Control: max-age=0",
"Connection: keep-alive",
"Keep-Alive: 300",
"Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7",
"Accept-Language: en-us,en;q=0.5",
"Pragma: "
);
$config = Array(
CURLOPT_RETURNTRANSFER => TRUE ,
CURLOPT_FOLLOWLOCATION => TRUE ,
CURLOPT_AUTOREFERER => TRUE ,
CURLOPT_CONNECTTIMEOUT => 120 ,
CURLOPT_TIMEOUT => 120 ,
CURLOPT_MAXREDIRS => 10 ,
CURLOPT_USERAGENT => "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1a2pre) Gecko/2008073000 Shredder/3.0a2pre ThunderBrowse/3.2.1.8" ,
CURLOPT_URL => $url ,
) ;
$handle = curl_init() ;
curl_setopt_array($handle,$config) ;
curl_setopt($handle,CURLOPT_HTTPHEADER,$headers) ;
$data = curl_exec($handle) …Run Code Online (Sandbox Code Playgroud)