代码之家  ›  专栏  ›  技术社区  ›  NaturalBornCamper

无法在php中提取zip文件,没有反馈或错误

  •  0
  • NaturalBornCamper  · 技术社区  · 9 年前

    我正在以kmz格式检索我的谷歌地图,如下所示:

    file_put_contents($_SERVER['DOCUMENT_ROOT'].'/temp/map.kmz', file_get_contents('https://mapsengine.google.com/map/kml?mid=zLucZBnh_ipg.kS906psI1W9k') );
    
    $zip = new ZipArchive;
    $res = $zip->open($_SERVER['DOCUMENT_ROOT'].'/temp/map.kmz');
    if ($res === true)
    {
        trace("Number of files: $res->numFiles".PHP_EOL);
        for( $i = 0; $i < $res->numFiles; $i++ )
        { 
            $stat = $res->statIndex( $i ); 
            print_r( basename( $stat['name'] ) . PHP_EOL ); 
        }
    }
    

    但没有显示文件 $zip->extractTo() 也不起作用。该文件在服务器上下载,但我可以手动提取。我已尝试将文件重命名为.zip或.kmz,但仍然无法工作。我在Winrar中打开了map.kmz文件,它确实说它是一个zip文件格式。

    知道为什么不起作用吗?我需要一些特殊权限来读取文件或提取文件吗?

    2 回复  |  直到 9 年前
        1
  •  0
  •   Peter Noble    9 年前

    检查文件类型 .mkz .kmz .

    file_put_contents($_SERVER['DOCUMENT_ROOT'].'/temp/map.mkz',      
    file_get_contents('https://mapsengine.google.com/map/kml?  mid=zLucZBnh_ipg.kS906psI1W9k') );
    
    $zip = new ZipArchive;
    $res = $zip->open($_SERVER['DOCUMENT_ROOT'].'/temp/map.kmz');
    
        2
  •  0
  •   NaturalBornCamper    9 年前

    厌倦了这个该死的类不工作,尝试了这个方法,它奏效了:

    $data = file_get_contents("https://mapsengine.google.com/map/kml?mid=zLucZBnh_ipg.kS906psI1W9k");
    file_put_contents($_SERVER['DOCUMENT_ROOT'].'/temp/kmz_temp', $data);
    ob_start();
    passthru("unzip -p {$_SERVER['DOCUMENT_ROOT']}/temp/kmz_temp");
    $xml_data = ob_get_clean();
    header("Content-type: text/xml");
    echo $xml_data;
    exit();