douxi3233 2013-05-20 09:10
浏览 203
已采纳

如何将zip /压缩文件转换为PHP中的字符串?

I'm making a php script that would create/build an XML request, zip the xml and then encode it into base64.

Here's a snippet of my code:

$url = "http://cc-dev.com/servlet/Integration";

$xml = "<Transactions>
";
$xml.= "<Search_Criteria>
";
$xml.= "<CC_enquiry>Y</CC_enquiry>
";
$xml.= "<CCPlusCPA_enquiry>N</CCPlusCPA_enquiry>
";
$xml.= "<NLR_enquiry>N</NLR_enquiry>
";
$xml.= "<CON_enquiry>N</CON_enquiry>
";
$xml.= "<Identity_number>{$idnum}</Identity_number>
";
$xml.= "<Surname>{$lname}</Surname>
";
$xml.= "<Forename>{$fname}</Forename>
";
$xml.= "<Forename2></Forename2>
";
$xml.= "<Forename3></Forename3>
";
$xml.= "<Gender>{$gender}</Gender>
";
$xml.= "<Passport_flag>{$passport}</Passport_flag>
";
$xml.= "<DateOfBirth>{$birthday}</DateOfBirth>
";
$xml.= "<Address1>{$address1}</Address1>
";
$xml.= "<Address2></Address2>
";
$xml.= "<Address3></Address3>
";
$xml.= "<Address4></Address4>
";
$xml.= "<PostalCode>{$postalcode}</PostalCode>
";
$xml.= "<HomeTelCode></HomeTelCode>
";
$xml.= "<HomeTelNo></HomeTelNo>
";
$xml.= "<WorkTelCode></WorkTelCode>
";
$xml.= "<WorkTelNo></WorkTelNo>
";
$xml.= "<CellTelNo></CellTelNo>
";
$xml.= "<ResultType>XML</ResultType>
";
$xml.= "<RunCodix>N</RunCodix>
";
$xml.= "<Adrs_Mandatory>N</Adrs_Mandatory>
";
$xml.= "<Enq_Purpose>18</Enq_Purpose>
";
$xml.= "<Run_CompuScore>N</Run_CompuScore>
";
$xml.= "</Search_Criteria>
";
$xml.= "</Transactions>
";


$ttype = urlencode(base64_encode("Normal_Search"));
$dll = urlencode(base64_encode("Direct01"));
$un = urlencode(base64_encode($username));
$pw = urlencode(base64_encode($password));
$origin = urlencode(base64_encode("TestProgram"));
$trans = urlencode(base64_encode(gzencode($xml)));

header("Location: $url?pTransType=$ttype&pUsrnme=$un&pPasswrd=$pw&pDLL_Version=$dll&pMyOrigin=$origin&pTransaction=$trans");        

The output for $trans should look like this:

UEsDBBQAAgAIAFhtdUFbdvjAZwEAAJADAAAWAAAATm9ybWFsU2VhcmNoVjVYTWh0LnhtbGWTa0%2BDMBSGP8/E31IuM5tJ02SibhrHlo1E/UTqOHNEaFkvifx7odwKfjvv%2B7zt4ZBTHAnKJD2plDNJbm9m%2BAhUnC5xIFIFIqW1N8NBEAO76lSU5BMjS7V0n2kZ7Ffj0NQ02fDtYKds2dy1C3sjrG6xpOEvCTCVqjJmOv8CQRZzZ%2Bkt71xn4SwdjKbYnDlqwWgOZM35ucSok4Y9cwFGvWqpMOrlCHpkIN4Y%2BRbyG7QGllSttxi1lXH3VMqCCxWfM/pdjzY2TOaRKtidH1KhLsS9b0bDyHZNbJUkAqR0q9Z9aQNvAN4I%2BAPwR2A%2BgHn7uVwqmgU8gQpZwsANzyGCjtrKxiEfYFUb9M7Fz3DSVjY2J4e6WQzIsg4NtUEHkDpTUVkA%2BdhuIowsowloVvVIf%2Bvf3tft/ELGW8oSqnizcRPHpJ7YNd5rUXAJxPUwsnXXIA54XujjqdqFerEnTv2y0P%2BnhdHk/f0BUEsBAhYLFAACAAgAWG11QVt2%2BMBnAQAAkAMAABYAAAAAAAAAAQAgAICBAAAAAE5vcm1hbFNlYXJjaFY1WE1odC54bWxQSwUGAAAAAAEAAQBEAAAAmwEAAAAA

I've tried using gzencode(), gzdeflate(), and gzcompress() but it doesn't give my desired result. Can you help me achieve the string of characters which follows the format: "UEsDBBQ....AA"?

I think it has something to do with the compression but I can't seem to find the right one to use. Thanks in advance.

  • 写回答

1条回答 默认 最新

  • douping5226 2013-05-21 02:09
    关注

    Thanks for all the comments. I've found a solution to my problem. The ZipArchive function is used to zip the xml.

    Here's the code:

    <?php
    
    header('Content-Type: text/plain');
    
    $s = '<Transactions>
        <Search_Criteria>
            <CC_enquiry>Y</CC_enquiry>
            <CCPlusCPA_enquiry>Y</CCPlusCPA_enquiry>
            <NLR_enquiry>Y</NLR_enquiry>
            <CON_enquiry>N</CON_enquiry>
            <Identity_number>7408285107080</Identity_number>
            <Surname>Goofy</Surname>
            <Forename>Just</Forename>
            <Forename2></Forename2>
            <Forename3></Forename3>
            <Gender>M</Gender>
            <Passport_flag>N</Passport_flag>
            <DateOfBirth>19740828</DateOfBirth>
            <Address1></Address1>
            <Address2></Address2>
            <Address3></Address3>
            <Address4></Address4>
            <PostalCode></PostalCode>
            <HomeTelCode></HomeTelCode>
            <HomeTelNo></HomeTelNo>
            <WorkTelCode></WorkTelCode>
            <WorkTelNo></WorkTelNo>
            <CellTelNo></CellTelNo>
            <ResultType>XMHT</ResultType>
            <RunCodix>N</RunCodix>
            <Adrs_Mandatory>N</Adrs_Mandatory>
            <Enq_Purpose>12</Enq_Purpose>
            <Run_CompuScore>Y</Run_CompuScore>
        </Search_Criteria>
    </Transactions>';
    
    @unlink('s.zip');
    
    $zip = new ZipArchive;
    $res = $zip->open('s.zip', ZipArchive::CREATE);
    
    if ($res === true) {
    
        $zip->addFromString('NormalSearchV5XMht.xml', $s);
        $zip->close();
    
        $s = file_get_contents('s.zip');
        $s = base64_encode($s);
        $s = urlencode($s);
    
        echo $s;
        // UEsDBBQAAAAIAIO7tEJLe43NZwEAAI4DAAAWAAAATm9ybWFsU2VhcmNoVjVYTWh0LnhtbGWTa0%2BDMBSGP8%2FE31IuM5tJ02SibhrHlo1E%2FUTqOHNEaFkvifx7odwKfjvv%2B7zt4ZBTHAnKJD2plDNJbm9m%2BAhUnC5xIFIFIqW1N8NBEAO76lSU5BMjS7V0n2kZ7Ffj0NQ02fDtYKds2dy1C3sjrG6xpOEvCTCVqjJmOv8CQRZzZ%2Bkt71xn4SwdjKbYnDlqwWgOZM35ucSok4Y9cwFGvWqpMOrlCHpkIN4Y%2BRbyG7QGllSttxi1lXH3VMqCCxWfM%2FpdjzY2TOaRKtidH1KhLsS9b0bDyHZNbJUkAqR0q9Z9aQNvAN4I%2BAPwR2A%2BgHn7uVwqmgU8gQpZwsANzyGCjtrKxiEfYFUb9M7Fz3DSVjY2J4e6WQzIsg4NtUEHkDpTUVkA%2BdhuIowsowloVvVIf%2Bvf3tft%2FELGW8oSqnizcRPHpJ7YNd5rUXAJxPUwsnXXIA54XujjqdqFerEnTv2y0P%2BnhdHo%2Ff0BUEsBAgAAFAAAAAgAg7u0Qkt7jc1nAQAAjgMAABYAAAAAAAAAAAAAAAAAAAAAAE5vcm1hbFNlYXJjaFY1WE1odC54bWxQSwUGAAAAAAEAAQBEAAAAmwEAAAAA
    
    }
    else {
        echo 'failed';
    }
    
    @unlink('s.zip'); 
    
    ?>
    

    Thanks to Mr. Ramon Alivio for helping me.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥30 python代码,帮调试,帮帮忙吧