2

それで、私は初めてPHP開発を始めました。HTML DOM ナビゲーション/解析ライブラリを使用しようとしています。私はガノンを選びましたが、最終的にどちらを使用するかはあまり気にしません。

しかし、PHP はこれまでに見た他のすべてのコーディング言語とは根本的に異なることにすぐに気付きました。これは、エラー処理を見れば明らかです。含まれているクラス/スクリプトがエラーを出力するだけの場合、try/catch で単純にキャッチすることはできません。ここで起こっていることだと私は信じています。file_get_dom に実行するように指示したのは私ですが、制御できません。やりたいことは何でもでき、結果の HTML ファイルに書きたいことは何でもできます。

これは悪い習慣ですか、それは確かに私を台無しにしています。解決策は何ですか?書き込もうとしているテキストをキャッチできますか (非表示の div で囲みます)。しかし、このクラスが必要なものを書くのを止めたいと同時に、エラーが発生したかどうかを知り、適切な手順を実行できるようにすることも必要です。

注: 独自のエラーをスローしたり、「or die」を使用したりしても、さらにテストを実行すると、期待どおりの結果が得られません。したがって、Try/Catch の使用方法がまったくわからないだけかもしれませんが、いくつかのチュートリアルでこのように使用されているのを見たことがあります。しかし、これが構文エラーであっても、含まれているクラスを制御してhtmlファイルを汚染しないようにする方法については、私の最初の質問が残っています。

<?php
try{
 include_once('ganon.php');
}catch(Exception $e){ echo  "OUT: $e->getMessage()"; }

class GamesSummery{
  public function __construct(){

    try{
        $html = file_get_dom('web site adress');
    }catch(Exception $e){ echo "Main: $e->getMessage()"; }
  }
}    $test = new GamesSummery();

出力:

「致命的なエラー: 238 行目の C:\xampp\htdocs\hockey\ganon.php で最大実行時間が 30 秒を超えました」

また

「警告: file_get_contents(): C:\xampp\htdocs\hockey\ganon.php の 19 行目のファイル名を空にすることはできません」

4

3 に答える 3

2
  • (キャッチ可能な) エラーを例外に変換する: これを行う関数を作成し、 を使用しますset_error_handler()
  • 悪いコーダーからの出力を防ぐ: ob_start()&ob_end_clean()を使用しますが、もっと要点を言えば、そのコーダーがどこに住んでいて、彼の玄関先でたわごとをするかを調べてみてください。
  • ライブラリを使用しているexit()、またはライブラリ内にいる人: ライブラリをすぐにダンプします。そのコードdie()信頼する理由はまったくありません。

残念ながら、致命的なエラーはしばしば... 致命的です。例外なく。しかし、そこにはerror_log(on) & display_errors(off in production、on in dev) ディレクティブがあります。

于 2013-03-07T23:43:13.947 に答える
2

まず、php.ini の実行時間 set_time_limit を増やします: http://php.net/manual/en/function.set-time-limit.php

次に、作成したファイル名が空であるため、新しいファイル名を確認または追加する必要があります。

アクセスする前に、ファイル名を作成するか、新しいファイル名を書き込む必要があります。例としてファイルを作成します。

$ourFileName = "例";

$ourFileHandle = fopen($ourFileName, 'w') または die("ファイルを開けません");

fclose($ourFileHandle);

于 2013-03-07T23:42:27.883 に答える
1

最初に: php には、キャッチできない構文エラー (およびその他) のような致命的なエラーがあります。この場合、プログラムはすぐに終了します。


他のすべてについては、 を使用する方法がありset_error_handler()ます。

すべてのエラーまたは警告を例外に変換するカスタム エラー ハンドラー関数を用意しました。関数の出力 (登録方法) は php.ini の設定に依存することに注意してくださいerror_reporting

最初にエラー ハンドラを登録します。

set_error_handler('errorHandler', ini_get('error_reporting'));

関数自体は次のとおりです。

function errorHandler(
            $errno,
            $errstr,
            $errfile = null,
            $errline = null,
            $errcontext = null
) {
    $message = sprintf("%s: %s, file: %s, line: %s",
        $errno, $errstr, $errfile, $errline
    );
    // -->
    throw new ErrorException($message, 0, $errno, $errfile, $errline);
}

次の例でコードを試すことができます。

try {
   $a = 1 / 0; // will throw a warning
} catch ( Exception $e) {
   echo $e->getMessage();
}
于 2013-03-07T23:42:41.420 に答える