PHP の異なるバージョン間の cURL の違い (-Experience)、curl_PHP の異なるバージョンのチュートリアル
Jul 12, 2016 am 08:52 AMPHP (-Experience) の異なるバージョン間の cURL の違い、curl の異なるバージョン
以前、記事の収集と畫像の保存を?qū)g現(xiàn)する?yún)Ъ末`ルを作成していました。記事の內(nèi)容はデータベースに保存されます。そして寫真は最初に畫像サーバーにアップロードしてから、畫像アドレスを返し、記事の畫像アドレスを置き換える必要があります。
ここで問題が発生します。すべてが正常に収集できましたが、ローカル テストは正常で、寫真も正常にアップロードできましたが、本番環(huán)境には寫真がありません。その後、段階的にデバッグしたところ、データが次のとおりであることがわかりました。そこにありますが、寫真が本番環(huán)境に正常にアップロードされなかったのはなぜですか?
數(shù)日間苦労した後、コードを段階的に読み、デバッグし、Baidu を使用した後、ついに答えを見つけました。なんと大きな落とし穴でした。curl postを使用して畫像サーバーにアップロードします
PHP の cURL は、
を介した POST リクエストをサポートします。 CURL_POSTFIELDS
傳遞關(guān)聯(lián)數(shù)組(而不是字符串)來生成multipart/form-data
+完全なファイル パス」の構(gòu)文を使用することにより、ファイルの添付をサポートしていました。これは、コマンド ラインから cURL プログラムを直接呼び出すための構(gòu)文と一致しています: @
リーリー
構(gòu)文の代わりに CURLFile を使用することをお?jiǎng)幛幛筏蓼? @
リーリー
構(gòu)文を拒否させ、CURLFile スタイルのファイルのみを受け入れるように強(qiáng)制できる CURL_SAFE_UPLOAD
選項(xiàng),可以強(qiáng)制PHP的cURL模塊拒絕舊的@
オプションも導(dǎo)入されています。デフォルト値は、5.5 の場(chǎng)合は false、5.6 の場(chǎng)合は true です。
しかし、落とし穴は次のとおりです: @
語法在5.5就已經(jīng)被打了deprecated,在5.6中就直接被刪除了(會(huì)產(chǎn)生 ErorException: The usage of the @filename
この構(gòu)文は 5.5 で非推奨となり、5.6 では直接削除されました (ElorException が生成されます: ファイルのアップロードに対する @filename
API の使用は非推奨です。使用してください)代わりに CURLFile クラスを使用します)。
PHP 5.6 以降の場(chǎng)合、CURL_SAFE_UPLOAD
を false に手動(dòng)で設(shè)定することは 無意味です。これは、文字通り「false に設(shè)定すると安全でない古いメソッドが有効になる」とは理解されていません。古いメソッドは廃止された構(gòu)文として完全に存在しなくなりました。 PHP 5.6+ == CURLFile のみ?;孟毪虮Г胜い扦坤丹?。
私のデプロイメント環(huán)境は 5.4 (@
Syntax のみ) ですが、私の開発環(huán)境は 5.6 (CURLFile のみ) です。どちらも、両方がサポートする移行バージョンである 5.5 には焦點(diǎn)を當(dāng)てていないため、環(huán)境判斷を備えた 2 セットのコードを作成する必要があります。
ここで問題が起こります...
環(huán)境判斷: マジックナンバーに注意してください!
この種の環(huán)境判定コードを見たことがあります:
リーリーこの種のコードを評(píng)価するには、クソという一言しかありません。
この判斷は、典型的な マジックナンバーの罠に陥ります。コード內(nèi)にバージョン番號(hào)が不可解に表示されるため、PHP マニュアルや更新履歴を長(zhǎng)時(shí)間確認(rèn)しないと、作成者がどの機(jī)能変更に引っかかっているのかを理解するのは困難です。
コードはそのルーツに戻る必要があります。実際のニーズは、従來の @
構(gòu)文に戻らずに、最初に CURLFile を使用することです。コードは次のとおりです:
明示的に指定された劣化オプションを推奨します
信頼性の高い観點(diǎn)から、古い CURL_SAFE_UPLOAD
的值,明確告知php是容忍還是禁止舊的@
語法。注意在低版本PHP中CURLOPT_SAFE_UPLOAD
構(gòu)文を許容するか禁止するかを PHP に明確に伝えるために
CURLOPT_SAFE_UPLOAD
定數(shù)自體が存在しない可能性があるため、以下を判斷する必要があることに注意してください: リーリー
cURLオプション設(shè)定の順番
curl_setopt()
單發(fā)還是curl_setopt_array()
バッチに関係なく、cURL のオプションは常に 1 つずつ有効になり、設(shè)定されたオプションは後続のオプションを設(shè)定するときに cURL の動(dòng)作にすぐに影響します。
たとえば CURLOPT_SAFE_UPLOAD
就和CURLOPT_POSTFIELDS
的行為有關(guān)。如果先設(shè)置CURLOPT_POSTFIELDS
再設(shè)置CURLOPT_SAFE_UPLOAD
の場(chǎng)合、後者の制約は有効になりません。なぜなら、前者を設(shè)定すると、cURL はデータの実際の読み取りと処理をすでに完了しているからです。
CURL にはこの落とし穴があるオプションがいくつかあるので注意してください。幸いなことに、この種の「依存関係」には選択肢は多くなく、仕組みも複雑ではないため、簡(jiǎn)単に扱うことができます。私の方法は、最初にすべてのオプションをバッチ設(shè)定してから curl_exec()
的前一刻才用curl_setopt()
單發(fā)設(shè)置CURLOPT_POSTFIELDS
まで待つことです。
実際、curl_setopt_array()
で使用される配列では、後ろの CURLOPT_POSTFIELDS
の位置も信頼できることが保証されています。 curl_setopt_array()
用的數(shù)組中,保證CURLOPT_POSTFIELDS
的位置在后邊也是可靠的。PHP的關(guān)聯(lián)數(shù)組是有順序保障的,我們也可以假設(shè)curl_setopt_array()
內(nèi)部的執(zhí)行順序一定是從頭到尾按順序[注A]
PHP の連想配列は順序が保証されています
curl_setopt_array()
の內(nèi)部実行順序は、[Note A]
の最初から最後まで順番である必要があると仮定することもできます。安心してご利用いただけます。 私のアプローチは、コードのパフォーマンスにさらなる保険を追加し、將來の不正行為を防ぐための順序の重要性を強(qiáng)調(diào)することです。 ??
ネームスペース
PHP バージョン 5.2 以下には名前空間がありません。コード內(nèi)でスペース區(qū)切り文字 が使用されている場(chǎng)合、パーサー エラーが発生します。 PHP 5.2 を扱うのは実際には簡(jiǎn)単で、名前空間を放棄するだけです。
注意する必要があるのは、名前空間を備えた PHP 5.3 以降です。 CURLFile を呼び出す場(chǎng)合でも、class_exists()
判斷CURLFile的存在性,都推薦寫成CURLFile
でトップレベルのスペースを明示的に指定する場(chǎng)合でも、名前空間でラップされたときにコードがクラッシュするのを防ぎます。
さて、この穴はかなり深いので、飛び出したらシェアします
(上記の解決策はウェブサイトから転載したものです。記事を見つけてくれてありがとう!)
。
ホットAIツール

Undress AI Tool
脫衣畫像を無料で

Undresser.AI Undress
リアルなヌード寫真を作成する AI 搭載アプリ

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

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡(jiǎn)単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中國(guó)語版
中國(guó)語版、とても使いやすい

ゼンドスタジオ 13.0.1
強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

phpisStillRelevantinModernenterpriseenvironments.1.modernphp(7.xand8.x)は、パフォーマンスゲイン、stricttyping、jit compilation、andmodernsyntaxを提供し、scaleApplications.2.phpintegrateSeffeCtiveTiveliveTiveliveTiveliveTiveTiveTiveliveTiveStures、

n 1クエリの問題を避け、関連するデータを事前にロードすることにより、データベースクエリの數(shù)を減らします。 2.必要なフィールドのみを選択して、メモリと帯域幅を保存するために完全なエンティティをロードしないようにします。 3. DoctrineのセカンダリキャッシュやRedis Cacheの高周波クエリ結(jié)果など、キャッシュ戦略を合理的に使用します。 4.エンティティのライフサイクルを最適化し、クリア()を定期的に呼び出してメモリを解放してメモリオーバーフローを防ぎます。 5.データベースインデックスが存在し、生成されたSQLステートメントを分析して、非効率的なクエリを避けます。 6.変更が不要なシナリオで自動(dòng)変更追跡を無効にし、パフォーマンスを改善するためにアレイまたは軽量モードを使用します。 ORMを正しく使用するには、SQLモニタリング、キャッシュ、バッチ処理、適切な最適化を組み合わせて、開発効率を維持しながらアプリケーションのパフォーマンスを確保する必要があります。

柔軟なPHPマイクロサービスを構(gòu)築するには、RabbitMQを使用して非同期通信を?qū)g現(xiàn)する必要があります。 2。信頼性を確保するために、永続的なキュー、永続的なメッセージ、リリース確認(rèn)、手動(dòng)ACKを構(gòu)成します。 3.指數(shù)バックオフ再試行、TTL、およびデッドレターキューセキュリティ処理の障害を使用します。 4.監(jiān)督などのツールを使用して、消費(fèi)者プロセスを保護(hù)し、ハートビートメカニズムを有効にしてサービスの健康を確保します。そして最終的に、システムが障害で継続的に動(dòng)作する能力を?qū)g現(xiàn)します。

正しいPHP Basicイメージを使用し、安全で最適化されたDocker環(huán)境を構(gòu)成することが、生産を?qū)g現(xiàn)するための鍵です。 1.攻撃面を減らしてパフォーマンスを向上させるための基本畫像としてPHP:8.3-fpm-alpineを選択します。 2.カスタムPHP.iniを介して危険な機(jī)能を無効にし、エラーディスプレイをオフにし、OpCacheとJITを有効にしてセキュリティとパフォーマンスを強(qiáng)化します。 3. NGINXを逆プロキシとして使用して、機(jī)密ファイルへのアクセスを制限し、PHPリクエストをPHP-FPMに正しく転送します。 4.マルチステージ最適化畫像を使用して開発依存関係を削除し、非ルートユーザーを設(shè)定してコンテナを?qū)g行します。 5. CRONなどの複數(shù)のプロセスを管理するためのオプションの監(jiān)督。 6.展開前に機(jī)密情報(bào)漏れがないことを確認(rèn)します

settings.jsonファイルは、ユーザーレベルまたはワークスペースレベルのパスにあり、VSCODE設(shè)定のカスタマイズに使用されます。 1。ユーザーレベルのパス:WindowsはC:\ users \\ appdata \ roaming \ code \ user \ settings.json、macos is/users //settings.json、linux is /home/.config/code/user/settings.json; 2。Workspace-Level Path:.vscode/settings Project Root Directoryの設(shè)定

PHPのゴミ収集メカニズムは參照カウントに基づいていますが、周期的な円形のゴミコレクターによって円形の參照を処理する必要があります。 1。変數(shù)への參照がない場(chǎng)合、參照カウントはすぐにメモリを解放します。 2.參照參照により、メモリを自動(dòng)的にリリースできなくなり、GCを検出およびクリーニングすることがGCに依存します。 3。GCは、「可能なルート」ZVALがしきい値に到達(dá)するか、GC_COLLECT_CYCLES()を手動(dòng)で呼び出すとトリガーされます。 4.長(zhǎng)期実行PHPアプリケーションは、メモリの漏れを避けるために、gc_status()を監(jiān)視し、gc_collect_cycles()を呼び出す必要があります。 5.ベストプラクティスには、gc_disable()を使用してパフォーマンスキー領(lǐng)域を最適化し、ormのclear()メソッドを介して繰り返しのオブジェクトを最適化する回路參照の回避が含まれます。

BREFにより、PHP開発者は、サーバーを管理せずにスケーラブルで費(fèi)用対効果の高いアプリケーションを構(gòu)築できます。 1.Brefは、最適化されたPHPランタイムレイヤーを提供し、PHP8.3およびその他のバージョンをサポートし、LaravelやSymfonyなどのフレームワークとシームレスに統(tǒng)合することにより、PHPをAwslambdaにもたらします。 2。展開手順には、次のものが含まれます。Composerを使用してBREFのインストール、httpエンドポイントや職人コマンドなどの関數(shù)とイベントを定義するためにserverless.ymlの構(gòu)成。 3. serverlessdeployコマンドを?qū)g行して、展開を完了し、Apigatewayを自動(dòng)的に構(gòu)成し、アクセスURLを生成します。 4。Lambdaの制限については、Brefは解決策を提供します。

readonlypropertiesinphp8.2canonlybeassignedonedonedontheconstructoraturatiddeclaration andcannotBemodifiedifiedifiedifiedifiedifiedifiedifiadtivedabilityattthelanguagelele.2.
