0

私はこの本に取り組んでいて、予期しない状況を見つけました。

PHP/HTML ハイブリッド ファイルで作業する場合、この本によると、ob バッファなしで PHP の try/catch を使用すると、ファイルの途中でエラーが発生すると、PHP エンジンはアクセスできなくなります。一部の出力が既に browser に送信されているため、catch{} 行。この本は、ob_start()、ob_end_clean()、ob_end_flush()を使用することで、この状況を修正できると述べています。

しかし、この本のサンプル コードをいじってみると、ob バッファがなくても、try/catch は問題なく動作しました。大丈夫と言うのは、例外が発生した場合、catch{} 行に到達して問題なく実行できることを意味します。

テストには Linode VPS を使用しました。PHP のバージョンは 5.3.2 です。通常の Linode スクリプトを使用して VPS をセットアップしました。

何故ですか?:)

4

1 に答える 1

2

その声明はナンセンスです。PHPtry..catchは、ブラウザに送信された、または送信されていない出力に関係なく、期待どおりに機能します。

その本の正誤表にも誤りが含まれていることを考えると、それは単にあまり良い本ではなく、間違った記述が含まれていることにまったく驚かないと思います。一目見ただけで次のことがわかります。

手順4では、コードの3行目は次のようになります。

if ($_POST && isset($missing) && !empty($missing)) {

いいえ、実際には次のようになります。

if ($_POST && !empty($missing)) {

また

if ($_POST && $missing) {

作者はどうやら使用方法をempty理解していません。

さらに遠く:

手順2のコードの4行目の終わりに、最初の中括弧がありません。次のようになります。

if (!@include('includes/connection.inc.php')) {

それは悪い習慣の悪臭を放ち、次のように書き直す必要があります。

if (!file_exists('includes/connection.inc.php')) {

また:

require_once 'includes/connection.inc.php';

もっとあると確信しています...:)

于 2012-05-25T04:27:03.750 に答える