下面是一个代码,当谷歌抓取任何页面时会发送一封电子邮件,导致邮箱发送垃圾邮件.所以可以在服务器上的文本文件中记录最后一次抓取的时间戳,我可以随时使用perl LWP mod读取.文件应该只有这个数据:29,2012年1月GMT等如果机器人多次访问我的网站,它应该覆盖txt文件并记录上次访问时间,请尽可能帮助实施
<?php
if ( strpos( $_SERVER['HTTP_USER_AGENT'], 'Googlebot' ) !== false )
{
// paste your email address here
$my_email = 'your_email_address@email.com';
// notify via email
mail($my_email,'[Notification]Googlebot Visit', 'Googlebot has just visited your website WEBSITE_NAME: '.$_SERVER['REQUEST_URI']);
}
?>
Run Code Online (Sandbox Code Playgroud)
我想我们可以通过检查谷歌机器人是否正在服务器以及它从服务器请求任何网站页面的时间来做到这一点?
我需要Perl中的多线程帮助.
基本逻辑是启动20个线程.我有一个数组@dataarray,我希望将20个数据块传递给每个线程.比如,其中@dataarray有200行数据,所以前10行将进入线程1,接下来10应该发送到线程2,因此它们不会覆盖彼此的数据,最终在处理线程后应该将返回结果更新为@outputarrayat与源相同的索引位置@datarray.
例如:第19行(索引位置18)@dataarray被发送到第2号线程,因此在处理之后,线程2应该更新$outputarray[18] = $processed_string.
只需要弄清楚如何从数组的位置发送到特定线程的位置.
#!/usr/bin/perl
use strict;
use threads;
my $num_of_threads = 20;
my @threads = initThreads();
my @dataarray;
foreach(@threads)
{
$_ = threads->create(\&doOperation);
}
foreach(@threads)
{
$_->join();
}
sub initThreads
{
my @initThreads;
for(my $i = 1;$i<=$num_of_threads;$i++)
{
push(@initThreads,$i);
}
return @initThreads;
}
sub doOperation
{
# Get the thread id. Allows each thread to be identified.
my $id = threads->tid();
# Process something--- on …Run Code Online (Sandbox Code Playgroud) 这是代码部分,我试图使用LWP POST整个数组,但服务器只接收第一行数组(0索引)而其他人没有收到发送到服务器,请指导我做错了
$data_post[0] = "text1";
$data_post[1] = "text2";
$data_post[2] = "texxt3";
$data_post[3] = "text4";
$data_post[4] ="text5";
my $ua= LWP::UserAgent->new();
my $response = $ua->post( $url, { 'istring' => @data_post} );
my $content = $response->decoded_content();
my $cgi = CGI->new();
print $cgi->header(), $content;
Run Code Online (Sandbox Code Playgroud)