2017-10-10 14 views
0

PHPの組み込みサーバーでエラー出力に奇妙な問題があります。本当にバグのようですが、100%確実ではありません。PHPローカルサーバ - ダブルエラー - バグかどうか?

スクリプト例:

<?php 
error_reporting(-1); 
ini_set('display_errors', '0'); 
ini_set('log_errors', '1'); 
ini_set('ignore_repeated_errors', true); 

trigger_error('my notice', E_USER_NOTICE); 
trigger_error('my warning', E_USER_WARNING); 

コンソール(php example.php)にこのコードを実行する場合は、以下の、期待される、出力を得る:あなたは、このスクリプトを実行する場合は、しかし、

PHP Notice: my notice in C:\php\example.php on line 7 
PHP Stack trace: 
PHP 1. {main}() C:\php\example.php:0 
PHP 2. trigger_error('my notice', 1024) C:\php\example.php:7 
PHP Warning: my warning in C:\php\example.php on line 8 
PHP Stack trace: 
PHP 1. {main}() C:\php\example.php:0 
PHP 2. trigger_error('my warning', 512) C:\php\example.php:8 

をWebページ(php -S localhost:9000 example.php)を開き、URLを開くと、コンソールに次の出力が表示されます。

PHP 7.1.10 Development Server started at Tue Oct 10 19:46:05 2017 
Listening on http://localhost:9000 
Document root is C:\php 
Press Ctrl-C to quit. 
[Tue Oct 10 19:46:06 2017] PHP Notice: my notice in C:\php\example.php on line 7 
[Tue Oct 10 19:46:06 2017] PHP Stack trace: 
[Tue Oct 10 19:46:06 2017] PHP 1. {main}() C:\php\example.php:0 
[Tue Oct 10 19:46:06 2017] PHP 2. trigger_error('my notice', 1024) C:\php\example.php:7 
[Tue Oct 10 19:46:06 2017] PHP Warning: my warning in C:\php\example.php on line 8 
[Tue Oct 10 19:46:06 2017] PHP Stack trace: 
[Tue Oct 10 19:46:06 2017] PHP 1. {main}() C:\php\example.php:0 
[Tue Oct 10 19:46:06 2017] PHP 2. trigger_error('my warning', 512) C:\php\example.php:8 
[Tue Oct 10 19:46:07 2017] PHP Notice: my notice in C:\php\example.php on line 7 
[Tue Oct 10 19:46:07 2017] PHP Stack trace: 
[Tue Oct 10 19:46:07 2017] PHP 1. {main}() C:\php\example.php:0 
[Tue Oct 10 19:46:07 2017] PHP 2. trigger_error('my notice', 1024) C:\php\example.php:7 
[Tue Oct 10 19:46:07 2017] PHP Warning: my warning in C:\php\example.php on line 8 
[Tue Oct 10 19:46:07 2017] PHP Stack trace: 
[Tue Oct 10 19:46:07 2017] PHP 1. {main}() C:\php\example.php:0 
[Tue Oct 10 19:46:07 2017] PHP 2. trigger_error('my warning', 512) C:\php\example.php:8 

例のスクリプトの末尾にtrigger_error('my error', E_USER_ERROR);を追加すると、二重出力が固定されるというのが最も奇妙なことです。

この原因は何ですか? INIの設定でバグか奇妙なことはありますか?

+2

他のすべてのものの前に、ただ1つのHTTP要求があることを確認してください。あなたが掲示したアウトプットは、2回のリクエストでは正常です。 – axiac

+0

あなた自身で試しましたか? – jurchiks

+0

Dunnoがこれを絞り込んだのですが、私はLinuxのボックスでこれを複製することができませんでした。 –

答えて

1

実際、答えは問題です。スクリプトを使用して内部Webサーバーを起動し、このスクリプトをルーターとして使用しました。つまり、受信したすべての要求に対してそのスクリプトを呼び出します。もちろん、ブラウザにはfavicon.icoが必要で、残りの部分はすでに分かっています。

起動ルータなしでPHPの内部Webサーバは、どこのサーバ(Webサイトのルートディレクトリ)にファイルを見つけるためにそれを伝えるために-tコマンドラインオプションを使用します。

php -S localhost:9000 C:\php 
+0

最近誰かがルータなしでPHPコードを書いた人は、cmon manです。そのスタイルは古く、時代遅れであり、不必要な問題を引き起こします。 私はそのようなコードを書いてもうまくいくので投票するつもりですが、私はそうしないので受け入れられません。 – jurchiks

+0

最近誰かが 'favicon.ico'のないサイトを書く人は、cmon man ;-) – axiac

+0

APIについてはどうですか? – jurchiks

0

TL; DR - 実際の修正はありません。回避策のみです。

ロングバージョン:どうやらこれは、ファビコンを要求するブラウザ常にによって引き起こされる

、そして、何のヘッダーや何かを停止しないようにそれを言うする方法は、文字通りありません。

<head> 
    <link rel="icon" type="image/png" href="data:image/png;base64,iVBORw0KGgo="> 
</head> 

2番目のオプションを明らかに:

あなたがすることができる唯一のことはそうのように、あなたのページの<head>ブロック内のリンクを入れて)実際にあなたのAPIのためのfavicon.icoを実装)のいずれか1ある、または2 JSON APIなどでは機能しません。そのため、ブラウザ内でHTML以外のもの(たとえば、1ページアプリからバックエンドへのAPIリクエスト)を返すルートを開いたり、静的コンテンツに直接アクセスする例えばhttp://localhost:9000/css/reset.css、これは明らかにまだキャッシュされていない場合にfaviconを要求する) - オプション1のみが「良い」です。

関連する問題