ホームページ >バックエンド開発 >PHPチュートリアル >cURL 関数ライブラリのエラー コードの説明 PHPcurl_errno function_PHP チュートリアル

cURL 関数ライブラリのエラー コードの説明 PHPcurl_errno function_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:57:481283ブラウズ

この記事では、cURL 関数ライブラリのエラー コードを説明する PHP のcurl_errno関数を紹介します。詳しく知りたい方はぜひ参照してください。

背景の概要:
ゲーム インターフェイスは、PHP cURL 拡張機能を使用してリクエスト操作を実行します。ただし、要求されたサーバーは、明らかな理由もなく応答に失敗したりタイムアウトしたりすることがよくあります。つまり、リクエスト後、レスポンスデータは受信されません。この時点では、相手のAPIインターフェースに問題があるとか、サーバーに問題があるとは言えません。要するに、多くの問題が考えられます。一般化することはできません。

1. 一般的に使用される PHP cURL コードを指定します:

コードは次のとおりです コードをコピー

関数 sendRequestGame($url)
{
$header = array('Expect:');
$ch =curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
$retData =curl_exec( $ch );
curl_close( $ch );

$retData を返す;
}

PHP の cURL 関数をよく使用する人は、この関数に精通しているはずです。

同時に、私はほとんどの PHPer がこの方法でコードを書いているとも信じています。少なくとも、これが核心部分です。リクエストが失敗した理由と何が起こったのかを判断する方法はありません。

確かに、重大なセキュリティ インシデントが発生したため、この cURL ライブラリを再検討する必要がありました。リクエストが安定していて信頼できることを確認するにはどうすればよいでしょうか?障害が発生した場合、何が原因で起こったのかを知りたい。できるだけ早く知って人々にフィードバックし、タイムリーなコミュニケーション、調整、修復を実施します。

各リクエストの安定性と信頼性を確保するために、ログ機能を追加する必要があります。つまり、リクエストが失敗したときにリクエストされた関連パラメータのステータスとエラー コードがログに記録されます。便利です、失敗後に確認します。

コードを見てください:

コードは次のとおりです コードをコピー

関数 sendRequestGame($url)
{
$header = array('Expect:');
$ch =curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_TIMEOUT, 2);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);
$return =curl_exec( $ch );
$errno =curl_errno( $ch );
$info =curl_getinfo( $ch );
$info['errno'] = $errno;
curl_close( $ch );

$log = json_encode( $info );
putLog( $log );

$return;
を返す }

/**
* ログ。
* @param string $log ログの内容。
* @return void
​*/
関数 putLog( $log )
{
$log .= "nn";
$logDir = ディレクトリ名( __FILE__ );
$logPath = $logDir . "/curl_log.txt";
if ( !file_exists( $logPath ) )
{
$handle = fopen( $logPath, 'w' );
fclose ( $handle );
}
file_put_contents( $logPath, $log, FILE_APPEND );
}

sendRequestGame 関数が呼び出されると、各リクエストの情報が json_encode に送信され、ログ ファイルcurl_log.txt に保存されます。このようにして、各リクエストで何が起こったのかを明確に知ることができます。

改善後、2つの機能が追加されました:

$errno =curl_errno( $ch );
$info =curl_getinfo( $ch ); これら 2 つの関数は非常に重要です。最初のcurl_errnoは現在のリクエストのエラーコードを返します。0はエラーがなく、正常なリクエストであることを意味します。ゼロ以外のコード要求でエラーが発生しました。ただし、ほとんどのエラーは、リクエストが URL で指定されたサーバーに正しく到達しない場合に発生します。例: ホストにアクセスできない、URL エラー、404。もちろん、500 などの内部サーバー エラーの存在を排除することはできません。

2 番目の関数は、curl_getinfo 関数が現在のリクエストの関連情報を取得するということです。

コードは次のとおりですコードをコピー

7788 を文字通り理解できると思います。理解できない場合は、公式 PHP マニュアルを読んでください。

以下に、curl_errno 関数によって返される数値による説明である、curl エラー コードを添付します。
CURLE_UNSUPPORTED_PROTOCOL (1) – libcurl に渡した URL は、libcurl がサポートしていないプロトコルを使用しています。 使用していないコンパイル時オプションが原因である可能性があります (プロトコル文字列のスペルが間違っているか、プロトコルの libcurl コードが指定されていない可能性があります)。
CURLE_FAILED_INIT (2) – 非常に初期の初期化コードが失敗しました。 内部エラーまたは問題が発生している可能性があります。
CURLE_URL_MALFORMAT (3) – URL 形式が正しくありません。
CURLE_COULDNT_RESOLVE_PROXY (5) – プロキシ サーバーを解決できません。 指定されたプロキシ サーバー ホストを解決できません。
CURLE_COULDNT_RESOLVE_HOST (6) – ホストを解決できません。 指定されたリモート ホストを解決できません。
CURLE_COULDNT_CONNECT (7) – ホストまたはプロキシ サーバーに connect() できません。
CURLE_FTP_WEIRD_SERVER_REPLY (8) – libcurl は、FTP サーバーに接続した後、特定の応答を受信する必要があります。 このエラー コードは、異常な応答または間違った応答が受信されたことを示します。 指定されたリモート サーバーは正しい FTP サーバーではない可能性があります。
CURLE_REMOTE_ACCESS_DENIED (9) – URL で指定されたリソースにアクセスできません。 FTP の場合、リモート ディレクトリに変更しようとすると、これが発生します。
CURLE_FTP_WEIRD_PASS_REPLY (11) – libcurl は、FTP パスワードをサーバーに送信した後、正しい応答を受信する必要があります。 このエラー コードは、予期しないコードが返されたことを示します。
CURLE_FTP_WEIRD_PASV_REPLY (13) – libcurl は、PASV または EPSV コマンドに応答してサーバー側から有用な結果を受け取ることができませんでした。 サーバーに問題があります。
CURLE_FTP_WEIRD_227_FORMAT (14) – FTP サーバーは PASV コマンドに応答して行 227 を返します。このコードは、libcurl が行を解析できない場合に返されます。
CURLE_FTP_CANT_GET_HOST (15) – 新しい接続用のホストを検索中に内部エラーが発生しました。
CURLE_FTP_COULDNT_SET_TYPE (17) – 転送モードをバイナリまたは ASCII に設定しようとしたときにエラーが発生しました。
CURLE_PARTIAL_FILE (18) – ファイル転送サイズが予想より小さい、または大きかった。このエラーは、サーバーが最初に予想される転送サイズを報告し、その後、以前に指定されたサイズと一致しないデータを転送した場合に発生します。
CURLE_FTP_COULDNT_RETR_FILE (19) – 「RETR」コマンドが異常な応答を受信したか、完了した転送サイズが 0 バイトでした。
CURLE_QUOTE_ERROR (21) – カスタムの「QUOTE」コマンドをリモート サーバーに送信するときに、コマンドの 1 つがエラー コード 400 またはそれ以上の数値 (FTP の場合) を返したか、コマンドが正常に完了できなかったことを示しました。
CURLE_HTTP_RETURNED_ERROR (22) – このコードは、CURLOPT_FAILONERROR が TRUE に設定されており、HTTP サーバーがエラー コード >= 400 を返した場合に返されます。 (このエラー コードは、以前は CURLE_HTTP_NOT_FOUND として知られていました。)
CURLE_WRITE_ERROR (23) – 受信したデータをローカル ファイルに書き込むときにエラーが発生したか、書き込みコールバックによって libcurl にエラーが返されました。
CURLE_UPLOAD_FAILED (25) – アップロードを開始できません。 FTP の場合、サーバーは通常、STOR コマンドの実行を拒否します。通常、エラー バッファにはサーバーによる問題の説明が含まれます。 (このエラー コードは、以前は CURLE_FTP_COULDNT_STOR_FILE として知られていました。)
CURLE_READ_ERROR (26) – ローカル ファイルの読み取り中に問題が発生したか、読み取りコールバックによってエラーが返されました。
CURLE_OUT_OF_MEMORY (27) – メモリ割り当て要求が失敗しました。このエラーは重大です。このエラーが発生した場合は、非常に重大な問題が発生したことを示します。
CURLE_OPERATION_TIMEDOUT (28) – 操作がタイムアウトしました。 状況に基づいて指定されたタイムアウトに達しました。 注意: Urchin 6.6.0.2 では、タイムアウトを自分で変更できるようになりました。 リモート ログのダウンロード タイムアウトを指定するには、urchin.conf ファイルを開き、次の行のコメントを解除します:
#ダウンロードタイムアウト: 30
CURLE_FTP_PORT_FAILED (30) – FTP PORT コマンドがエラーを返しました。 この問題は、libcurl に適切なアドレス使用法が指定されていない場合に発生する可能性が高くなります。 「CURLOPT_FTPPORT」を参照してください。
CURLE_FTP_COULDNT_USE_REST (31) – FTP REST コマンドがエラーを返しました。サーバーが正常であれば、このようなことは起こらないはずです。
CURLE_RANGE_ERROR (33) – サーバーは範囲リクエストをサポートまたは受け入れません。
CURLE_HTTP_POST_ERROR (34) – この問題はまれで、内部混乱によって引き起こされます。
CURLE_SSL_CONNECT_ERROR (35) – このエラーは、SSL/TLS を同時に使用するときに発生する可能性があります。エラー バッファにアクセスして、問題をより詳細に説明する情報を確認できます。証明書 (ファイル形式、パス、権限)、パスワード、およびその他の要因が問題の原因となっている可能性があります。
CURLE_FTP_BAD_DOWNLOAD_RESUME (36) – ファイル サイズ制限を超えた FTP 接続を再開しようとしました。
CURLE_FILE_COULDNT_READ_FILE (37) – FILE:// パスのファイルを開けません。原因としては、ファイル パスが既存のファイルを認識していないことが考えられます。 ファイルのアクセス権限を確認することをお勧めします。
CURLE_LDAP_CANNOT_BIND (38) – LDAP はバインドできません。 LDAP バインド操作が失敗しました。
CURLE_LDAP_SEARCH_FAILED (39) – LDAP 検索が失敗しました。
CURLE_FUNCTION_NOT_FOUND (41) – 関数が見つかりません。 必要な zlib 関数が見つかりません。
CURLE_ABORTED_BY_CALLBACK (42) – コールバックによって中止されました。 コールバックは libcurl に「abort」を返しました。
CURLE_BAD_FUNCTION_ARGUMENT (43) – 内部エラー。 関数が間違ったパラメータで呼び出されました。
CURLE_INTERFACE_FAILED (45) – インターフェイス エラー。 指定された外部インターフェースは使用できません。 CURLOPT_INTERFACE を使用して、外部接続の送信元 IP アドレスを処理するために使用するインターフェイスを設定します。 (このエラー コードは、以前は CURLE_HTTP_PORT_FAILED として知られていました。)
CURLE_TOO_MANY_REDIRECTS (47) – リダイレクトが多すぎます。 リダイレクト中に、libcurl がページのクリック制限に達しました。制限を設定するには、CURLOPT_MAXREDIRS を使用してください。
CURLE_UNKNOWN_TELNET_OPTION (48) – CURLOPT_TELNETOPTIONS で設定されたオプションは認識されません。 関連ドキュメントを参照してください。
CURLE_TELNET_OPTION_SYNTAX (49) – Telnet オプション文字列の形式が正しくありません。
CURLE_PEER_FAILED_VERIFICATION (51) – リモート サーバーの SSL 証明書または SSH md5 フィンガープリントが正しくありません。
CURLE_GOT_NOTHING (52) – サーバーはデータを返しませんでした。この場合、エラーが発生しました。
CURLE_SSL_ENGINE_NOTFOUND (53) – 指定された暗号化エンジンが見つかりませんでした。
CURLE_SSL_ENGINE_SETFAILED (54) – 選択した SSL 暗号化エンジンをデフォルト オプションとして設定できません。
CURLE_SEND_ERROR (55) – ネットワーク データを送信できません。
CURLE_RECV_ERROR (56) – ネットワーク データの受信に失敗しました。
CURLE_SSL_CERTPROBLEM (58) – ローカルクライアント証明書に問題があります
CURLE_SSL_CIPHER (59) – 指定されたキーは使用できません
CURLE_SSL_CACERT (60) – 既知の CA 証明書を使用してピア証明書を検証できません
CURLE_BAD_CONTENT_ENCODING (61) – 転送エンコードが認識されません
CURLE_LDAP_INVALID_URL (62) – 無効な LDAP URL
CURLE_FILESIZE_EXCEEDED (63) – ファイル サイズ制限を超えました
CURLE_USE_SSL_FAILED (64) – 要求された FTP SSL レベルが失敗しました
CURLE_SEND_FAIL_REWIND (65) – 送信操作を実行するとき、curl は再送信のためにデータをロールアラウンドする必要がありましたが、ロールバック操作は失敗しました
CURLE_SSL_ENGINE_INITFAILED (66) – SSL エンジンの初期化に失敗しました
CURLE_LOGIN_DENIED (67) – リモートサーバーがcurlログインを拒否しました (7.13.1の新機能)
CURLE_TFTP_NOTFOUND (68) – TFTP サーバーにファイルが見つかりません
CURLE_TFTP_PERM (69) – TFTP サーバーで権限の問題が発生しました
CURLE_REMOTE_DISK_FULL (70) – サーバーのディスク容量が不足しています
CURLE_TFTP_ILLEGAL (71) – 不正な TFTP 操作
CURLE_TFTP_UNKNOWNID (72) – TFTP トランスポート ID が不明です
CURLE_REMOTE_FILE_EXISTS (73) – ファイルは既に存在するため上書きできません
CURLE_TFTP_NOSUCHUSER (74) – 機能している TFTP サーバーはこのエラーを返しません
CURLE_CONV_FAILED (75) – 文字変換に失敗しました
CURLE_CONV_REQD (76) – 呼び出し元は変換コールバックを登録する必要があります
CURLE_SSL_CACERT_BADFILE (77) – SSL CA 証明書の読み取りの問題 (パス エラーまたはアクセス権の問題の可能性)
CURLE_REMOTE_FILE_NOT_FOUND (78) – URL で参照されているリソースが存在しません
CURLE_SSH (79) – SSH セッションで認識できないエラーが発生しました
CURLE_SSL_SHUTDOWN_FAILED (80) – SSL 接続を終了できません

配列

(
[URL] => http://www.bKjia.c0m/
[コンテンツタイプ] => 文字セット=UTF-8
; [http_code] => 200
[ヘッダーサイズ] => 321
[リクエストサイズ] => 53
[ファイル時間] => -1
[ssl_verify_result] => 0
[リダイレクト数] => 0
[合計時間] => 2.075
[名前検索時間] => 0
[接続時間] => 0.031
[転送前時間] => 0.031
[サイズ_アップロード] => 0
; [サイズ_ダウンロード] => 79042
[speed_download] => 38092
[speed_upload] => 0
[ダウンロードコンテンツの長さ] => [アップロードコンテンツの長さ] => 0
[転送開始時間] => 1.388
[リダイレクト時間] => 0
[証明書情報] => 配列
(
)

[redirect_url] =>

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/632079.html技術記事この記事では、PHP の cURL 関数ライブラリのエラー コードの説明を紹介します。詳しく知りたい人は参照してください。 背景の概要: ゲーム インターフェイスは PHP cURL 拡張機能を使用して作成されています...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。