1

Windowsでxamppポータブルからphpスクリプトを実行します。スクリプトには 1 分以上かかります。最近、echo ステートメントがすぐに表示されないため、スクリプトで flush() の問題が発生しています。以前のスクリプトは、バッファリングの問題もなく正常に動作していました。

興味深いことに、xampp ポータブルを別のシステムにコピーする同じスクリプトを実行したところ、flush ステートメントは問題なく機能していました。同じコード、同じ xampp ポータブル。

その理由は何ですか?

4

6 に答える 6

1

他の回答を読みましたが、あなたは家庭環境と職場環境が同じであると主張し続けています。ただし、違いがあることがわかります。この観点は、(少なくとも私にとっては)問題を調査するのに本当に役立ちます。

問題について詳しく説明していただけなかったので、次のチェックリストを試してみます。

  • 設定
    • あなたのPHP設定は本当に同じですか?phpinfo()両方の環境での結果を比較してみてください。
  • データ

    • 同一のデータでスクリプトを本当にテストしていますか? PHP マニュアルに記載されている多くの微妙な問題があります。

      ブラウザでさえ、入力を表示する前にバッファリングすることがあります。たとえば、Netscape は、行末またはタグの開始を受け取るまでテキストをバッファリングし、最も外側のテーブルのタグが表示されるまでテーブルをレンダリングしません。

      Microsoft Internet Explorer の一部のバージョンは、256 バイトの出力を受信した後にのみページの表示を開始するため、フラッシュする前に余分な空白を送信して、それらのブラウザーにページを表示させる必要がある場合があります。

      http://php.net/manual/en/function.flush.php

      また

      http://www.php.net/manual/en/function.ob-flush.php#90529 (コメント投稿者は、経験する可能性のある多くの問題を指摘しています)

    • HTML の代わりにダミーの平文データを試してください。現在時刻などの単純な行を出力して、スクリプトの動作を確認してみてください。

  • ブラウザ

    • 問題がブラウザ固有のものであるかどうかを確認するために、(キャッシュをクリアした) いくつかのブラウザを試してください。
于 2013-11-10T20:28:12.480 に答える
1

スクリプトの最初の行を作成しますob_implicit_flush();

また

php.iniファイルの設定を変更しますimplicit_flush = On

ドキュメントから:

Implicit_flush ブール値、デフォルトで FALSE。これを TRUE に変更すると、出力ブロックごとに自動的にフラッシュするよう出力層に指示するように PHP に指示します。これは、print または echo の呼び出しのたびに、および HTML ブロックのすべての呼び出しの後に、PHP 関数の flush() を呼び出すことと同じです。

Web 環境で PHP を使用する場合、このオプションをオンにすると、パフォーマンスに重大な影響が生じるため、通常はデバッグ目的でのみ使用することをお勧めします。

于 2013-11-06T23:41:17.213 に答える
0

問題はウイルス対策にあることがわかりました。最近、Avast から Bitdefender に切り替えました。アバストに戻すと、問題は奇跡的に解消されました。したがって、ウイルス対策もここでの要因であると思います。

于 2013-11-14T12:47:01.383 に答える
0

両方のシステムで実行されている Windows のバージョンについては言及していません。システムは完全に同一ですか?

XAMPP のポータブル バージョンを実行しているとも言いましたが、ペン ドライブ/サンプ ドライブを使用している場合、USB の速度によってデータ転送速度が異なる可能性があります。

最初のシステムには USB レガシー ポートがあり、テストした 2 番目のシステムには USB 2+ ポート以上があるという同様の問題がありました。

速度と処理時間はシステムによって異なりますが、あるシステムは 20 秒かかり、他のシステムは処理に 60 秒近くかかりました。

システムが遅いため、望ましくない結果が生じました [私はイメージ プロセッサで作業していました]。

あなたのケースは似ていて、システムのバイタルで多くのことをしなければならなかったと思います。

乾杯クレイン

于 2013-11-10T05:17:51.163 に答える
0

これは、gzip を使用し、送信された出力がある場合に発生するため、ブラウザはこれを解決するために混乱します。私は常にこのコードを使用します

if (isset($_SERVER['HTTP_ACCEPT_ENCODING']) && strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== false)
    {ob_start('ob_gzhandler'); ob_start();}
else
    ob_start();
于 2013-11-08T23:19:33.140 に答える
0

多分あなたのブラウザだと思います。Iron Portable ブラウザの一時的な設定を消去しましたか?

于 2013-11-05T16:40:20.543 に答える