PHP の異なるバージョン間の cURL の違い (-Experience)、curl_PHP の異なるバージョンのチュートリアル
PHP (-Experience) の異なるバージョン間の cURL の違い、curl の異なるバージョン
以前、記事の収集と画像の保存を実現する収集ツールを作成していました。記事の内容はデータベースに保存されます。そして写真は最初に画像サーバーにアップロードしてから、画像アドレスを返し、記事の画像アドレスを置き換える必要があります。
ここで問題が発生します。すべてが正常に収集できましたが、ローカル テストは正常で、写真も正常にアップロードできましたが、本番環境には写真がありません。その後、段階的にデバッグしたところ、データが次のとおりであることがわかりました。そこにありますが、写真が本番環境に正常にアップロードされなかったのはなぜですか?
数日間苦労した後、コードを段階的に読み、デバッグし、Baidu を使用した後、ついに答えを見つけました。なんと大きな落とし穴でした。curl postを使用して画像サーバーにアップロードします
PHP の cURL は、
を介した POST リクエストをサポートします。 CURL_POSTFIELDS
传递关联数组(而不是字符串)来生成multipart/form-data
+完全なファイル パス」の構文を使用することにより、ファイルの添付をサポートしていました。これは、コマンド ラインから cURL プログラムを直接呼び出すための構文と一致しています: @
リーリー
構文の代わりに CURLFile を使用することをお勧めします: @
リーリー
構文を拒否させ、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 に明確に伝えるために
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
でトップレベルのスペースを明示的に指定する場合でも、名前空間でラップされたときにコードがクラッシュするのを防ぎます。
さて、この穴はかなり深いので、飛び出したらシェアします
(上記の解決策はウェブサイトから転載したものです。記事を見つけてくれてありがとう!)
。
PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

PHPにより、インタラクティブなWebコンテンツを簡単に作成できます。 1)HTMLを埋め込んでコンテンツを動的に生成し、ユーザー入力またはデータベースデータに基づいてリアルタイムで表示します。 2)プロセスフォームの提出と動的出力を生成して、XSSを防ぐためにHTMLSPECIALCHARSを使用していることを確認します。 3)MySQLを使用してユーザー登録システムを作成し、Password_HashおよびPreprocessingステートメントを使用してセキュリティを強化します。これらの手法を習得すると、Web開発の効率が向上します。

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHPは依然として動的であり、現代のプログラミングの分野で重要な位置を占めています。 1)PHPのシンプルさと強力なコミュニティサポートにより、Web開発で広く使用されています。 2)その柔軟性と安定性により、Webフォーム、データベース操作、ファイル処理の処理において顕著になります。 3)PHPは、初心者や経験豊富な開発者に適した、常に進化し、最適化しています。

PHPは、現代のWeb開発、特にコンテンツ管理とeコマースプラットフォームで依然として重要です。 1)PHPには、LaravelやSymfonyなどの豊富なエコシステムと強力なフレームワークサポートがあります。 2)パフォーマンスの最適化は、Opcacheとnginxを通じて達成できます。 3)PHP8.0は、パフォーマンスを改善するためにJITコンパイラを導入します。 4)クラウドネイティブアプリケーションは、DockerおよびKubernetesを介して展開され、柔軟性とスケーラビリティを向上させます。

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。

PHPとPythonにはそれぞれ独自の利点があり、さまざまなシナリオに適しています。 1.PHPはWeb開発に適しており、組み込みのWebサーバーとRich Functionライブラリを提供します。 2。Pythonは、簡潔な構文と強力な標準ライブラリを備えたデータサイエンスと機械学習に適しています。選択するときは、プロジェクトの要件に基づいて決定する必要があります。

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

WebStorm Mac版
便利なJavaScript開発ツール

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