ホームページ バックエンド開発 PHPチュートリアル fsockopen はスムーズに実行されますが、fwrite が失敗する理由は何ですか?

fsockopen はスムーズに実行されますが、fwrite が失敗する理由は何ですか?

Jun 13, 2016 pm 01:23 PM
amp limit out quot

fsockopen は成功するが、fwrite が失敗する理由は何ですか?

ローカルおよび WINDOWS サーバー上でテストされており、非常に安定しています。

しかし、LINUX サーバーでは、fsockopen は毎回成功しますが、fwrite はほとんどの場合失敗し、一度成功するまでに長い時間がかかります。 。

そのような状況に遭遇した人はいますか? 。
さらに//コメントマークの部分、誰か説明してもらえませんか。 。

コードは次のとおりです。

PHP コード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
$matches = parse_url($url);
    !isset($matches['host']) && $matches['host'] = '';
    !isset($matches['path']) && $matches['path'] = '';
    !isset($matches['query']) && $matches['query'] = '';
    !isset($matches['port']) && $matches['port'] = '';
    $host = $matches['host'];
    $path = $matches['path'] ? $matches['path'].($matches['query'] ? '?'.$matches['query'] : '') : '/';
    $port = !empty($matches['port']) ? $matches['port'] : 80;
    if($post) {
        $out = "POST $path HTTP/1.0\r\n";
        $out .= "Accept: */*\r\n";
        $out .= "Accept-Language: zh-cn\r\n";
        $out .= "Content-Type: application/x-www-form-urlencoded\r\n";
        $out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n";
        $out .= "Host: $host\r\n";
        $out .= 'Content-Length: '.strlen($post)."\r\n";
        $out .= "Connection: Close\r\n";
        $out .= "Cache-Control: no-cache\r\n";
        $out .= "Cookie: $cookie\r\n\r\n";
        $out .= $post;
    } else {
        $out = "GET $path HTTP/1.0\r\n";
        $out .= "Accept: */*\r\n";
        $out .= "Accept-Language: zh-cn\r\n";
        $out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n";
        $out .= "Host: $host\r\n";
        $out .= "Connection: Close\r\n";
        $out .= "Cookie: $cookie\r\n\r\n";
    }
    
    $fp = @fsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout);
    
    if(!$fp) {
        return '';//note $errstr : $errno \r\n
    } else {
        stream_set_blocking($fp, $block);
        stream_set_timeout($fp, $timeout);var_dump($fp);
        @fwrite($fp, $out);
//注释标记
        /*$status = stream_get_meta_data($fp);
        if(!$status['timed_out']) {
            while (!feof($fp)) {
                if(($header = @fgets($fp)) && ($header == "\r\n" ||  $header == "\n")) {
                    break;
                }
            }

            $stop = false;
            while(!feof($fp) && !$stop) {
                $data = fread($fp, ($limit == 0 || $limit > 8192 ? 8192 : $limit));
                $return .= $data;
                if($limit) {
                    $limit -= strlen($data);
                    $stop = $limit <= 0;
                }
            }
        }*/
//注释标记
        @fclose($fp);
        return true;
    }

ログイン後にコピー





------解決策 ------------------
ファイルの可読性を確認してください。
------解決策------------------
PHP コード

/* 元の投稿者のアプリケーションについては、TCP ソケットに関する情報をいくつか示します */
        $status = stream_get_meta_data($fp);
/* ここでは、TCP 接続がタイムアウトしたかどうかを確認します */
        if(!$status['timed_out']) {
/* タイムアウトがない場合は、ファイルの終わりに達するまでデータを読み取ります */
            while (!feof($fp)) {
/* ここでHTTPヘッダ情報を読み込むため、空行でヘッダ情報の終わりとなるため、ブレークが必要です */
                if(($header = @fgets($fp)) && ($header == "rn" || $header == "n")) {
                    壊す;
                }
            }
/* ここで読み込むHTTPボディは、少なくともHTTPレスポンスヘッダにContent-Lengthがあるかどうかを確認して、それを元に処理するのが少し荒いのではないかと思います。それは次のようになります */
            $stop = false;
            while(!feof($fp) && !$stop) {
/* 最大 8192 バイトを読み取ります ($limit は減少します) */
                $data = fread($fp, ($limit == 0 || $limit > 8192 ? 8192 : $limit));
/* 読み取った内容を戻り文字列に連結します */
                $return .= $data;
                if($limit) {
                    $limit -= strlen($data);
                    $stop = $limit <font color="#e78608">------解決策---------------------- <div class="clear"></div></font>
ログイン後にコピー
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

マザーボード上のデジタルオーディオ出力インターフェイス - SPDIF OUT マザーボード上のデジタルオーディオ出力インターフェイス - SPDIF OUT Jan 14, 2024 pm 04:42 PM

マザーボード上の SPDIFOUT 接続線の順序 最近、ワイヤの配線順序に関する問題に遭遇しました。ネットで調べたところ、1、2、4がアウト、+5V、グラウンドに相当するという情報もあれば、1、2、4がアウト、グラウンド、+5Vに相当するという情報もありました。最善の方法は、マザーボードのマニュアルを確認することです。マニュアルが見つからない場合は、マルチメーターを使用して測定できます。最初にアースを見つけてから、残りの配線の順序を決定します。マザーボードの VDG 配線の接続方法 マザーボードの VDG 配線を接続するときは、VGA ケーブルの一端をモニターの VGA インターフェイスに差し込み、もう一端をコンピューターのグラフィックス カードの VGA インターフェイスに差し込む必要があります。マザーボードの VGA ポートに差し込まないよう注意してください。接続すると、次のことが可能になります

Laravelのtakeとlimitの使い方を詳しく解説 Laravelのtakeとlimitの使い方を詳しく解説 Mar 10, 2024 pm 05:51 PM

「Laravelのtakeとlimitの使い方を詳しく解説」 Laravelではtakeとlimitの2つがよく使われており、データベースクエリで返されるレコード数を制限するために使用されます。これらの機能は似ていますが、特定の使用シナリオでは微妙な違いがいくつかあります。この記事では、これら 2 つのメソッドの使用法を詳細に分析し、具体的なコード例を示します。 1. Take メソッド Laravel では、take メソッドは返されるレコードの数を制限するために使用され、通常は orderBy メソッドと組み合わせられます。

アウトインターフェイスとインインターフェイスは何を意味しますか? アウトインターフェイスとインインターフェイスは何を意味しますか? Sep 28, 2021 pm 04:39 PM

out インターフェイスは出力インターフェイスを指し、in インターフェイスは入力インターフェイスを指します。出力インターフェイスは通常、スピーカー、ヘッドフォンなどの負荷の接続に使用されるオーディオ ソース ライン出力インターフェイスを表し、一方、入力インターフェイスは通常、CD プレーヤー、モバイル機器の接続に使用されるオーディオ ソース ライン入力インターフェイスを表します。電話、MP3 プレーヤー、コンピュータなど。

AMPとは何のコインですか? AMPとは何のコインですか? Feb 24, 2024 pm 09:16 PM

AMPコインとは何ですか? AMP トークンは、Synereo プラットフォームの主要取引通貨として 2015 年に Synereo チームによって作成されました。 AMP トークンは、複数の機能と用途を通じてユーザーに優れたデジタル経済体験を提供することを目的としています。 AMP トークンの目的 AMP トークンには、Synereo プラットフォームで複数の役割と機能があります。まず、プラットフォームの暗号通貨報酬システムの一部として、ユーザーはコンテンツを共有および宣伝することで AMP 報酬を獲得できます。これは、ユーザーがプラットフォームのアクティビティにより積極的に参加することを促すメカニズムです。 AMP トークンは、Synereo プラットフォームでコンテンツを宣伝および配布するために使用することもできます。ユーザーは、AMP トークンを使用して、より多くの視聴者に視聴して共有してもらうことで、プラットフォーム上でのコンテンツの可視性を高めることができます。

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

Laravelにおけるtakeとlimitの機能比較と使い方 Laravelにおけるtakeとlimitの機能比較と使い方 Mar 09, 2024 pm 09:09 PM

Take と limit は、Laravel でクエリ結果セットの数を制限するためによく使用される 2 つのメソッドです。機能的には類似点がありますが、使用方法や詳細がいくつか異なります。この記事では、2 つのメソッドの機能と使用法を詳細に比較し、読者がそれらの違いとそれらを正しく適用する方法をよりよく理解できるように、具体的なコード例を示します。 1.takeメソッド takeメソッドはLaravelEloquentクエリビルダーにあります

win10 システムがクラッシュしてメモリ不足が表示された場合はどうすればよいですか? win10 システムがクラッシュしてメモリ不足が表示された場合はどうすればよいですか? Feb 09, 2024 pm 03:00 PM

Win10 システムがクラッシュし、メモリ不足が表示されます。最近、多くのユーザーがコンピューターを使用しているときにこのプロンプトに遭遇し、修復するには頻繁に再起動が必要です。では、この状況にどう対処すればよいでしょうか? この問題に対処するために、この問題の win10 チュートリアルはここにあります。より多くの友人が問題を解決できるように支援することを期待して、大多数のユーザーと協力して操作を進めています。 win10 システムがクラッシュし、メモリ不足が表示された場合の対処方法 1. デスクトップ上でこのコンピュータを右クリックし、オプション リストで [プロパティ] を選択します。 2. 新しいウィンドウインターフェイスに入ったら、左上隅にある「システムの詳細設定」オプションをクリックします。 3. 開いたウィンドウで「」に切り替えます。

Laravelのtakeとlimitの違いを深く掘り下げる Laravelのtakeとlimitの違いを深く掘り下げる Mar 10, 2024 pm 01:00 PM

Laravelでは、クエリ結果の数を制限するために、takeメソッドやlimitメソッドなど、いくつかのメソッドをよく使用します。どちらもクエリ結果の数を制限するために使用できますが、微妙な違いがいくつかあります。この記事では、Laravelにおけるtakeとlimitの違いを詳しく掘り下げ、具体的なコード例で説明します。まずはtakeメソッドを見てみましょう。 take メソッドは Eloquent の一部であり、通常は次の目的で使用されます。

See all articles