2016-03-07 4 views
6

特定のタスクを実行するスクリプトを書くのに多くの時間を費やしました。ローカルマシンでテストしていましたが、それ私は、これは私はそれは私のローカルマシン上で正常に動作し、そしてときに私、私はエラーを取得言ったように、スクリプトが致命的なエラー:DOMNodeList型のオブジェクトを配列として使用することはできません

$xml = new DOMDocument(); 
$xml->loadHTML($html); 

$xpath = new DOMXPath($xml); 
$table =$xpath->query("//*[@style='background: #aaaaaa']")->item(0); 



$rows = $table->getElementsByTagName("tr"); 

foreach ($rows as $row) { 
    if($row->getAttribute('align') === 'center') { 
    $cells = $row -> getElementsByTagName('td'); 

    // I GET THE ERROR FROM THIS LINE 
    $add = mysql_escape_string(utf8_decode($cells[0]->nodeValue)); 

    Some logic 

    } 

を何のサンプルです

Fatal error: Cannot use object of type DOMNodeList as array 

私は、このエラーを与えるホスティングへ私のホスティングでそれを実行する

私は問題がある

print_r(get_loaded_extensions()); 

そして、これは私のマシン

Array 
(
    [0] => Core 
    [1] => bcmath 
    [2] => calendar 
    [3] => ctype 
    [4] => date 
    [5] => ereg 
    [6] => filter 
    [7] => ftp 
    [8] => hash 
    [9] => iconv 
    [10] => json 
    [11] => mcrypt 
    [12] => SPL 
    [13] => odbc 
    [14] => pcre 
    [15] => Reflection 
    [16] => session 
    [17] => standard 
    [18] => mysqlnd 
    [19] => tokenizer 
    [20] => zip 
    [21] => zlib 
    [22] => libxml 
    [23] => dom 
    [24] => PDO 
    [25] => bz2 
    [26] => SimpleXML 
    [27] => wddx 
    [28] => xml 
    [29] => xmlreader 
    [30] => xmlwriter 
    [31] => apache2handler 
    [32] => openssl 
    [33] => curl 
    [34] => mbstring 
    [35] => exif 
    [36] => gd 
    [37] => gettext 
    [38] => intl 
    [39] => mysql 
    [40] => mysqli 
    [41] => Phar 
    [42] => pdo_mysql 
    [43] => pdo_sqlite 
    [44] => soap 
    [45] => sockets 
    [46] => sqlite3 
    [47] => xmlrpc 
    [48] => xsl 
    [49] => mhash 
) 

と私のホスティング

Array 
(
    [0] => Core 
    [1] => date 
    [2] => ereg 
    [3] => libxml 
    [4] => openssl 
    [5] => pcre 
    [6] => sqlite3 
    [7] => zlib 
    [8] => bcmath 
    [9] => bz2 
    [10] => calendar 
    [11] => ctype 
    [12] => curl 
    [13] => dom 
    [14] => hash 
    [15] => fileinfo 
    [16] => filter 
    [17] => ftp 
    [18] => gd 
    [19] => gettext 
    [20] => SPL 
    [21] => iconv 
    [22] => session 
    [23] => intl 
    [24] => json 
    [25] => mbstring 
    [26] => mcrypt 
    [27] => standard 
    [28] => mysql 
    [29] => mysqli 
    [30] => pgsql 
    [31] => mysqlnd 
    [32] => Phar 
    [33] => posix 
    [34] => pspell 
    [35] => Reflection 
    [36] => imap 
    [37] => SimpleXML 
    [38] => soap 
    [39] => sockets 
    [40] => exif 
    [41] => tidy 
    [42] => tokenizer 
    [43] => xml 
    [44] => xmlreader 
    [45] => xmlrpc 
    [46] => xmlwriter 
    [47] => xsl 
    [48] => zip 
    [49] => cgi-fcgi 
    [50] => PDO 
    [51] => pdo_sqlite 
    [52] => pdo_mysql 
    [53] => ionCube Loader 
    [54] => Zend Guard Loader 
) 
からの結果であるからかもしれないと思ったので、私はロードされた拡張子を取得するには、このコードを使用

エラーが表示される理由はわかりません

+0

ローカルマシンとリモートマシンは同じ方法で構成されていますか?図書館とは何ですか?これは、何かがある場所で動作し、別の場所で動作しない場合の最初の質問です。 –

+0

私のローカルマシンはWindowsで、私のホストはlinuxです。あなたが知りたい他の設定を教えてください。私は彼女に投稿します。 –

+1

これは本当に問題です。いくつかのライブラリは、これらの2つのシステムで異なって動作します。良い提案が必要な場合は、ローカルマシンにLinux仮想マシンをインストールし、それを使って開発してください。あなたはあなたの人生を楽にします。 –

答えて

-1

次のドキュメントをお読みください。

http://php.net/manual/en/domdocument.getelementsbytagname.php

This function returns a new instance of class DOMNodeList containing all the elements with a given local tag name.

それはオブジェクトではなく、あなたが[0] $細胞を使用することはできません配列です。

+1

はい、私は同じですが、なぜそれがローカルマシンで動作すると思いますか? –

+0

別のPHPバージョン、おそらく? –

+1

唯一の文ではなく解ではない文脈のために投票されました。それはちょうど怠惰です。私は怠け者であり、これを受け入れるためにOPを投票しています。あなたが実際に答えを更新することを決定した場合は、それがうまくいくならば、私はそれを投票することができます。 – John

13

getElementsByTagName()は、DOMNodeListを返します。 as of PHP 5.6.3を実装しています。これにより、$cells[0]経由でノードにアクセスすることができます。

以前のバージョンでは、DOMNodeListのitem()メソッドを使用して特定のインデックスにアクセスする必要があります。 $cells->item(0)

+0

これは正しい答えとしてマークする必要があります! – Marc

関連する問題