Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用curl函数中返回的xml_Php_Xml_Curl_Ioerror - Fatal编程技术网

Php 使用curl函数中返回的xml

Php 使用curl函数中返回的xml,php,xml,curl,ioerror,Php,Xml,Curl,Ioerror,我有一个curl函数,它连接到API并返回xml 我从另一个脚本调用这个函数,希望遍历xml并选择一些URL,但是我得到一个I/O错误,因此我认为我没有正确处理xml 这是旋度函数 function &connect($url) { //If token is not set skip to else condition to request a new token if(!empty($_SESSION['token'])) { //Initia

我有一个curl函数,它连接到API并返回xml

我从另一个脚本调用这个函数,希望遍历xml并选择一些URL,但是我得到一个I/O错误,因此我认为我没有正确处理xml

这是旋度函数

function &connect($url) {

    //If token is not set skip to else condition to request a new token 
    if(!empty($_SESSION['token'])) {


        //Initiate a new curl session
        $ch = curl_init($url);
        //Don't require header this time as curl_getinfo will tell us if we get HTTP 200 or 401
        curl_setopt($ch, CURLOPT_HEADER, 0); 
        //Provide Token in header
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Basic '.$_SESSION['token']));
        //Execute the curl session
        $data = curl_exec($ch);

        //Close the curl session
        curl_close($ch);

        return $data;

    } else {

        //Run the getToken function above if we are not authenticated
        getToken($url);

        return 'error';

    }

}
这就是它的名字

//build url creates the api url required based on parameters passed into GET
$link = build_url;
//call the connect function and pass it the built link
$xml = connect($link);
//load the returned xml
$oxml = simplexml_load_file($xml);
connect函数肯定是在获取xml,因为我在函数中回显了它,而且当我在浏览器中运行脚本时,它会将xml输出到屏幕以及“警告:simplexml_load_file():I/O警告:无法在中加载外部实体“1”

我不确定我遗漏了什么:-(

simplexml\u load\u file();
通过传递文件名从文件中加载XML

因为您已经有了XML字符串,所以需要使用
simplexml\u load\u string();
代替它

编辑:


您还需要使用
curl\u setopt($ch,CURLOPT\u RETURNTRANSFER,true);
来告诉curl返回响应,而不是仅仅返回一个状态码。您看到的
1
是状态码。

build\u url
函数吗?它不应该是
build\u url()
$oxml=simplexml\u load\u文件吗($xml->asXML());
…可能吗?nl-x是的,这是我在上面发布时简化的一个输入错误。为什么连接函数返回引用?(调用函数时不是这样使用吗?)我确实试过了,但它抛出了一个不同的错误,这使我认为其他地方或我处理xml的方式有问题。即使我直接调用API,返回的xml格式完美且有效。警告:simplexml_load_string():Entity:第1行:解析器错误:应该是Start标记,@PaulM我早就料到了。尽管你现在离XML更近了一步。下一个问题是,为什么你只使用“1”而不是XML?我认为你的curl有问题。(虽然我仍然不理解你的函数返回引用,但不是那样使用的。)检查我的编辑。明白了;-)这是丢失的returntransfer。最初它是写入一个文件,但我想使用它,所以删除了那一行,没有替换它。我仍然没有得到引用,所以上面是一个打字错误,我在玩,如果它对我自己的教育有影响的话!