| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 | <?php/** * Created by PhpStorm. * User: Administrator * Date: 2022/8/10 * Time: 18:50 */namespace file;use network\CurlHelper;use network\IpHelper;class FileHelper{    /**     * 读取文件文字内容     * @param $filePath     * @return mixed     */    public static function read($filePath)    {        return file_get_contents($filePath);    }    /**     * 创建并保存文件     * @param $filePath [指定目录]     * @param $content [文字内容]     * @throws \Exception     */    public static function save($filePath, $content)    {        if (file_exists($filePath)) {//file_exists检查文件是否存在            $File = new \think\template\driver\File();            $File->write($filePath, $content);        } else {            DirHelper::makeDir(PathHelper::getDir($filePath));//创建目录            if (false == file_put_contents($filePath, $content) && !empty($content)) {                throw new \Exception('创建文件失败,请检查目录权限');            }        }    }    /**     * 重命名文件     * @param $old_path     * @param $new_path     * @param $overWrite [如果新的文件已存在,false提示异常,true覆盖]     * @return bool     * @throws \Exception     */    public static function rename($old_path, $new_path, $overWrite = false)    {        $old_path = replaceDS($old_path);        $new_path = replaceDS($new_path);        if (!file_exists($old_path)) {            throw new \Exception("old_path not exits:" . $old_path);        }        if (file_exists($new_path)) {            if ($overWrite) {                unlink($new_path);            } else {                throw new \Exception("new_path exits:" . $new_path);            }        }        @rename($old_path, $new_path);        return true;    }    /**     * 输出文件到浏览器下载     * @param $filepath [文件物理路径]     */    public static function downloadFile($filepath)    {        if (file_exists($filepath)) {            $filename = PathHelper::getFilename($filepath);            //打开文件            $file1 = fopen($filepath, "r");            //输入文件标签            Header("Content-type: application/octet-stream");            Header("Accept-Ranges: bytes");            Header("Accept-Length: " . filesize($filepath));            Header("Content-Disposition: attachment; filename=$filename");            echo fread($file1, filesize($filepath));            fclose($file1);        }        echo "文件不存在,请联系客服处理!";    }    /**     * 采集文件     * @param $downlink [文件下载地址]     * @param $savePath [文件保存目录路径]     * @param $saveName [文件保存名称]     * @return string [返回文件物理路径]     */    public static function fetchDownFile($downlink, $savePath, $saveName)    {        DirHelper::makeDir($savePath);        $loaclFile = $savePath . $saveName;        if (startWith($downlink, 'https')) {            $user_agent = 'Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)';            $referer = 'https://www.baidu.com/s?wd=%E7%99%BE%E5%BA%A6&rsv_spt=1&rsv_iqid=0xe5a39f3b0003c303&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_sug3=6&rsv_sug1=4&rsv_sug7=100';            $randip = IpHelper::getRandIp();            $arrContextOptions = [                'ssl' => [                    'verify_peer' => false,                    'verify_peer_name' => false,                ],                'http' => [                    'method' => "GET",                    'header' => "User-Agent: {$user_agent}\r\nReferer: {$referer}\r\nX-FORWARDED-FOR: {$randip}\r\nCLIENT-IP: {$randip}\r\n",                    'timeout' => 10,                ]            ];            //下载文件忽略ssl            $response = file_get_contents($downlink, false, stream_context_create($arrContextOptions)) || die('服务器不支持采集');            file_put_contents($loaclFile, $response);        } else {            ob_start(); //打开输出            readfile($downlink); //输出图片文件            $img = ob_get_contents(); //得到浏览器输出            ob_end_clean(); //清除输出并关闭            file_put_contents($loaclFile, $img);        }        return $loaclFile;    }    /**     * 采集文件     * @param $downlink [文件下载地址]     * @param $savePath [文件保存目录路径]     * @param $saveName [文件保存名称]     * @return string [返回文件物理路径]     */    public static function fetchDownFile2($downlink, $savePath, $saveName)    {        DirHelper::makeDir($savePath);        $loaclFile = $savePath . $saveName;        $curl = new CurlHelper($downlink);        $randip = IpHelper::getRandIp();        $curl->setHeader([            'CLIENT-IP:' . $randip,            'X-FORWARDED-FOR:' . $randip        ]);        $curl->setReferer("https://www.baidu.com/s?wd=%E7%99%BE%E5%BA%A6&rsv_spt=1&rsv_iqid=0xe5a39f3b0003c303&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_sug3=6&rsv_sug1=4&rsv_sug7=100");        $curl->exec();        $response = $curl->getResponse();        if ($response && 200 == $curl->getHttpCode() && !$curl->getError()) {            file_put_contents($loaclFile, $response);        }        return $loaclFile;    }}
 |