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 に答える