想要下载指定一个网站的某文件夹里的文件,可否用 php 实现? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
eezh
V2EX    PHP

想要下载指定一个网站的某文件夹里的文件,可否用 php 实现?

  •  1
     
  •   eezh 2015-10-03 11:51:49 +08:00 4237 次点击
    这是一个创建于 3739 天前的主题,其中的信息可能已经有所发展或是发生改变。

    发现某站的文件寄存 CDN 上,而且存储的比较有规律。
    例如 musicX 文件夹下的文件:
    http://cdn.baidu.com/musicX/01.imghttp://cdn.baidu.com/musicX/1.img
    http://cdn.baidu.com/musicX/02.imghttp://cdn.baidu.com/musicX/2.img
    ……
    http://cdn.baidu.com/musicX/20.imghttp://cdn.baidu.com/musicX/20.img
    (上述“ X ”代表 1-1000 的不同文件夹名称 images1 、 images2~images1000 )

    现在我想在 php 网页输入框里输入或者选中下拉文件夹名,即可在网页上显示出相应文件夹下的所有的的文件名及路径,点击即可实现文件下载。

    请大神赐教,不胜感激!

    第 1 条附言    2015-10-10 13:07:02 +08:00
    ===============================================================
    ===============================================================
    感谢回复,问题已基本解决。
    思路: phpQuery 获取关键字,存入数组, foreach 循环读取, curl 判断文件是否存在, echo 全部文件地址。
    12 条回复    2015-10-03 16:17:15 +08:00
    along
        1
    along  
       2015-10-03 12:00:06 +08:00 via Android
    符合迅雷批量下载规则
    zktz
        2
    zktz  
       2015-10-03 12:01:26 +08:00
    最多 1000 个么
    直接 for 循环啊
    bdbai
        3
    bdbai  
       2015-10-03 12:13:55 +08:00 via iPhone
    curl 就行啦
    Daddy
        4
    Daddy  
       2015-10-03 12:30:35 +08:00
    @bdbai CURL 怎么用呢?
    aprikyblue
        5
    aprikyblue  
       2015-10-03 12:35:54 +08:00
    lincanbin
        6
    lincanbin  
       2015-10-03 12:39:19 +08:00
    curl_multi
    在 CLI 下做爬虫表现不错。
    lhx2008
        7
    lhx2008  
       2015-10-03 12:41:56 +08:00   1
    首先你说知道一个地址,就可以全自动递归所有子目录是不现实的
    其次,每个网站规则不同, 必须要每个网站都写规则,那么用 PHP 意义已经不大了,实质上只是一个下载地址的 excel 而已,你用 execl 也可以生成
    bdbai
        8
    bdbai  
       2015-10-03 12:51:42 +08:00 via iPhone
    @Daddy 爬一下所有子目录文件的范围,存下来。有关 cURL 请 rtfm ( PHP )。
    wkdhf233
        9
    wkdhf233  
       2015-10-03 12:56:48 +08:00   1
    主要还是一个文件是否存在的判断?
    for 循环遍历可能的文件名,然后 curl -I ( shell 是这个命令, PHP 里大概是哪个 curl_setopt )判断下 HTTP 头,看遍历过去的文件存在不,存在就输出
    也可以用 while ,加一个计数变量,如果 HTTP 头是 200 就清零, 404 的话就+1 ,超过一定值就跳出循环。这样就不用每次都去猜有多少文件了

    PS :脑洞一开,如果保证文件绝对连续,可以 1 , 2 , 4 , 8 , 16 。。号文件依次获取过去,遇上 404 就尝试与上次尝试的文件中间的那个,比如 8 号是 200 , 16 是 404 ,就尝试( 8+16 )/2=12 号,还是 404 就尝试( 12+8 )/2=10 号文件,一旦取得了文件号的边界,一个 for 直接不判断的生成文件列表。
    初中教的二分法。。
    loveminds
        11
    loveminds  
       2015-10-03 15:32:11 +08:00
    @wkdhf233 不错
    lizhiqing1996
        12
    lizhiqing1996  
       2015-10-03 16:17:15 +08:00
    听说 shell 都可以
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5570 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 0:20 PVG 11:20 LAX 19:20 JFK 22:20
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86