目次
PHP (-Experience) の異なるバージョン間の cURL の違い、curl の異なるバージョン
環境判断: マジックナンバーに注意してください!
明示的に指定された劣化オプションを推奨します
ネームスペース
ホームページ バックエンド開発 PHPチュートリアル PHP の異なるバージョン間の cURL の違い (-Experience)、curl_PHP の異なるバージョンのチュートリアル

PHP の異なるバージョン間の cURL の違い (-Experience)、curl_PHP の異なるバージョンのチュートリアル

Jul 12, 2016 am 08:52 AM
curl php 違う 違い バージョン

PHP (-Experience) の異なるバージョン間の cURL の違い、curl の異なるバージョン

以前、記事の収集と画像の保存を実現する収集ツールを作成していました。記事の内容はデータベースに保存されます。そして写真は最初に画像サーバーにアップロードしてから、画像アドレスを返し、記事の画像アドレスを置き換える必要があります。

ここで問題が発生します。すべてが正常に収集できましたが、ローカル テストは正常で、写真も正常にアップロードできましたが、本番環境には写真がありません。その後、段階的にデバッグしたところ、データが次のとおりであることがわかりました。そこにありますが、写真が本番環境に正常にアップロードされなかったのはなぜですか?

数日間苦労した後、コードを段階的に読み、デバッグし、Baidu を使用した後、ついに答えを見つけました。なんと大きな落とし穴でした。

curl postを使用して画像サーバーにアップロードします

PHP の cURL は、

を介した POST リクエストをサポートします。 CURL_POSTFIELDS传递关联数组(而不是字符串)来生成multipart/form-data

従来、PHP の cURL は、cURL が読み取りおよびアップロードするための配列データ内で「

+完全なファイル パス」の構文を使用することにより、ファイルの添付をサポートしていました。これは、コマンド ラインから cURL プログラムを直接呼び出すための構文と一致しています: @ リーリー

しかし、PHP は 5.5 以降、ファイルを指すための新しい CURLFile クラスを導入しました。 CURLFile クラスは、マルチパート/フォームデータ データに表示される MIME タイプ、ファイル名などの追加情報を詳細に定義することもできます。 PHP では、古い

構文の代わりに CURLFile を使用することをお勧めします: @ リーリー

PHP 5.5 では、PHP の cURL モジュールに古い

構文を拒否させ、CURLFile スタイルのファイルのみを受け入れるように強制できる CURL_SAFE_UPLOAD选项,可以强制PHP的cURL模块拒绝旧的@ オプションも導入されています。デフォルト値は、5.5 の場合は false、5.6 の場合は true です。

しかし、落とし穴は次のとおりです: @语法在5.5就已经被打了deprecated,在5.6中就直接被删除了(会产生 ErorException: The usage of the @filenameこの構文は 5.5 で非推奨となり、5.6 では直接削除されました (ElorException が生成されます: ファイルのアップロードに対する @filename API の使用は非推奨です。使用してください)代わりに CURLFile クラスを使用します)。

PHP 5.6 以降の場合、CURL_SAFE_UPLOAD を false に手動で設定することは 無意味です。これは、文字通り「false に設定すると安全でない古いメソッドが有効になる」とは理解されていません。古いメソッドは廃止された構文として完全に存在しなくなりました。 PHP 5.6+ == CURLFile のみ。幻想を抱かないでください。

私のデプロイメント環境は 5.4 (@Syntax のみ) ですが、私の開発環境は 5.6 (CURLFile のみ) です。どちらも、両方がサポートする移行バージョンである 5.5 には焦点を当てていないため、環境判断を備えた 2 セットのコードを作成する必要があります。

ここで問題が起こります...

環境判断: マジックナンバーに注意してください!

この種の環境判定コードを見たことがあります:

リーリー

この種のコードを評価するには、クソという一言しかありません。

この判断は、典型的な マジックナンバーの罠に陥ります。コード内にバージョン番号が不可解に表示されるため、PHP マニュアルや更新履歴を長時間確認しないと、作成者がどの機能変更に引っかかっているのかを理解するのは困難です。

コードはそのルーツに戻る必要があります。実際のニーズは、従来の @ 構文に戻らずに、最初に CURLFile を使用することです。コードは次のとおりです:

リーリー

明示的に指定された劣化オプションを推奨します

信頼性の高い観点から、古い CURL_SAFE_UPLOAD的值,明确告知php是容忍还是禁止旧的@语法。注意在低版本PHP中CURLOPT_SAFE_UPLOAD 構文を許容するか禁止するかを PHP に明確に伝えるために

の値を指定することをお勧めします。 PHP の以前のバージョンでは、CURLOPT_SAFE_UPLOAD 定数自体が存在しない可能性があるため、以下を判断する必要があることに注意してください:

リーリー

cURLオプション設定の順番

curl_setopt()单发还是curl_setopt_array()バッチに関係なく、cURL のオプションは常に 1 つずつ有効になり、設定されたオプションは後続のオプションを設定するときに cURL の動作にすぐに影響します。

たとえば CURLOPT_SAFE_UPLOAD就和CURLOPT_POSTFIELDS的行为有关。如果先设置CURLOPT_POSTFIELDS再设置CURLOPT_SAFE_UPLOAD の場合、後者の制約は有効になりません。なぜなら、前者を設定すると、cURL はデータの実際の読み取りと処理をすでに完了しているからです。

CURL にはこの落とし穴があるオプションがいくつかあるので注意してください。幸いなことに、この種の「依存関係」には選択肢は多くなく、仕組みも複雑ではないため、簡単に扱うことができます。私の方法は、最初にすべてのオプションをバッチ設定してから curl_exec()的前一刻才用curl_setopt()单发设置CURLOPT_POSTFIELDS まで待つことです。

実際、curl_setopt_array() で使用される配列では、後ろの CURLOPT_POSTFIELDS の位置も信頼できることが保証されています。 curl_setopt_array()用的数组中,保证CURLOPT_POSTFIELDS的位置在后边也是可靠的。PHP的关联数组是有顺序保障的,我们也可以假设curl_setopt_array()内部的执行顺序一定是从头到尾按顺序[注A]PHP の連想配列は順序が保証されています

、また、curl_setopt_array() の内部実行順序は、[Note A] の最初から最後まで順番である必要があると仮定することもできます。安心してご利用いただけます。

私のアプローチは、コードのパフォーマンスにさらなる保険を追加し、将来の不正行為を防ぐための順序の重要性を強調することです。 🎜

ネームスペース

PHP バージョン 5.2 以下には名前空間がありません。コード内でスペース区切り文字 が使用されている場合、パーサー エラーが発生します。 PHP 5.2 を扱うのは実際には簡単で、名前空間を放棄するだけです。

注意する必要があるのは、名前空間を備えた PHP 5.3 以降です。 CURLFile を呼び出す場合でも、class_exists()判断CURLFile的存在性,都推荐写成CURLFile でトップレベルのスペースを明示的に指定する場合でも、名前空間でラップされたときにコードがクラッシュするのを防ぎます。

さて、この穴はかなり深いので、飛び出したらシェアします

(上記の解決策はウェブサイトから転載したものです。記事を見つけてくれてありがとう!)

www.bkjia.com本当http://www.bkjia.com/PHPjc/1126175.html技術記事 PHP のバージョン間での cURL の違い (-Experience)、curl のバージョンの違い 収集した記事や画像を保存する収集ツールを作成しました。記事の内容はデータベースに保存されます...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

一致式(PHP 8)とそれがスイッチとどのように異なるかを説明します。 一致式(PHP 8)とそれがスイッチとどのように異なるかを説明します。 Apr 06, 2025 am 12:03 AM

PHP8では、一致式は、式の値に基づいて異なる結果を返す新しい制御構造です。 1)Switchステートメントに似ていますが、実行ステートメントブロックの代わりに値を返します。 2)一致式の式は厳密に比較され、セキュリティが向上します。 3)スイッチステートメントの脱落の可能性を回避し、コードのシンプルさと読みやすさを向上させます。

H5とミニプログラムとアプリの違い H5とミニプログラムとアプリの違い Apr 06, 2025 am 10:42 AM

H5。ミニプログラムとアプリの主な違いは次のとおりです。技術アーキテクチャ:H5はWebテクノロジーに基づいており、ミニプログラムとアプリは独立したアプリケーションです。経験と機能:H5は軽量で使いやすく、機能が限られています。ミニプログラムは軽量で、インタラクティブが良好です。アプリは強力で、スムーズな経験があります。互換性:H5はクロスプラットフォーム互換性があり、アプレットとアプリはプラットフォームによって制限されています。開発コスト:H5には、開発コストが低く、中程度のミニプログラム、最高のアプリがあります。適用可能なシナリオ:H5は情報表示に適しており、アプレットは軽量アプリケーションに適しており、アプリは複雑な機能に適しています。

クロスサイトリクエストフォーファリー(CSRF)とは何ですか?また、PHPにCSRF保護をどのように実装しますか? クロスサイトリクエストフォーファリー(CSRF)とは何ですか?また、PHPにCSRF保護をどのように実装しますか? Apr 07, 2025 am 12:02 AM

PHPでは、予測不可能なトークンを使用して、CSRF攻撃を効果的に防ぐことができます。特定の方法には次のものが含まれます。1。フォームのCSRFトークンを生成および埋め込みます。 2.リクエストを処理するときにトークンの有効性を確認します。

XPathを使用して、JavaScriptの指定されたDOMノードから検索する方法は? XPathを使用して、JavaScriptの指定されたDOMノードから検索する方法は? Apr 04, 2025 pm 11:15 PM

JavaScriptのDOMノードの下でのXpath検索方法の詳細な説明、XPath式に基づいてDOMツリーから特定のノードを見つける必要があることがよくあります。あなたがする必要があるなら...

どのようにしてクラスが拡張されたり、PHPでメソッドがオーバーライドされたりするのを防ぐことができますか? (最終キーワード) どのようにしてクラスが拡張されたり、PHPでメソッドがオーバーライドされたりするのを防ぐことができますか? (最終キーワード) Apr 08, 2025 am 12:03 AM

PHPでは、最終的なキーワードを使用して、クラスが継承されないようにし、メソッドが上書きされます。 1)クラスを決勝としてマークする場合、クラスを継承することはできません。 2)メソッドを最終的にマークする場合、メソッドはサブクラスによって書き換えられません。最終的なキーワードを使用すると、コードの安定性とセキュリティが保証されます。

Routerフォルダーの下のindex.jsファイルでvue.use(vuerouter)を呼び出す必要があるのはなぜですか? Routerフォルダーの下のindex.jsファイルでvue.use(vuerouter)を呼び出す必要があるのはなぜですか? Apr 05, 2025 pm 01:03 PM

Vueアプリケーションを開発するときに、ルーターフォルダーの下にindex.jsファイルにvuerouterを登録する必要性があるため、ルーティング構成で問題が発生することがよくあります。特別...

PSのエクスポートPDFのパスワード保護を設定する方法 PSのエクスポートPDFのパスワード保護を設定する方法 Apr 06, 2025 pm 04:45 PM

Photoshopでパスワードで保護されたPDFをエクスポート:画像ファイルを開きます。 [ファイル]&gtをクリックします。 「エクスポート」> 「PDFとしてのエクスポート」。 「セキュリティ」オプションを設定し、同じパスワードを2回入力します。 [エクスポート]をクリックして、PDFファイルを生成します。

See all articles