时间:2021-07-01 10:21:17 帮助过:3人阅读
php有专门的ftp操做类,网上一搜一大把。基本的写在注释上面
记录下我这次遇到的几个问题:
1,获取目录名
之前都是用ftp_nlist()函数,但是目前的php改了,ftp_nlist()函数只列出文件,不列文件架名字。只能用ftp_rawlist(),这个就很详细,就像ls -al命令。所以用正则表达式把无关信息去掉,只留名字。这个不能判断文件名中有空格,空格前还是纯数字这种奇葩,o(︶︿︶)o 唉,也就我们学校能出现这种命名了。
preg_replace("/.+:*\\d+\\s/", "", $filename);2,校内网匿名访问
用户名Anonymous,密码空。如果连不上可能需要该链接方式。
3,测试过程中可能指定文件路径,中文可能找不到,这时试试utf-8, gbk, ansi编码
4,在虚拟机xp上搭建ftp服务器测试,ip地址别写错了,囧~
5,php运行时间,我们学校服务器东西还真不少,各种乱七八糟的视频,默认30秒根本不够用,临时改变php执行时间,set_time_limit(0);//不限时
最后跑出来443kb的文本,汗~
贴代码:
//建立ftp连接,tcp三次握手 $login = ftp_login($con, "duola", "你的密码"); //帐号密码登录 $myfile=fopen("result.txt","w"); //存放结果的txt $queue = array("/"); //存放目录的队列 //开始的根目录 while(!empty($queue)){ //还有未遍历目录 $list_now = array_shift($queue); //从队列里拿到本次循环要处理的目录 ftp_chdir($con, $list_now); //改变当前目录 $filelist = ftp_rawlist($con, $list_now); //拿到本目录的内容 $name = preg_replace("/.+:*\\d+\\s/", "", $filelist[2]); //第一个文件或目录名字 if(count($filelist) == 3 && ftp_size($con, $name) != -1){ //只有一个电影,目录名字即为电影名 //这里是因为我们学校的电影大都是放到电影名的文件架下,而电影名是一堆乱码,所以这时记录目录名字 fwrite($myfile, $list_now."\r\n"); }else{ foreach($filelist as $file) //合集文件架,下面好多电影,这时正常记录文件名 { $filename = preg_replace("/.+:*\\d+\\s/", "", $file); if(ftp_size($con, $filename) == -1){ //发现目录 ,存到队列里,以后继续遍历,但不能使.(当前目录) ..(父目录) if($filename != "." && $filename != ".."){ array_push($queue, $list_now."/".$filename); //echo "
\ndocument:".$list_now."/".$filename; } } else{ //合集里的电影 fwrite($myfile, $list_now."/".$filename."\r\n"); } } } } fclose($myfile); ftp_close($con); ?>
以上就介绍了用php写ftp爬虫,包括了ftp,php方面的内容,希望对PHP教程有兴趣的朋友有所帮助。