小编PHP*_*hil的帖子

从API中提取数据,增加内存

我正在开发一个项目,我从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 "&nbsp;&nbsp;&nbsp;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)

php json curl-multi

11
推荐指数
1
解决办法
488
查看次数

多卷曲,错误处理

我正在使用 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)

php curl

6
推荐指数
1
解决办法
4370
查看次数

找到唯一的列组合

我正在努力寻找独特的组合.序列并不重要,因此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)

mysql

4
推荐指数
1
解决办法
31
查看次数

如何输出DOMDocuments?

也许我错过了一些东西......但是在这段代码中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){}

我不明白为什么......

php dom

3
推荐指数
1
解决办法
7202
查看次数

如何在php中使用递归函数返回

这是我的问题我正在尝试为我的应用程序创建一个随机条形码,我想检查该代码是否已经在列中而不是生成一个新数字,如果它的唯一返回它再次检查它再次检查它.我正在为此目的使用递归函数.我已经在我的数据库中添加了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)

所以问题是它有时会向我显示"未设置",但我希望它始终生成一个唯一的数字.我没有插入数据所以不是所有数字都保留的问题.

有人只是引导我,让我知道代码有什么问题.我可以使用其他方法来做到这一点,但我需要知道提供的代码有什么问题.谢谢

php recursion

2
推荐指数
2
解决办法
4508
查看次数

如何刮取SSL或HTTPS URL

我已经编写了一个使用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)

php curl web-scraping

1
推荐指数
1
解决办法
3770
查看次数

标签 统计

php ×5

curl ×2

curl-multi ×1

dom ×1

json ×1

mysql ×1

recursion ×1

web-scraping ×1