如何使此脚本适用于多线程? 已经尝试过所有教程但没有成功:( 什么是我可以使用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; } ?>
答案 0 :(得分: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);
}
}
答案 1 :(得分:-2)
你不能多线程PHP。它是一种脚本语言,因此脚本按特定顺序运行,如果你必须等待卷曲完成它将继续加载,这就像在你的代码中放入一个Sleep(1)函数。
您可以采取一些基本的措施来帮助加快代码速度。不要在循环内部执行mysql请求(我没有看到任何内容),而是建立一个查询,然后在循环结束后执行。看看你的代码重组,这样你就可以做最少量的卷发,这样就可以快速完成。试着找到一种在循环外做卷曲的方法。