ホームページ バックエンド開発 PHPチュートリアル php ファイルはストリーミング形式で転送されます

php ファイルはストリーミング形式で転送されます

Jun 23, 2016 pm 02:14 PM

ファイル ストリーミング ストリーミング送信

シナリオ:
クライアントは再生するためにサーバー上の mp3 ファイルを取得しますが、何らかの理由でクライアントはファイルを書き込むことができません、つまり、ファイルをダウンロードできません。
現在のアイデアは、PHP 側で fopen -> fread ->echo を使用して mp3 バッファをメモリに読み込み、クライアントがバッファを受信して​​メモリに保存し、メモリ内でサウンドを再生することです。

問題:
サーバー上には 5143 バイトの Mp3 がありますが、クライアントは 5042 しか受信しません。テストでは、いくつかの文字がエスケープされていることがわかりました。インターネット上で多くの方法を見つけましたが、どれも機能しないようです。 PHPを勉強する必要がありますが、エスケープせずに正しいファイルバッファを取得する方法はありますか? ディスカッション(ソリューション)への返信(ソリューション) "Location: http://yge.me/x.mp3");
//MP3 のすべての URL アドレス。 //x.mp3 は実際のファイルです
?>

1. echo file_get_contents('file) を使用します。 name'); その他の問題を考慮する必要はありません

2. readfile('file name'); を使用します その他の問題を考慮する必要はありません

3. クライアントがファイルを書き込めるかどうかはサービスではありません クライアントが管理できるもの

1 . echo file_get_contents('file name'); を使用する 他の問題を考慮する必要はありません
2. readfile('file name'); を使用します 他の問題を考慮する必要はありません

3. クライアントがファイルを書き込めるかどうかはサービスではありませんDuan Neng が対応できます



午後ずっと試した結果、echo file_get_contents('file name') にも問題があるはずだと判断しました。
16 進数のデータを比較したところ、改行である 0D がすべて失われていることがわかりました
クライアント (C++) でデータを受信して​​すぐに印刷を開始しましたが、OD はエスケープされなかったはずです。バーが送られてきました。
なぜそのような文字列をエスケープしないのでしょうか?

なぜ 0x0d が必要なのでしょうか?

あなたは MP3 プレーヤーではありませんか? 0x0dがないのが普通ではないでしょうか?



なぜ 0x0d が必要なのでしょうか?

あなたは MP3 プレーヤーではありませんか? 0x0dがないのが普通ではないでしょうか?


さて、この文字は mp3 の改行を表すものではないかもしれません。これらの文字がなければ、mp3 は単なるノイズであるように思われるためです。単なるバイトストリームなので、0x0D が出現するのは正常です。結局のところ、バイト数に換算すると 0 ~ FF は 256 種類しかありません。
さて、私の考えでは、ファイルサイズが5000バイトであると仮定して、5000バイトを転送するので、ノイズは確実に発生しません。


MP3 は圧縮され、エンコードされています。「ノイズ」を避けたい場合は、セグメントごとに転送できます

そうですね。しかし、0x0D は送信されず、PHP によってスペースとして削除されてしまうため、pack("c1", "13") を指定しても 0x0D を表示できず、データが不完全になります。 。

MP3 は圧縮され、エンコードされています。「ノイズ」を発生させたくない場合は、部分ごとに転送できます。しかし、0x0D は送信されず、PHP によってスペースとして削除されてしまうため、pack("c1", "13") を指定しても 0x0D を表示できず、データが不完全になります。 。


冗談じゃない
あなたの根拠は何ですか?

冗談じゃない
あなたの根拠は何ですか?



画像を見てください。上がファイルの元のテキストで、下が C++ メモリのデバッグ部分です。これがないフラグメントは一致します。

php コードは次の 3 つの文だけです

echo file_get_contents("/var/www/SoundEng/good.mp3");

?>

冗談は言わないでください

根拠は何ですか? ?

次に、C++ 部分は元のデータを受け取り、それは絶対にエスケープされないので、PHP でエスケープする必要があります。

echo Pack("c1","13"); を試してみました -- 受け取った値も 00 であることがわかります。おそらくエスケープされていると思いますが、php には詳しくありません...

質問です。php はヘッダーを送信しませんか?どのヘッダーですか?

0x0d の喪失は PHP 側では決して問題ではありません。そうでなければ、PHP から送信された画像やさまざまなバイナリデータが破壊されてしまうのではないか?なぜあなただ​​けがこの問題に遭遇するのでしょうか?
データを読み取るために fgets を使用している場合、それは C プログラムに問題があると思います

質問がありますが、あなたの php はヘッダーを送信していませんか?どのヘッダーですか? ストリームヘッダーマルチバイトを試してみましたが、機能しないようです

0x0d が失われることは PHP 側では絶対に問題ではありません。そうしないと、PHP から送信された画像やさまざまなバイナリデータが破壊されてしまうのではないでしょうか。この問題に遭遇したのはなぜあなただ​​けなのでしょうか? fgets を使用してデータを読み取っている場合は、php ファイルに何かを追加する必要があると思います。はストリームです... .そうですね、私はそれを読み取るために fget を使用しませんでした。 C で http リクエストを作成し、それを読み取るためにシステムの API を呼び出したのですが、この時点でエスケープされたのかもしれません。わかりました、ありがとう、もう一度試してみます。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

PHPロギング:PHPログ分析のベストプラクティス PHPロギング:PHPログ分析のベストプラクティス Mar 10, 2025 pm 02:32 PM

PHPロギングは、Webアプリケーションの監視とデバッグ、および重要なイベント、エラー、ランタイムの動作をキャプチャするために不可欠です。システムのパフォーマンスに関する貴重な洞察を提供し、問題の特定に役立ち、より速いトラブルシューティングをサポートします

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

PHPにおける後期静的結合の概念を説明します。 PHPにおける後期静的結合の概念を説明します。 Mar 21, 2025 pm 01:33 PM

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 Mar 28, 2025 pm 05:12 PM

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。

See all articles