Foreach Loop& XML-RPC:它应该可以工作,但事实并非如此,为什么?

时间:2011-05-14 06:44:21

标签: php loops foreach xml-rpc

我无法在这里找到适用于我的情况的问题。根据我对这段代码的作用的理解,它实际上应该有效,但我只是不明白它为什么不行。

我正在从文本文件中读取SKU列表。每个SKU都在它自己的路线上。我需要做的只是将SKU单独传递给我的XML-RPC请求并打印结果。从我在下面粘贴的代码,它似乎循环通过SKU但只返回一个有效的结果。

如果我通过$ request变量手动传递每个SKU,我会得到有效的结果。我一直在测试5个SKU,但实际上我有200个,如果能让它工作的话会很好。我甚至打破了Lydia PHP培训视频,看看我是否听不懂,但看起来我的代码不对。

感谢您对此的帮助。

<?php

$list = file("skus2.txt");
print_r($list);

foreach ($list as $sku){

  $server_url = "http://xxxx.xxx/webservices/index.php";
  $request = xmlrpc_encode_request("catalog.findProductImagesBySku", array($sku));
  $context = stream_context_create(array(
  'http' => array(
  'method' => "POST",
  'header' => "Content-Type: text/xml",
  'content' => $request)));
   $file = file_get_contents($server_url, false, $context);
   $response = xmlrpc_decode($file);
   print_r ($response);
      }
?>

我尝试过这种感觉。我已经在这里工作了几个小时。

这是我得到的回报。正如你可以看到它在前4个版本上的失败,即使从print语句中,它正在抓住正确的SKU并且它在最后一个SKU上取得了成功。所有SKU都有效,因为我一次测试一次。

    Array
(
    [0] => DJ750605

    [1] => TO88116

    [2] => TO1112516

    [3] => TO1112506

    [4] => ENAI200006
)

//start of 1st run of foreach loop
DJ750605

Warning:  file_get_contents(http://xxx/webservices/index.php) [function.file-get-contents]: failed to open stream: HTTP request failed! ...

//start of 2nd run of foreach loop
TO88116

Warning:  file_get_contents(http://xxx/webservices/index.php) [function.file-get-contents]: failed to open stream: HTTP request failed!...


//start of 3rd run of foreach loop
TO1112516

Warning:  file_get_contents(http://xxx/webservices/index.php) [function.file-get-contents]: failed to open stream: HTTP request failed!...


//start of 4th run of foreach loop
TO1112506

Warning:  file_get_contents(http://xxx/webservices/index.php) [function.file-get-contents]: failed to open stream: HTTP request failed!...

//start of 5th run of foreach loop
ENAI200006Array
(
[0] => Array
    (
        [sku] => ENAI200006
        [large_url] => http://xxxENAI200006.JPG
        [medium_url] => http://xxxENAI200006.JPG
        [thumb_url] => http://xxxENAI200006.JPG
        [url] => http://xxxENAI200006.JPG
    )

)

更新:工作代码:)

<pre>
<?php

$list = file('skus2.txt', FILE_IGNORE_NEW_LINES);
print_r($list);

foreach ($list as $sku){

$server_url = "http://xxx.com/xxx/webservices/index.php";
$request = xmlrpc_encode_request("catalog.findProductImagesBySku", array($sku));
$context = stream_context_create(array(
'http' => array(
'method' => "POST",
'header' => "Content-Type: text/xml",
'content' => $request)));
$file = file_get_contents($server_url, false, $context);
$response = xmlrpc_decode($file);
print_r ($response);
}
?>
</pre>

再次感谢, 干杯!

1 个答案:

答案 0 :(得分:0)

我怀疑文件调用('skus2.txt'),如手册中所述:

  
    

注意:

         

结果数组中的每一行都包含行结尾,除非使用了FILE_IGNORE_NEW_LINES,因此如果您不希望行结束,则仍需要使用rtrim()。

  

我会尝试这样调用:

$list = file('somefile.txt', FILE_IGNORE_NEW_LINES);

甚至只是手动传递数组以查看它是否有效,即:

$list = array('TO88116',
              'TO1112516',
              'etc...'
             );

您至少可以通过这种方式缩小调试范围。

好运!