我在PHP端,有获取了一个变量$reqxml,里面是有值的,具体如下(通过断点调试查看):
<?xml version="1.0" encoding="utf-8"?>
<reqs><dbreq sid="/dbreq" rid="data" table="prt_news_category" query="select"><fields><col n="*"><![CDATA[]]></col></fields><filter><cond><![CDATA[(geo_code=0 or geo_code=68304896) and column_type=1 and status='1'and category_code=67108864]]></cond></filter></dbreq></reqs>
现在我要把这个xml格式的字符串通过socket传输到java端去处理,用的是fwrite($socket, $reqxml),但是在java端获取的只有这个xml字符串的头部
<?xml version="1.0" encoding="utf-8"?>
于是我把这个xml字符串用print_r($reqxml);输出到页面不能显示,但代码里面有值;
为了排除是java端不能识别xml字符串,我在java端断点调试的时候看出java端获取的值确实是只有头部;同时,在php端,如果我把断点里面的$reqxml的值,也就是
<?xml version="1.0" encoding="utf-8"?>
<reqs><dbreq sid="/dbreq" rid="data" table="prt_news_category" query="select"><fields><col n="*"><![CDATA[]]></col></fields><filter><cond><![CDATA[(geo_code=0 or geo_code=68304896) and column_type=1 and status='1'and category_code=67108864]]></cond></filter></dbreq></reqs>
用字符串形式赋给变量$reqxml,结果传到java端的就是完整的数据。这个问题用了很久都没有解决,希望在csdn上的各位朋友都够帮忙解决下,只要能把$reqxml这个字符串完全传输到java端就可以了。问题很急,希望大家能尽量帮忙!谢谢各位。

解决方案 »

  1.   

    做下面的代码环境假设:#从某api获取到了xml数据
    $reqxml = xxxx_get();
    #此时调试发现有值#中间处理#那么, 请在这个点, 也就是fwrite之前调试看看数据是否完整, 这样来确定问题在fwrite时发生. 再来定位.
    fwrite($sock, $reqxml);
    #这里发送到java端数据就不完整了注意fwrite上面的注释, 先确认下问题在哪里, 再来看..
      

  2.   


    最好给一个完整的php文件,显示$reqxml是怎样初始化的,"输出到页面不能显示"是什么意思?我用下面的php文件测试,没发现问题。<html>
    <body>
    <?php
    $a = "<?xml version=\"1.0\" encoding=\"utf-8\"?>
    <reqs><dbreq sid=\"/dbreq\" rid=\"data\" table=\"prt_news_category\" query=\"select\"><fields><col n=\"*\"><![CDATA[]]></col></fields><filter><cond><![CDATA[(geo_code=0 or geo_code=68304896) and column_type=1 and status='1'and category_code=67108864]]></cond></filter></dbreq></reqs>";
    print_r($a);
    ?>
    </body>
    </html>
      

  3.   

    你可以尝试把两面的序列化都改成用json序列化来做试试
      

  4.   

    因为我接收端是java所以算法可能不一样
      

  5.   

    恩,谢谢你,可以确定$reqxml这个值在fwrite之前是没问题的,也是完整的,因为我用print_r($reqxml)输出时也没没有显示xml的内容,但是查看源代码,有看到<reqs><dbreq sid="/dbreq" rid="data" table="prt_news_category" query="select"><fields><col n="*"><![CDATA[]]></col></fields><filter><cond><![CDATA[(geo_code=0 or geo_code=68304896) and column_type=1 and status='1'and category_code=67108864]]></cond></filter></dbreq></reqs>
      

  6.   

    序列化在php端是没问题,但在java端就不好处理了~
      

  7.   

    可以尝试把xml简化成最简单的看看能否全部正常接收到
      

  8.   

    需要知道 Java 端得接收代码
      

  9.   

    Java端只是用socket接受字符串而已,没什么特别的代码。现在可以肯定的是,java端完全没问题,因为我有用一个xml文件测试过了,完全可以传输过去字符串