我修改了脚本以使用PHP7.1,将eregi更改为preg_match,脚本在wamp上运行了几分钟,突然它停止了工作

我修改了脚本以使用PHP7.1,将eregi更改为preg_match,脚本在wamp上运行了几分钟,突然它停止了工作,php,preg-match,user-agent,server-name,Php,Preg Match,User Agent,Server Name,下面的脚本为所有机器人访问创建一个日志文件,向我发送一封电子邮件,并在IP2位置验证IP。它在PHP5.2和eregi函数中运行得很好,因此我将eregi行修改为preg_match,并在向每个bot变量添加前斜杠后在wamp测试服务器上运行了几分钟,因为我收到了“reg_match():分隔符不能是字母数字或反斜杠”警告,但是现在它不工作了,也不会在visions.log文件中记录任何机器人程序 脚本仍然给了我以下三个警告,但由于它们是警告,并且已经开始工作,我没有太多注意它们: 注意:第2

下面的脚本为所有机器人访问创建一个日志文件,向我发送一封电子邮件,并在IP2位置验证IP。它在PHP5.2和eregi函数中运行得很好,因此我将eregi行修改为preg_match,并在向每个bot变量添加前斜杠后在wamp测试服务器上运行了几分钟,因为我收到了“reg_match():分隔符不能是字母数字或反斜杠”警告,但是现在它不工作了,也不会在visions.log文件中记录任何机器人程序

脚本仍然给了我以下三个警告,但由于它们是警告,并且已经开始工作,我没有太多注意它们:

  • 注意:第28行C:\wamp\www\vists.php中未定义的偏移量:5
  • 警告:preg_match():第28行C:\wamp\www\vists.php中的空正则表达式
  • 注意:第62行的C:\wamp\www\vists.php中的未定义索引:js

括号在php 7 preg_match的正则表达式中有特殊含义。只要逃离他们就行了,应该可以了。至于第一个警告,而不仅仅是
coint($agents)
使用
count($agents)-1
正弦数组索引从零开始,或者只使用
foreach
。 第二次警告使用
if(isset($\u请求[“js”])
祝您好运,

a)您在$spider中有6个元素,而在$agents中只有5个元素,这将导致关于偏移量5和空正则表达式的警告。谷歌机器人是双倍的:

  $spiders[] = "/Google/";
  $spiders[] = "/Googlebot/";
删除一个条目

b)
如果($_请求[“js”]){
应替换为:

if(isset($\u REQUEST[“js”]){
并且根据您期望在isset之后出现的值,应该检查该值-例如,如果您根据
true
进行验证:

if(isset($\u请求['js]])&&$\u请求['js']==true){

  $spiders[] = "/Google/";
  $spiders[] = "/Googlebot/";