php如何取出文本中有效的网址???

我做一个24小时随机跳转程序,首先吧网址写入一个txt文档,一行一个。然后用php【随机】读取这个txt中的网址,取出可访问的网址,如果存在不可访问的网址就跳过,排除后继续选择!

目前的方法比较简单实现不了循环获取

<?php
//读取txt文档
$data=file_get_contents("test.txt");
//换行打散
$data_url=explode("\r\n",$data);
//随机数
$data_num = rand(0, count($data_url)-1);
//随机行数
$url = $data_url[$data_num];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_exec($ch); 
$curl_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

 
//判断网址是否可访问
if ($curl_code == 200) {
    //随机跳转存入cookie
    if (isset($_COOKIE["data"])){
        $tzUrl=$_COOKIE["data"];
        echo '连接成功,跳转域名:'.$tzUrl;
        //header ("Location: $tzUrl");
    }else{
       //跳转
       //header ("Location: $data_url[$data_num]");
       $value = $data_url[$data_num];
      //setcookie("data",$value, time()+3600/60/6);
      //24 小时候过期的 
      setcookie("data",$value, time()+3600*24);
};    
//echo '连接成功,状态码:' . $curl_code;    
}else {
//echo '连接失败,状态码:' . $curl_code;
}

程序大佬帮忙看看,有偿打赏

阅读 2.5k
3 个回答

这是之前把TXT文件当数据库用的时候封装的一个对TXT文件读写的类库,其中可以把TXT文本转成数组,然后遍历数组去请求网址就可以了。参考源码给你。

<?php

namespace model;

use think\Model;

Class SensitiveModel extends Model{
    private static $txtpath;
    private static $stop = FALSE;
    private static $wrong;
    //文件类型检查
    public function name_check($path){
        $name = substr($path,-4);
        if($name == ".txt"){
            return TRUE;
        }else{
            return FALSE;
        }
    }
    //打开文件
    public function open($path,$data=FALSE){
        if(self::name_check($path)){
            if(!file_exists($path)){
                if($data){
                    $this->create($path,$data);
                }else{
                    $this->create($path);
                }
                self::$txtpath = $path;
                return TRUE;
            }else{
                self::$txtpath = $path;
                return TRUE;
            }
        }else{
            self::$stop = TRUE;
            self::$wrong = "文件类型错误";
            return FALSE;
        }
    }
    //读文件
    public function read($echo = FALSE,$blank = FALSE){
        if(!self::$stop && self::$txtpath){
            $data = file_get_contents(self::$txtpath);
            if($blank){
                $data = str_replace("\n","<br />",$data);
            }
            if($echo){
                echo $data;
            }else{
                return $data;
            }
        }else{
            if(!self::$wrong){
                self::$stop = TRUE;
                self::$wrong = "请先选择文件";
            }
            return FALSE;
        }
    }
    //写文件
    public function createtxt($path,$data=FALSE){
        if(self::name_check($path)){
            if(file_exists($path)){
                self::$stop = TRUE;
                self::$wrong = "文件已存在";
                return FALSE;
            }else{
                file_put_contents($path,$data);
                self::$txtpath = $path;
                return TRUE;
            }
        }else{
            self::$stop = TRUE;
            self::$wrong = "文件类型错误";
            return FALSE;
        }
    }
    //修改文件内容
    public function change($data){
        if(!self::$stop && self::$txtpath){
            file_put_contents(self::$txtpath,$data);
            return TRUE;
        }else{
            if(!self::$wrong){
                self::$stop = TRUE;
                self::$wrong = "请先选择文件";
            }
            return FALSE;
        }
    }
    //追加内容到最后
    public function appendtxt($data,$line=FALSE){
        if(!self::$stop && self::$txtpath){
            if($line && $this->read()){
                $data = "\r\n".$data;
            }
            file_put_contents(self::$txtpath,$data, FILE_APPEND);
            return TRUE;
        }else{
            if(!self::$wrong){
                self::$stop = TRUE;
                self::$wrong = "请先选择文件";
            }
            return FALSE;
        }
    }
    //删除文件
    public function delete(){
        if(!self::$stop && self::$txtpath){
            unlink(self::$txtpath);
            return TRUE;
        }else{
            if(!self::$wrong){
                self::$stop = TRUE;
                self::$wrong = "请先选择文件";
            }
            return FALSE;
        }
    }
    //错误捕获,能获取到所有操作出现的错误
    public function wrong(){
        if(self::$wrong){
            return self::$wrong;
        }
    }
    //获取指定行内容
    public function get_line($line_number){
        if(!self::$stop && self::$txtpath){
            $data = $this->read();
            $lines = explode("\n",$data);
            if(array_key_exists($line_number,$lines)){
                return $lines[$line_number];
            }else{
                self::$stop = TRUE;
                self::$wrong = "指定行不存在";
                return FALSE;
            }
        }else{
            if(!self::$wrong){
                self::$stop = TRUE;
                self::$wrong = "请先选择文件";
            }
            return FALSE;
        }
    }
    //删除指定行内容
    public function del_line($line_number){
        if(!self::$stop && self::$txtpath){
            $data = $this->read();
            $lines = explode("\n",$data);
            if(array_key_exists($line_number,$lines)){
                unset($lines[$line_number]);
                $newdata = implode("\n",$lines);
                $this->change($newdata);
                return TRUE;
            }else{
                self::$stop = TRUE;
                self::$wrong = "指定行不存在";
                return FALSE;
            }
        }else{
            if(!self::$wrong){
                self::$stop = TRUE;
                self::$wrong = "请先选择文件";
            }
            return FALSE;
        }
    }
    //修改指定行内容
    public function change_line($line_number,$text){
        if(!self::$stop && self::$txtpath){
            $data = $this->read();
            $lines = explode("\n",$data);
            if(array_key_exists($line_number,$lines)){
                $lines[$line_number] = $text;
                $newdata = implode("\n",$lines);
                $this->change($newdata);
                return TRUE;
            }else{
                self::$stop = TRUE;
                self::$wrong = "指定行不存在";
                return FALSE;
            }
        }else{
            if(!self::$wrong){
                self::$stop = TRUE;
                self::$wrong = "请先选择文件";
            }
            return FALSE;
        }
    }

    //将txt读取出来并变成arr
    public function txt2arr($path){
        if(self::name_check($path)){
            $data = array();
            if(file_exists($path)){
                $stream = file_get_contents($path);
                $str_encoding = mb_convert_encoding($stream, 'UTF-8', 'UTF-8,GBK,GB2312,BIG5');
                $data = explode("\r\n", $str_encoding);
                foreach ($data as &$row) {
                    $row = trim($row);
                }
                unset($row);
            }
            return $data;
        }
    }

    //将arr数组按行写入txt,并删除之前内容
    public function arr2txt($path,$arr){
        $arr = implode("\r\n",$arr);
        if($this->name_check($path)){
            $res = file_put_contents($path,$arr);
            if($res){
                return true;
            }else{
                return false;
            }
        }else{
            return false;
        }

    }
    //将arr数组按行写入txt,不删除之前内容
    public function arrappendtxt($path,$arr){
        if($this->name_check($path)){
            $arr = implode("\r\n",$arr);
            $str = "\r\n";
            file_put_contents($path,$str,FILE_APPEND);
            $res = file_put_contents($path,$arr,FILE_APPEND);
            if($res){
                return true;
            }else{
                return false;
            }
        }else{
            return false;
        }

    }

    //用PHP对数据进行分页
    public function pagenate($arr,$page=1,$size=10){
        //传入需要分页显示的数据,页码,每页显示条数
        $pages = ceil(count($arr)/$size);
        $newarr = array_slice($arr,($pages-1)*$size,$size);
        for($i=0;$i<count($newarr);$i++){
            $data[$i] = $arr[$i];
        }
        return $data;
    }

}

楼主改改应该就能用了。

在你的基础上加的,希望有用

<?php
//读取txt文档
$data = file_get_contents("test.txt");
//换行打散。换行符在不同的系统是不一样的,windows下是\r\n,linux下是\n。所以使用PHP常量
$data_url = explode(PHP_EOL, $data);

// 有效的网址
$usefulWebsite = [];

// 开始循环
while (count($data_url)) {
    //随机数
    $data_num = rand(0, count($data_url) - 1);
    //随机行数
    $url = $data_url[$data_num];
    // 删除已经用过的。不能用unset,因为用unset时,数字类型的key不会重建
    array_splice($data_url, $data_num, 1);
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_exec($ch);
    $curl_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);


    //判断网址是否可访问
    if ($curl_code == 200) {
        // 存入有效网址数组
        $usefulWebsite[] = $url;
        //随机跳转存入cookie
        if (isset($_COOKIE["data"])) {
            $tzUrl = $_COOKIE["data"];
            echo '连接成功,跳转域名:' . $tzUrl;
            //header ("Location: $tzUrl");
        } else {
            //跳转
            //header ("Location: $url");
            $value = $url;
            //setcookie("data",$value, time()+3600/60/6);
            //24 小时候过期的
            setcookie("data", $value, time() + 3600 * 24);
        };
        //echo '连接成功,状态码:' . $curl_code;
    } else {
        //echo '连接失败,状态码:' . $curl_code;
        // 不行就执行下一条
        continue;
    }
}

print_r($usefulWebsite);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题