0

何らかの理由で、これはすぐに使用できる WAMP で問題なく動作しますが、Web サーバーにアップロードすると、次のエラーが表示されます。

重大度: 警告

メッセージ: DOMDocument::load(): I/O 警告: 外部エンティティの読み込みに失敗しました "/mounted-storage/home155/sub004/sc81961-YHHB/* * * * * *.com/dev/ 2012-10-04 03 :15:03 4 2012-10-04 03:25:16 2012-09-17 19:25:11 3 0 1 1 2012-10-04 04:08:18 "

ファイル名: models/fuel_model.php

ライン番号: 74

アプリケーションのルート フォルダーを指しています。

コード:

   function get_pos($id)
    {
        $get = $this->db->query(
                "SELECT * FROM holding WHERE id=1"
            );
        $stream = $get->row_array();

        $addr = 'http://api.eveonline.com/corp/StarbaseDetail.xml.aspx?keyID='.$stream['apiid'].
                '&vCode='.$stream['apikey'] . '&itemID=' . $id;
        $link = new DOMDocument();

      $get_cache = $this->db->query(
          "SELECT * FROM cache_poses WHERE posid=".$id
        );
      $cache = $get_cache->row_array();

      $posted = strtotime(date("Y-m-d H:i:s"));
      if(!empty($cache))
      {
        $posted = strtotime($cache['cachedon']);
      }

      $current = strtotime(date("Y-m-d H:i:s"));

      $mins = $posted - $current;
      $expiry = $mins % 60;

      if(empty($cache))
      {
        $link->load($addr);
        $this->db->query("INSERT INTO cache_poses (data, posid) VALUES (" . $this->db->escape($link->saveXML()) . "," . $id .")");

      } elseif(!empty($cache) && ($expiry >= 360)) {
        $this->db->query("DELETE FROM cache_poses WHERE posid=".$id);
        $link->load($addr);
        $this->db->query("INSERT INTO cache_poses (data, posid) VALUES (" . $this->db->escape($link->saveXML()) . "," . $id . ")");

      } elseif(!empty($cache) && ($expiry < 360)) {

        $link->load($cache['data']);

      }

        $supply = $link->getElementsByTagName('row');
        $supplies = array();

        foreach ($supply as $fuel) {
            $block = $fuel->attributes;

            $put = $this->db->query('SELECT name FROM items WHERE typeid='.$block->item(0)->nodeValue);
            $lck = $put->row_array();

            $supplies[$lck['name']] = $block->item(1)->nodeValue;
        }

        $info = $this->implode_with_keys($supplies);
        return $info;
    }
4

1 に答える 1

0

XMLを投稿できますか?これは、ローカル開発マシンではアクセス可能である必要があるが、ライブサーバーではアクセスできないDTDを参照しています。DTDとそれが定義するエンティティがXMLにとって重要でない場合は、DOMDocument :: load()を呼び出す前に入力エンティティのロードを無効にすることで、警告を抑制し、余分なリソースをロードしないことでパフォーマンスが向上する可能性があります。

$link->resolveExternals = FALSE;
$link->load($cache['data']);

http://www.php.net/manual/en/class.domdocument.php#domdocument.props.resolveexternals

ちなみに、DOMDocument :: load()はファイルパスを受け入れます。あなた$cache['data']が本当にデータベース内のXMLの文字列である場合は、DOMDocument :: loadXML()を使用する必要があります。

于 2012-10-04T04:54:00.810 に答える