3

私はDOMDocument、Webページから数ビットのテキストを取得し、それらを配列に配置するために使用しています。同じコードが別のサーバーで機能しますが、私のものでは機能しません。ループTrying to get property of non-objectの反復ごとに取得し、最後に配列が空のままになります。while

$html = file_get_contents("http://sugarkettle.site44.com/catering.html");
$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML($html);
libxml_clear_errors();

$meatPrices = array();

function fillArrayFromDOM($array,$type) {
    global $doc;
    $i = 0;
    $label = 1;
    $array = array();
    while ($label <= 15):
      $array[$i] = $doc->getElementById($type.$label)->textContent;
      $i++;
      $label++;
    endwhile;
    return $array;
}

fillArrayFromDOM($meatPrices,"meat");
echo var_dump($meatPrices); 

これが機能するためのリンクです:http: //www.evintr.com/willtest.php

彼はGoDaddyサーバーを実行していて、私はローカルWAMP(2.2)サーバーを持っています。これが発生している理由を説明する可能性のある、提供できる構成オプションはありますか?または、問題はサーバー構成とは何の関係もありませんか?

どんな助けでも大歓迎です。前もって感謝します!

アップデート1-11/16/12

私のサーバーでテスト$meatPrices[1] = $doc->getElementById('meat1')->textContent;しましたが、動作します。何らかの理由で、whileループ内で同じ式(パラメーター内の変数を除くgetElementById)がエラーをスローしますTrying to get property of non-object

アップデート2-11/17/12

私のWAMPサーバーはPHPバージョン5.3.13を実行しています。私の友人のサーバーはPHPバージョン5.3.6を実行しています。

4

1 に答える 1

2

allow_url_fopen=onPHP構成ファイル( )を追加してみてくださいphp.ini。保存してApacheを再起動します。それは動作するはずです...

編集:(ファイルで) 拡張子php_openssl.dllが有効になっているかどうかも確認extension=php_openssl.dllしてください。php.iniここでも、Apacheの再起動が必要になります。

編集:

お使いのPHPのバージョンによって異なりますが、次の2つの解決策が考えられます。

  1. fillArrayFromDOM($meatPrices,"meat");行を $meatPrices = fillArrayFromDOM($meatPrices,"meat");に置き換えます 関数を変更して、必要な$meatPricesパラメーターを削除することもできます。

また

  1. function fillArrayFromDOM($array,$type) {行をあなたに置き換えて、行をfunction fillArrayFromDOM(&$array,$type) { //note new character &; it will keep reference to $array variable so it could be changeable;削除することもできます:$array = array();

両方とも機能するはずです。私は急いであなたのコメントの応答を待つ時間がありません。あなたが得るものを私たちに知らせてください...

于 2012-11-17T03:43:14.043 に答える