-1

phpスクリプトを起動すると、正常に動作する場合もありますが、多くの場合、このエラーが発生します。

致命的なエラー:21行目の/membri/americanhorizo​​n/ytvideo/rilevametadatadaurlyoutube.phpの非オブジェクトでメンバー関数children()を呼び出す

これはコードの最初の部分です

// set feed URL
$feedURL = 'http://gdata.youtube.com/feeds/api/videos/dZec2Lbr_r8';

// read feed into SimpleXML object
$entry = simplexml_load_file($feedURL);

$video = parseVideoEntry($entry);


function parseVideoEntry($entry) {      
  $obj= new stdClass;

  // get nodes in media: namespace for media information
  $media = $entry->children('http://search.yahoo.com/mrss/'); //<----this is the doomed line 21 

更新:採用されたソリューション

   for ($i=0 ; $i< count($fileArray); $i++)
  {

    // set feed URL
    $feedURL = 'http://gdata.youtube.com/feeds/api/videos/'.$fileArray[$i];


    // read feed into SimpleXML object
    $entry = simplexml_load_file($feedURL);


   if (is_object($entry))
   {
       $video = parseVideoEntry($entry);

       echo ($video->description."|".$video->length);
       echo "<br>";
    }
     else
     {
       $i--;
     }

 }

このモードでは、エラーの原因となったファイルをスクリプトに再チェックさせます

4

2 に答える 2

2

まず、関数を呼び出します。

$entry = simplexml_load_file($feedURL);

その関数には戻り値があります。その関数のマニュアルページに文書化されています。

$entry次に、関数呼び出しが成功したことを確認せずに、変数の形式でその戻り値を使用します。

そのため、次にエラーが発生します。ただしエラー/間違いは、関数の戻り値の処理方法です。

戻り値を適切に処理しないことは、問題を引き起こすようなものです。使用する関数について読み、戻り値を確認して、成功またはエラーの状態に従って続行します。

$entry = simplexml_load_file($feedURL);

if (FALSE === $entry)
{
    // youtube not available.
}
else 
{
    // that's what I love!
}
于 2012-11-10T17:59:02.143 に答える
-3

時々?本当に?これを見てください:

<?php

$dummy; //IN FACT, this var is NULL now

// Will throw exactly the same error you get
$dummy->children();

なんで?なぜなら、オブジェクト型からメソッドを呼び出すことができるからです。

したがって、このようなエラーを回避したい場合は、次にメソッドを呼び出すときに、それが「可能」であることを確認してください。

<?php

if ( is_object($dummy) && method_exists($dummy, 'children') ){
   //sure it works
   $dummy->children();
}
于 2012-11-10T20:09:21.353 に答える