使用多种方法,在本地都调试正常,但上传到服务器,多种方法都无法显示,估计是不是php.ini有什么限制或者什么函数没打开?或者服务器限制访问远程XML?有什么办法修改服务器,让其可以正常显示XML的内容?

解决方案 »

  1.   

    ini的设施 allow_open_url 必须是On
    你可以运行 <?php var_dump( ini_get('allow_open_url') );
    不过这个选项默认就是开启的,我更觉得是你的代码在不同版本上有问题
      

  2.   

    <?
    header('Content-Type:text/html;charset= UTF-8');
    $file = "http://mobile.smg.gov.mo/xml/e_actual_brief.xml";
    $handle = fopen ($file , "rb");
    $contents = "";
    do {
       $data = fread($handle, 8192);
       if (strlen($data) == 0) {
           break;
       }
       $contents .= $data;
    } while(true);fclose ($handle);
    $xml_parser = xml_parser_create();
    xml_parse_into_struct($xml_parser, $contents, $vals, $index);
    xml_parser_free($xml_parser);
    $i =1;
    foreach ($vals as $xml_elem) {
    $weather[$i] = $xml_elem[value];
    $i++;
    }
    unset($xml_elem);
    //print_r($weather);
    //print_r("test:".$file);
    //echo  "test:".$weather[12] . " " . $weather[19] . "&deg;C";
    ?>都是PHP5.0
      

  3.   

    1、<? 改为 <?php 你的服务器可能不支持短标记,浏览器 右键--查看网页源代码 可确认
    2、$weather[$i] = $xml_elem[value];
    应改为
    $weather[$i] = isset($xml_elem['value']) ? $xml_elem['value'] : '';
    你服务器上的 php 的错误检测级别可能更高
    本地 $xml_elem[value] 这样都不报错的话,也过于宽松了其他没毛病,测试通过如果修改后依然不能运行的话,那么就要查看 allow_open_url 是否打开了