0

如何使此脚本与多线程一起使用?已经尝试了所有教程但没有成功:( 我可以使用 curl php 的最大线程数是多少?

<?php
$imput  = file("$argv[1]");
$output = $argv[2];


foreach ($imput as $nr => $line) {
$line = trim($line);
print ("$nr - check :" . $line . "\r\n");

$check = ia_continutul($line); 

if (strpos($check,'wordpress') !== false) {

  $SaveFile = fopen($output, "a");
  fwrite($SaveFile, "$line\r\n");
  fclose($SaveFile);
  }
}
print "The END !\r\n";

function ia_continutul($url) {  
    $ch = curl_init();  
    $timeout = 3;  
    curl_setopt($ch,CURLOPT_URL,$url);  
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);  
    curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
  curl_setopt($ch, CURLOPT_TIMEOUT, 5);  
    $data = curl_exec($ch);  
    curl_close($ch);  
    return $data;  
}
?>
4

2 回答 2

4

您可以在 PHP 中使用多线程...

class Check extends Thread {
    public function __construct($url, $check){
        $this->url = trim($url);
        $this->check = $check;
    }
    public function run(){
        if (($data = file_get_contents($this->url))) {
            if (strpos($data, "wordpress") !== false) {
                return $this->url;
            }
        }
    }
}
$output = fopen("output.file", "w+");
$threads = array();
foreach( file("input.file") as $index => $line ){
    $threads[$index]=new Check($line, "wordpress");
    $threads[$index]->start();
}
foreach( $threads as $index => $thread ){
    if( ($url = $threads[$index]->join()) ){
    fprintf($output, "%s\n", $url);
    }
}

https://github.com/krakjoe/pthreads

于 2012-09-13T18:03:42.953 回答
-3

你不能多线程 PHP。它是一种脚本语言,因此脚本以特定顺序运行,如果您必须等待 curl 完成,它将在发生这种情况时继续加载,就像在代码中放置一个 Sleep(1) 函数一样。

您可以做一些基本的事情来帮助加速您的代码。不要在循环中执行 mysql 请求(我没有看到任何请求),而是建立一个查询,然后在循环结束后执行它。看看重组你的代码,这样你就可以做最少数量的卷曲,所以它运行得很快。尝试找到一种在循环外进行卷曲的方法。

于 2012-09-13T15:34:55.473 回答