人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

使えていたsimple_html_dom.php がさくらの共用からGMOクラウドVPSに移行するとエラーを吐き出す原因は何でしょうか。

PHPのバージョンはさくらの共用は5.4.xのサーバーから、GMOクラウドVPSの5.4.16のサーバーにファイルを移行すると、今まで取得できていたスクレイピング部分がどれも取れなくなってしまいました。

$dom->find('.classname',0)->innertext;
等でさくらインターネットでは今も問題なく動いているものですが、GMOクラウドでは
Notice: Trying to get property of non-object
というエラーで全ての指定箇所が同じエラーで取得できていないようでした。
$domをダンプすると大量の階層構造が吐き出されますので、DOMの取得はできてそうです。

そもそもクラウドとは言えサーバーを設定した事が無いので初歩的な事が原因かもしれません。

pearもインストールされていなくてエラーが出ていたのでインストールしてパスを通すとpearのエラーはなくなりました。
エラーレベルやCGIモードか、Apacheかなども変えてみましたが改善せず、元に戻しました。

なぜ共用サーバーではHTMLをクラス指定で取れていたものが、サーバーを変えると上記のエラーを吐き出すのか、可能性を幾つか教えて頂けますと幸いです。

●質問者: maintour15
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3
●500ポイント ベストアンサー

なにやら解決したそうなので、コメントでのやり取りを整理して、回答に代えます。


まず、最初に疑ったのが環境が変わったということで、そもそもページの内容が取れてないんじゃないかということ。

可能性の話として、外のページが取れてないんじゃないでしょうか。
そもそも外に出られないとか、UA や経路で 403 Forbidden なページが返されているとか。
$dom->plaintext で、ページの中身を確認した方が良いと思います。


$dom->plaintext の内容は、正しく取得できているらしいとのことだったので、次に疑ったのは、こんなところ。

言語は違いますが、Ruby の 1.6 → 2.0 をやったことがあって(また、バージョンの差が激しいんだ)、内部コードのデフォルトが Unicode になったために、そもそもパースする手前でこけてるような経験をしたことがあるから。

エンコード変えたら出来ました、ありがとうございます!

ということでした。
php.ini で encoding を変えたんだろうか。


ちなみに、こんなことを書いている人もいたので、覚えておくと使える場面があるかも。

Simple HTML DOMで、外部のファイルを扱う場合、

// Create DOM from URL or file
$html = file_get_html('http://www.google.com/');

と書くことが多い。

でも日本語サイトの場合は、文字化けする可能性が高いので、

mb_language('Japanese');

$source = file_get_contents('http://www.google.com/');
$source = mb_convert_encoding($source, 'utf8', 'auto');

$dom = str_get_html($source);

とやった方がいい。

PHP Simple HTML DOM Parserで文字化けするときの対処法 - Qiita
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ